Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.312 c
3-1084185491
Viktor
2004-05-10 14:38
2004.05.30
Конфликт транзакций


14-1084269557
Alex_x
2004-05-11 13:59
2004.05.30
ASProtect, ICE license


7-1083217362
TumoxA
2004-04-29 09:42
2004.05.30
Запуск и завершение приложений


3-1083930785
Внук
2004-05-07 15:53
2004.05.30
ODBC и хранимые функции


7-1083076227
Medic
2004-04-27 18:30
2004.05.30
удалённое соединение