Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизПоследовательность событий при генерации ID Найти похожие ветки
← →
vic1 (2004-05-06 12:51) [0]Есть база на FB, доступ с Delphi через FIB.Есть 2 табл - связанная и подчиненная, в подчнненную ID берется с главной ч-з MAS_ . В главной табл табл есть триггер на BeforeInsert для генерации ID через генератор. В FIBDataSet, связанном с главной заполнены AutoUpdateOptions. После Insert перед POst проверяю ID(showmessage) - присваивается номер на 1 больше пред-го(напр 3 после 2), после Post - ID на 1 увел-ся (вместо 3, который только видел - реально 4), а в подчиненной табл имею 3. Получается из подчиненной затем выбирается запись соответствующая предыдущей записи в главной.
Помогите, пожалуйста, разобраться в происходящей последовательности событий или как это сделать правильно.
Спасибо.
← →
HSolo © (2004-05-06 13:16) [1]Как выглядит триггер? Наверное, что-то вроде:
begin
new.id = gen_id(my_generator, 1);
end
Если это так - добавьте проверку:
begin
if (new.id is null) then
new.id = gen_id(my_generator, 1);
end
← →
Johnmen © (2004-05-06 13:19) [2]Оставить получение очередного значения генератора в приложении.
А из триггера - убрать.
← →
HSolo © (2004-05-06 13:23) [3]>Оставить получение очередного значения генератора в приложении.
>А из триггера - убрать.
Можно и убрать - но если эту базу будет использовать другое приложение? По-моему, вариант с проверкой на null в триггере более безопасный :)
← →
Курдль © (2004-05-06 13:25) [4]А чем вызвано применение триггера для получения нового ID?
Разве IB не умеет делать автоинкрементные (serial) идентификаторы?
← →
Johnmen © (2004-05-06 13:35) [5]>Можно и убрать - но если эту базу будет использовать другое приложение?
Не понял - что с того ?
>По-моему, вариант с проверкой на null в триггере более безопасный :)
Я бы сказал, более надежный. С т.з. БД, но не клиента.
← →
HSolo © (2004-05-06 14:11) [6]>>Можно и убрать - но если эту базу будет использовать другое приложение?
>Не понял - что с того ?
Просто тогда в каждом приложении, работающем с этой базой, нужно будет получать значение генератора на клиенте. Насколько это существенно - решать автору вопроса.
>>По-моему, вариант с проверкой на null в триггере более безопасный :)
>Я бы сказал, более надежный. С т.з. БД, но не клиента.
Именно так. Я как раз о БД и забочусь
← →
Johnmen © (2004-05-06 14:16) [7]>Просто тогда в каждом приложении, работающем с этой базой,
>нужно будет получать значение генератора на клиенте.
Как правило, это и требуется. Для внутренних целей приложения...
← →
vic1 (2004-05-06 16:03) [8]Да, спасибо, когда поставил проверку, все пошло.
При работе сIBExpert если ставлю автоинкремент-генератор - настройки не сохраняются. Не знаю может что делаю не правильно.
Если можно, еще один вопрос:
у меня есть BLOB поле, с ним связан DBMemo, для хранения текстов, если тексты будут разрастаться нужно ли мне для чтения-записи использовать потоки, или можно так оставить?
И Спасибовсем.
← →
Johnmen © (2004-05-06 16:22) [9]>если тексты будут разрастаться
Разрастание - понятие относительное.
Да и TDBRichEdit существует...
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.05 c