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

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
@ndrey
Сообщения: 5
Зарегистрирован: 16 авг 2005, 12:59

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

Сообщение @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 не додумался

Ответить