Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Mismatch in datapacket / 4 сообщений из 4, страница 1 из 1
21.06.2018, 13:47
    #39663626
zqqwerty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mismatch in datapacket
Delphi 2006 + База на Firebird 2.5
Вставка записей в таблицы ITEM_PARAMS, EVR_ITEMS происходит через компоненты IBTable (atItemParams, atEvrItems).
В таблице EVR_ITEMS поле ITEM_ID с ключем primary key
В таблице ITEM_PARAMS два поля: ITEM_ID, PARAM.
PK_ITEM_PARAMS (primary key) действует на эти два поля.

Периодически возникает ошибка
ОШИБКА:'violation of PRIMARY or UNIQUE KEY constraint "PK_ITEM_PARAMS" on table "ITEM_PARAMS"'
за ней
ОШИБКА:'Mismatch in datapacket.'

стек вызовов:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
IB.IBDataBaseError + $23E
IBDatabase.TIBTransaction.Call + $7A
IBSQL.TIBSQL.Call + $22
IBSQL.TIBSQL.ExecQuery + $222
IBCustomDataSet.TIBCustomDataSet.InternalPostRecord + $11B
IBCustomDataSet.TIBCustomDataSet.WriteRecordCache + $36
IBCustomDataSet.TIBCustomDataSet.InternalPost + $A9
Db.TDataSet.CheckOperation + $29
Db.TDataSet.Post + $48
IBCustomDataSet.TIBCustomDataSet.Post + $E4
Provider.TDataSetResolver.PutRecord + $8C
Provider.TDataSetResolver.DoInsert + $12
Provider.TCustomResolver.InternalUpdateRecord + $1DB
Provider.TUpdateTree.DoUpdates + $3F
Provider.TUpdateTree.DoUpdates + $68
Provider.TCustomResolver.ApplyUpdates + $A5
Provider.TBaseProvider.InternalApplyUpdates + $67
Provider.TDataSetProvider.InternalApplyUpdates + $129
Provider.TCustomProvider.DoApplyUpdates + $98
Provider.TCustomProvider.ApplyUpdates + $22
Provider.TLocalAppServer.AS_ApplyUpdates + $4C
Dbclient.TCustomClientDataSet.DoApplyUpdates + $8A
Dbclient.TCustomClientDataSet.ApplyUpdates + $67



Поле ITEM_ID в таблице ITEM_PARAMS заполняется из таблицы EVR_ITEMS, где этому полю присваиваются значения через генератор (генератор выполняется в триггере, выдает значение перед вставкой в таблицу EVR_ITEMS):
Код: sql
1.
2.
3.
4.
5.
6.
AS
begin
NEW.ID = GEN_ID(GEN_EVR_ITEMS_ID,1);
if (new.item_no = -1) then
new.item_no = null;
end



Изменения в базу записываются путем выполнения последовательно
atEvrItems.Open;
atItemParams.Open;

Пробовал убрать триггер и генерировать новые ITEM_ID в коде,
пробовал переписать триггер как в официальном мануале http://www.ibase.ru/generator/
Не помогло, ошибка возникает регулярно, но большую часть времени код работает правильно, программа не многопользовательская

Подскажите как поправить или куда копать? переделать на другие компоненты не получится, слишком большой проект.
...
Рейтинг: 0 / 0
21.06.2018, 13:55
    #39663635
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mismatch in datapacket
...
Рейтинг: 0 / 0
21.06.2018, 13:56
    #39663636
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mismatch in datapacket
...
Рейтинг: 0 / 0
21.06.2018, 13:56
    #39663638
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mismatch in datapacket
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Mismatch in datapacket / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]