Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Последовательность событий при генерации ID [D5, FB 1]


vic1 ©   (2004-05-06 12:51:00) 

Есть база на FB, доступ с Delphi через FIB.Есть 2 табл - связанная и подчиненная, в подчнненную ID берется с главной ч-з MAS_ . В главной табл табл есть триггер на BeforeInsert для генерации ID через генератор. В FIBDataSet, связанном с главной заполнены AutoUpdateOptions. После Insert перед POst проверяю ID(showmessage) - присваивается номер на 1 больше пред-го(напр 3 после 2), после Post - ID на 1 увел-ся (вместо 3, который только видел - реально 4), а в подчиненной табл имею 3. Получается из подчиненной затем выбирается запись соответствующая предыдущей записи в главной.

Помогите, пожалуйста, разобраться в происходящей последовательности событий или как это сделать правильно.

Спасибо.


Johnmen   (2004-05-06 16:22:00) [1]

>если тексты будут разрастаться

Разрастание - понятие относительное.
Да и TDBRichEdit существует...


vic1   (2004-05-06 16:03:00) [2]

Да, спасибо, когда поставил проверку, все пошло.
При работе сIBExpert если ставлю автоинкремент-генератор - настройки не сохраняются. Не знаю может что делаю не правильно.

Если можно, еще один вопрос:
у меня есть BLOB поле, с ним связан DBMemo, для хранения текстов, если тексты будут разрастаться нужно ли мне для чтения-записи использовать потоки, или можно так оставить?

И Спасибовсем.


Johnmen   (2004-05-06 14:16:00) [3]

>Просто тогда в каждом приложении, работающем с этой базой,
>нужно будет получать значение генератора на клиенте.

Как правило, это и требуется. Для внутренних целей приложения...


HSolo   (2004-05-06 14:11:00) [4]

>>Можно и убрать - но если эту базу будет использовать другое приложение?
>Не понял - что с того ?
Просто тогда в каждом приложении, работающем с этой базой, нужно будет получать значение генератора на клиенте. Насколько это существенно - решать автору вопроса.

>>По-моему, вариант с проверкой на null в триггере более безопасный :)
>Я бы сказал, более надежный. С т.з. БД, но не клиента.
Именно так. Я как раз о БД и забочусь


Johnmen   (2004-05-06 13:35:00) [5]

>Можно и убрать - но если эту базу будет использовать другое приложение?

Не понял - что с того ?

>По-моему, вариант с проверкой на null в триггере более безопасный :)

Я бы сказал, более надежный. С т.з. БД, но не клиента.


Курдль   (2004-05-06 13:25:00) [6]

А чем вызвано применение триггера для получения нового ID?
Разве IB не умеет делать автоинкрементные (serial) идентификаторы?


HSolo   (2004-05-06 13:23:00) [7]

>Оставить получение очередного значения генератора в приложении.
>А из триггера - убрать.

Можно и убрать - но если эту базу будет использовать другое приложение? По-моему, вариант с проверкой на null в триггере более безопасный :)


Johnmen   (2004-05-06 13:19:00) [8]

Оставить получение очередного значения генератора в приложении.
А из триггера - убрать.


HSolo   (2004-05-06 13:16:00) [9]

Как выглядит триггер? Наверное, что-то вроде:
begin
new.id = gen_id(my_generator, 1);
end

Если это так - добавьте проверку:
begin
if (new.id is null) then
 new.id = gen_id(my_generator, 1);
end


Наверх

Титульная страница Поиск, карта сайта Написать письмо