Здравствуйте, sax0n, Вы писали:
S>Где нужно бубном потрясти, чтобы не было такого?
Два вопроса:
1. Сколько строк в таблице table?
2. Что, все-таки возвращается — null или 0 (на всякий случай: это разные вещи).
Если строк — ни одной, а возвращается null, то это в общем-то нормальное поведение. Обычно для получения следующего значения генератора пользуются запросом к системной таблице rdb$database, в которой гарантированно хранится одна запись.
Типа такого:
select gen_id(generator_name, 1) from rdb$database;
PS Также хочу заметить, что собирать этот запрос из частей каждый раз, когда требуется следующее значение генератора — жуткий моветон, т.к. на его prepare времени, скорее всего, потратится на порядок больше, чем на исполнение и получение одного числа клиентом.
Привет народ.
Исопльзую берд 2.0
и какой-то IBX (Ddelphi 7)
Возникает такая проблема: есть функция, которая через SQL-запрос генерирует новый ID
tmpIBSQL.Close;
tmpIBSQL.SQL.Clear;
tmpIBSQL.SQL.Add('SELECT gen_id(GEN_'+table+'_ID, 1) from ' + table + ';');
tmpIBSQL.Prepare;
tmpIBSQL.ExecQuery;
result := tmpIBSQL.FieldByName('GEN_ID').AsInteger;
tmpIBSQL.Close;
В большенстве слчаев работает нормально. но если сбросить генератор некоторых таблиц (в 1 например), то функция возвращает всегда 0 (NULL).
даже если через IBExpress запрос послать, вохвращает НУЛЬ.
Где нужно бубном потрясти, чтобы не было такого?
Здравствуйте, Пацак, Вы писали:
П>Здравствуйте, sax0n, Вы писали:
S>>Где нужно бубном потрясти, чтобы не было такого?
П>Два вопроса: П>1. Сколько строк в таблице table?
таблица пустая — обнулена П>2. Что, все-таки возвращается — null или 0 (на всякий случай: это разные вещи).
судя по IBExpress запросу — null
П>Если строк — ни одной, а возвращается null, то это в общем-то нормальное поведение. Обычно для получения следующего значения генератора пользуются запросом к системной таблице rdb$database, в которой гарантированно хранится одна запись. П>Типа такого:
П>
П>select gen_id(generator_name, 1) from rdb$database;
П>
П>PS Также хочу заметить, что собирать этот запрос из частей каждый раз, когда требуется следующее значение генератора — жуткий моветон, т.к. на его prepare времени, скорее всего, потратится на порядок больше, чем на исполнение и получение одного числа клиентом.
Как еще можно тогда записать ячейку в базу и при этом знать ее номер? Вариант с триггером в данном случае мне не подходит в виду того, что я так и не получаю номера ячейки.. Поэтому приходится жертвовать временем...
Привет, sax0n!
Вы пишешь 17 апреля 2008:
s> Как еще можно тогда записать ячейку в базу и при этом знать ее номер? s> Вариант с триггером в данном случае мне не подходит в виду s> того, что я так и не получаю номера ячейки..
Здравствуйте, Alex.Che, Вы писали:
AC>Привет, sax0n! AC>Вы пишешь 17 апреля 2008:
s>> Как еще можно тогда записать ячейку в базу и при этом знать ее номер? s>> Вариант с триггером в данном случае мне не подходит в виду s>> того, что я так и не получаю номера ячейки..
AC>RTFM: GeneratorField (в справке по IBX) AC>и заодно, почитай статьи: AC>http://www.ibase.ru/devinfo/ibx.htm AC>http://www.ibase.ru/devinfo/generator.htm
AC>-- AC>With best regards, Alex Cherednichenko.