![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi + FireBird
m © (2007-12-10 10:57:00)Добрый день.
Помогите в таком вопросе:
В Firebird для инкрементного поля использую триггер:
begin,
IF (NEW.KODID IS NULL) THEN
NEW.KODID = GEN_ID(NEWID, 1);//с шагом "1"
end
а также в Delphi в ibQuery есть поле GeneratorField, в котором можно указать тот же генератор и шаг:
NEWID -> KODID By 0
Скажите, как правильно, как лучше и есть ли вообще разница:
begin,
IF (NEW.KODID IS NULL) THEN
NEW.KODID = GEN_ID(NEWID, 1);//с шагом "1"
end
NEWID -> KODID By 0
или
begin,
IF (NEW.KODID IS NULL) THEN
NEW.KODID = GEN_ID(NEWID, 0);//с шагом "0"
end
NEWID -> KODID By 1
m (2007-12-10 12:12:00) [1]Спасибо за помощь.
Сергей М. (2007-12-10 11:30:00) [2]
> m (10.12.07 10:57)
Тогда уж так
/* в триггере */
begin
IF (NEW.KODID IS NULL) THEN /* если клиент не удосужился заполнить поле */
NEW.KODID = GEN_ID(NEWID, 1); /* дернем генератор и сами заполним */
end,
на клиенте:
NEWID -> KODID By 1 //пожалуй, удосужимся, ибо оно, значение поля, для вставки записи нам нужно отнюдь не всегда, но довольно часто
Johnmen (2007-12-10 11:21:00) [3]Второй вариант неверен по сути.
Сергей М. (2007-12-10 11:04:00) [4]
> как правильно
Правильным, наверно, будет минимизация кол-ва обращений к генератору.
В обоих случаях он у тебя "дергается" дважды - сначала в dsql, затем в psql