|
Баг Access+MS SQL 2008R2
|
|||
---|---|---|---|
#18+
Коллеги, прошу помощи! Есть база MS ACCESS 2010 SP2 + прилинкованные к ней таблицы MS SQL Server 2008 R2 (версия 10.50.1617.0) Обмен через ODBC driver 11 for SQL Server Есть таблица на MS SQL с числом записей около 700 000. На таблице висит триггер на insert - вставляет строчку в другую таблицу (логирование добавления записей) Что происходит: открываю в Access таблицу, добавляю новую запись руками, перехожу на соседнюю запись что бы новая сохранилась и в этот момент на месте моей новой записи появляется произвольная существующая запись! Чисто визуально, на месте моей новой! Потом я обновляю источник данных и вижу что моя новая запись есть и она сохранена. Т.е. натурально глюки! Все тоже самое происходит при me.dirty=false если я делаю добавление записи руками через форму. после обновления записи на ее месте появляется произвольная запись! Обращаю внимание, что requery источника данных не происходит! Т.е. это не типа обновился источник и другая запись отобразилась! Что известно на данный момент: 1. Обновлял ODBC драйвер до 17 версии - не помогло 2. При отключении триггера проблема сразу исчезает! Но... триггер - проще некуда: ALTER TRIGGER [dbo].[table_cdc_ins] ON [dbo].[table] AFTER INSERT AS BEGIN SET NOCOUNT ON; insert cdc.[table]([cdc_op],[data]) select 1, [data] from inserted; END как только я убираю инструкцию insert из триггера - проблема исчезает. Нюанс в том, что вставка происходит в таблицу в другой схеме. Схему пока менять не пробовал. 3. В точности такой же триггер висит на других таблицах и к глюкам это не приводит! Но... в других таблицах меньшее количество строк. При удалении из проблемной таблицы половину данных - проблема исчезает! Ясное дело, что почистить таблицу я не могу как и не могу избавиться от триггера. 4. Сменить MS Access пока тоже не могу. 5. Проблема проявляется на нескольких таблицах с большим количеством данных. Надеюсь на коллективный разум и ваши подсказки! Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2019, 14:04 |
|
Баг Access+MS SQL 2008R2
|
|||
---|---|---|---|
#18+
Соколов Валерий, Только что всплыли новые обстоятельства: Вставляю новую запись в основную таблицу (проблемную) Table, триггер отрабатывает и вставляет в лог_таблицу (Table_log) строчку, Acces отображает запись из основной таблицы у которой Table.ID равен только что сформированному Table_log.ID в таблице логов!!!! Т.е. Аccess похоже после cохранения записи получает новый ID для отображения не из основной таблицы, а из таблицы логов! Пока не знаю что делать... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2019, 14:18 |
|
Баг Access+MS SQL 2008R2
|
|||
---|---|---|---|
#18+
Соколов Валерий, изменил триггер на INSTEAD OF INSERT (т.е. выполнил вставку в лог ДО вставки строки в основную таблицу) - не помогло ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2019, 15:39 |
|
Баг Access+MS SQL 2008R2
|
|||
---|---|---|---|
#18+
Соколов Валерий, погуглив, нашел страницу с решением: MS Access getting last insert id from @@IDENTITY with triggers Решение автора - неудачное, но вот комментарий Alan заслуживает внимания: Alan/* с моими правками */ Вначале триггера выполнить: Код: sql 1. 2. 3.
В конце триггера выполнить: Код: sql 1.
С уважением, Павел ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2019, 15:59 |
|
|
start [/forum/topic.php?fid=45&msg=39849869&tid=1610529]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
others: | 302ms |
total: | 417ms |
0 / 0 |