Страница 1 из 1

FIBPlus, AutoUpdateOptions и генератор

Добавлено: 26 окт 2005, 11:36
@ndrey
Хелп!
Ничего не могу понять. Пользуюсь 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

Добавлено: 26 окт 2005, 11:39
kdv
триггер на +1 выключи...

Добавлено: 26 окт 2005, 11:51
@ndrey
kdv
На сервере? Он выключен...

Если смотреть через монитор, то видно, что генератор срабатывает сразу после рефреша (или инсерта, если RefreshAfterPost выключен).

Добавлено: 26 окт 2005, 11:56
kdv
"после рефреша" или "после инсерта" генератор "срабатывать" не может. Потому что запрос на получение очередного значения нужен только инсерту, причем ПЕРЕД инсертом, а не после.

Data.Append
Data.Insert

это ДВА оператора вставки. В СУБД нет append, есть только insert. Поэтому вместо append вызывается insert.
Так что исправь, пожалуйста, либо на
Data.Append
Data.Post
либо на
Data.Insert
Data.Post

Добавлено: 26 окт 2005, 12:15
@ndrey
Спасибо!!!
Я в начале так и пытался написать
Data.Insert
Data.Post
Фибы ругались... А до Append-Post не додумался