IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
@ndrey
- Сообщения: 5
- Зарегистрирован: 16 авг 2005, 12:59
Сообщение
@ndrey » 26 окт 2005, 11:36
Хелп!
Ничего не могу понять. Пользуюсь AutoUpdateOptions для получения нового значения ключа до вставки записи.
Код: Выделить всё
AutoUpdateOptions.UpdateTableName = '"Firm"'
AutoUpdateOptions.KeyFields = 'Id'
AutoUpdateOptions.CanChangeSQLs = True
AutoUpdateOptions.GeneratorName = 'GEN_Firm_ID'
AutoUpdateOptions.WhenGetGenID = wgOnNewRecord
Сам код такой:
Код: Выделить всё
Data->FirmsTree->Append();
int newID = Data->FirmsTree->FieldByName("Id")->AsInteger;
Data->FirmsTree->FieldByName("Id_Parent")->AsInteger = 0;
Data->FirmsTree->FieldByName("Name")->AsString = name_node;
Data->FirmsTree->Insert();
Так вот, в newID я получаю правильное значение нового ключа, тут проблем нет. Но после команды insert значение генератора увеличивается ещё на 1. В результате значения ключей идут через 1.
В чём может быть проблема, куда смотреть?
FIBPlus 6.2.0
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 26 окт 2005, 11:39
триггер на +1 выключи...
-
@ndrey
- Сообщения: 5
- Зарегистрирован: 16 авг 2005, 12:59
Сообщение
@ndrey » 26 окт 2005, 11:51
kdv
На сервере? Он выключен...
Если смотреть через монитор, то видно, что генератор срабатывает сразу после рефреша (или инсерта, если RefreshAfterPost выключен).
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 26 окт 2005, 11:56
"после рефреша" или "после инсерта" генератор "срабатывать" не может. Потому что запрос на получение очередного значения нужен только инсерту, причем ПЕРЕД инсертом, а не после.
Data.Append
Data.Insert
это ДВА оператора вставки. В СУБД нет append, есть только insert. Поэтому вместо append вызывается insert.
Так что исправь, пожалуйста, либо на
Data.Append
Data.Post
либо на
Data.Insert
Data.Post
-
@ndrey
- Сообщения: 5
- Зарегистрирован: 16 авг 2005, 12:59
Сообщение
@ndrey » 26 окт 2005, 12:15
Спасибо!!!
Я в начале так и пытался написать
Data.Insert
Data.Post
Фибы ругались... А до Append-Post не додумался