|
|
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Есть две таблицы в разных базах, которые содержат одну и ту же информацию. При изменении одной таблицы, должны изменяться данные в другой через таблицу базы "обновления", в которой выделены только те записи, которые отсутствуют или ОТЛИЧАЮТСЯ ХОТЯ БЫ ПО ОДНОМУ ПОЛЮ . Дык вот как бы создать табличку(данные подлежащие обновлению) пограмотнее, да пошустрее??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2004, 21:14:46 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
А она должна создаваться пакетно или онлайн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2004, 21:19:23 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
InvisibleЕсть две таблицы в разных базах, которые содержат одну и ту же информацию. При изменении одной таблицы, должны изменяться данные в другой через таблицу базы "обновления", в которой выделены только те записи, которые отсутствуют или ОТЛИЧАЮТСЯ ХОТЯ БЫ ПО ОДНОМУ ПОЛЮ . Дык вот как бы создать табличку(данные подлежащие обновлению) пограмотнее, да пошустрее??? если mdb/базы на sql находятся в локальной сети то крайне редко есть необходимость делать 2(две)таблицу лучше дополнительные поля- флажки если базы разнесены то есть стандартные приемы репликации - целая отрасль науки о построении СУБД - ищи по конфе приёмы отличаются скоростью/надежностью канала/мерами обеспечения безопасности в идеале ставится отдельный "монитор" который все рулит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2004, 22:50:19 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Владимир СанычА она должна создаваться пакетно или онлайн? Не совсем понял, но она явно создается не в онлайне, так что остается вариант пакетно. :) База выходит за пределы локальной сетки. Есть копия таблицы, подлежащей обновлению и новосозданная таблица. Нужно найти различающиеся записи. Мои варианты: 1) SQL-прямо в построителе запроса объединяем соответствующие поля Left Join от Новой к старой таблице. Выводим F1,F2,F3,F4 поля, которые не равны соответствующим через OR (макет) Select * From New (join там всяческий) Where F1<>P1 or F2<>P2 or F3<>P3 or f4<>p4 2)Через рекордсеты Findfirst (F1<>P1 or F2<>P2 or F3<>P3 or f4<>p4) If nomatch ... Хотелось бы услышать рецензии или встречные предложения профессионалов. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 13:43:20 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
1 Вариант не работает - пишет "несоответствие типов данных в условии отбора" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 13:48:27 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Вариант 1 явно быстрее. Если несоответствие типов, значит надо что-то подправить. И плюс два селекта для записей добавленных и удаленных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 13:56:05 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Invisible[quot Владимир Саныч]База выходит за пределы локальной сетки. Есть копия таблицы, подлежащей обновлению и новосозданная таблица. я понял так что существуют 2 копии таблицы Master и Slave территориально разнесенные копия Slave неким образом транспортируется в ЛВС к Master извлекается таблица рассогласования которая транспортируется в ЛВС Slave где применяется к Slave для согласования с Master ? (причем на вреия транспортировки изменение Slave запрещено) правильно ли я сформулировал твою схему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 14:00:46 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
2 Shuard: That's right. Есть хорошее решение???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 14:54:42 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
есть правильное решение: поле FLAG тип Long которое бизнес-логикой Slave ставится в -1 при любом Insert/Update и соответственно сбрасывается в 0 монитором репликации тогда на Master стороне Where Flag = -1(True) если сервера синхронизованы или поднята служба точного времени то ещё не помешает поле дата(время) теперь по сути задачи если наша таблица справочник то она всегда распространяется от Master к Slave иначе ключи сломаются если наша таблица содержательная то получается встречная репликация её рулить очень сложно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 15:15:08 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Master является справочником (Slave- его копия на другом терминале). Но ключей ни в одной, ни в другой таблице нет, т. к. записи в Master-е не определены каким-то одним диапазоном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 15:39:42 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
InvisibleMaster является справочником (Slave- его копия на другом терминале). Но ключей ни в одной, ни в другой таблице нет, т. к. записи в Master-е не определены каким-то одним диапазоном. терминале - обьясни ключей ни в одной, ни в другой таблице нет - более чем плохо - вероятно целиком справочник нельзя пересылать из-за размера а хочется уменьшить траффик путем пересылки изменённых строк - это понятно КАК ДЕЛАТЬ UPDATE записи в таблице не имеющей ключа ? решение создать в Master ключ - счетчик в Slave - одноименное поле Long + создать в Master поле FLAG Long при любых Insert в Master FLag поднимается =1 при любых Update в Master FLag поднимается =2 2 временные таблички : на изменение и модификацию запрос на выборку Where Flag=1 ---> temp1 запрос на выборку Where Flag=1 ---> temp2 после построения временных таблицы Flag=0 на стороне Slave temp1 --> Insert поле счетчика из temp1 temp2 -->Update поле счетчика идет в Where или INNER JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 16:08:17 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
редукция Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 16:09:46 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
ShuhardКАК ДЕЛАТЬ UPDATE записи в таблице не имеющей ключа ?UPDATE на самом деле проводить особо и не надо, потому, что помимо изменения существующих записей, в Master-е могут появляться новые и уходить старые записи. Поскольку данные в таблицах побиты на группы, то при обнаружении малейшего несоответствия в каком-либо поле одной из групп (это несоответствие может даже заключатся в разнице количества строк в пределах одной группы), все строки группы из Master копируются в temp. Slave получает temp и удаляет из себя группы, присутствующие в temp, после чего добавляет все из temp и удаляет его. Нужно только сформировать такой вот запрос, как запрос без подчиненных записей, только на все поля. Но это работает очень долго. Я вот и спросил есть ли другие варианты? p.s. Да, забыл упомянуть, что Master, тоже пересоздается полностью(но это уже совсем другая история), так что флаги при изменении строк не покатят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 17:26:23 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. код пжалста ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 17:47:54 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
автор помимо изменения существующих записей, в Master-е могут появляться новые и уходить старые записи. если нет ключа и могут появляться новые и уходить старые записи то не существует алгоритма сравнения НЕВОЗМОЖНО ВЫБРАТЬ СТРОКИ для дальнейшего сравнения их содержимого ИТОГО:Ты что-то недоговариваешь - колись а то Саныч со штурмовой винтовкой придет и хандец! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 17:58:47 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 18:00:38 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
ShuhardКАК ДЕЛАТЬ UPDATE записи в таблице не имеющей ключа ? А что, написать условие обновления/удаления по неключевым полям великий Кханан запрещает? :) Код: plaintext 1. 2. То же самое для DELETE У меня схожая задача - совмещение данных редактируемых на разных рабочих станциях и присылаемых по почте. Ничего лучше не придумал, кроме как сравнение по "значимым" полям. Пользователю показываются различающиеся записи и он уже сам решает что принимать, а что нет. Если нужен полностью автоматические режим - то можно сделать что-то похожее на Access replication. проверять дату модификации... задать приоритет данных источников и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 18:01:43 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
BelyНичего лучше не придумал, кроме как сравнение по "значимым" полям. Вот, вот - у меня 9 полей, каждое из которых значимое - какое из них ключевое??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 18:25:01 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
авторВот, вот - у меня 9 полей, каждое из которых значимое - какое из них ключевое??? Все поля. Это у тебя просто составной ключ, фактически. Только нет остальных свойств ключа - уникальности комбинации, как минимум. У меня ситуация не так проста, как описано у тебя. У меня фактически надо реплицировать кусок базы данных - начиная с записи отчета (основная таблица) и со всеми подчиненными таблицами и таблицами справочниками на всю глубину связей. Получается таблиц 15 и до 5 таблиц завязанных одна на другую. Да, забыл еще сказать про частично закольцованные связи "сам на себя". Вот такая каракатица выходит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2004, 18:39:24 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Invisible Вот, вот - у меня 9 полей, каждое из которых значимое - какое из них ключевое??? могут-ли повторяться идентичные наборы этих 9 полей ? если не могут то 9 полей образуют ключ - позволяя однозначно идентифицировать запись в таблице. если могут повторяться - то работать с ней(таблицей) через sql ,как с элементом реляционной базы крайне сложно - придётся открывать RecordSetы и заменять INNER JOIN на свою собственную логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 09:07:40 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Bely Ничего лучше не придумал, кроме как сравнение по "значимым" полям. Пользователю показываются различающиеся записи и он уже сам решает что принимать, а что нет. Если нужен полностью автоматические режим - то можно сделать что-то похожее на Access replication. проверять дату модификации... задать приоритет данных источников и т.д. про Where и составной ключ понимаю. Пытаюсь добиться от автора ответа про устройства данных - выходит туго. От твоей задачи коренное отличие - у тебя встречная репликация с "ручным" принятием решений У автора однонаправленное(от Master) распространение справочника - необходимость инкрементного(кумулятивного) обращения с ней не понятно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 09:13:25 |
|
||
|
Сравнение таблиц
|
|||
|---|---|---|---|
|
#18+
Bely авторВот, вот - у меня 9 полей, каждое из которых значимое - какое из них ключевое??? Все поля. Это у тебя просто составной ключ, фактически. Только нет остальных свойств ключа - уникальности комбинации, как минимум. нет остальных свойств ключа - уникальности комбинации Это не так ,если нельзя однозначно определить запись(уникальность) - не ПЕРВИЧНЫЙ ключ - нельзя делать UPDATE число записей будет 0 или >1 - нельзя сравнивать строки 2-х таблиц ,если в каждой выбирается >1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 09:18:29 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32559886&tid=1673883]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 308ms |

| 0 / 0 |
