![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Транзакции в FIBPlus (БД FireBird 1.5) [D6, WinXP]
Iconka © (2004-09-02 11:44:00)Всем привет.
Расскажите как правильно работать с сабжем.
На таком примере: есть две таблицы - огранизации и счета. Связь master-detail по полю ID в организациях и ID_ORG в счетах. У каждой организации может быть несколько счетов.
Хотелось бы получить следующее: открывается окно создания организации. Заполняются поля. Так же можно создать несколько счетов (открыв еще одно окошко). Потом в ComboBoxe выбрать основоной счет. И все 'то сохранить. Или отменить (созданные счета тоже).
Проблема номер один. Как получить значение ID организации если оно формируется в тригере BeforeInsert? Может по другому организовать?
Проблема номер два в полной отмене всех действий. Как правильно сконфигурировать TpFIBTransaction?
Роман Снегирев (2004-09-03 16:54:00) [1]а зачем?
Sergey13 (2004-09-03 16:16:00) [2]2[17] Роман Снегирев (03.09.04 15:32)
>читай почту
А правила форума читать не пробовал?
Vasis (2004-09-03 16:14:00) [3]Большое спасибо
Роман Снегирев (2004-09-03 15:32:00) [4]О! А это триал?
Вышлите и мне плиз... на vasis@pisem.net. Большое спасибо
нет это абсолютная халаява
читай почту
Vasis (2004-09-03 13:44:00) [5]
> Роман Снегирев (03.09.04 10:35) [14]
> Пришлите плиз FibPlus 5.3 на blot@amik.ru
> читай почту
О! А это триал?
Вышлите и мне плиз... на vasis@pisem.net. Большое спасибо
Астроном (2004-09-03 13:19:00) [6]сенкс
Роман Снегирев (2004-09-03 10:35:00) [7]Пришлите плиз FibPlus 5.3 на blot@amik.ru
читай почту
Астроном (2004-09-03 08:43:00) [8]Пришлите плиз FibPlus 5.3 на blot@amik.ru
Zacho (2004-09-02 20:17:00) [9]
> Iconka © (02.09.04 12:52) [10] [Новое
>сообщение][Ответить]
> А как насчет параметров транзакции?
Очень рекомендую http://www.ibase.ru/devinfo/ibtrans.htm
И не помешает всё остальное на http://www.ibase.ru/develop.htm
Например, http://www.ibase.ru/devinfo/generator.htm:-)
Роман Снегирев (2004-09-02 13:29:00) [10]read_committed
Iconka (2004-09-02 12:52:00) [11]А как насчет параметров транзакции?
Сейчас у меня
read
read_committed
rec_version
nowait
Подойдет?
Sergey13 (2004-09-02 12:40:00) [12]2Iconka © (02.09.04 12:37)
>Ну я так понимаю в первом варианте мы получим значение и сделаем инкремент в программа, не изменяя значение генератора в БД.
Это "мы" только "подумаем что сделаем". Так подумать могут многие.
Iconka (2004-09-02 12:37:00) [13]
> >select gen_id(имя генератора,0)+1 from RDB$DATABASE
> А почему не
> select gen_id(имя генератора,1) from RDB$DATABASE
Ну я так понимаю в первом варианте мы получим значение и сделаем инкремент в программа, не изменяя значение генератора в БД.
-SeM- (2004-09-02 12:26:00) [14]Iconka © (02.09.04 12:14) [5]
> Это FIB судя по названию темы :)
Да уж ...
В базе создаем хранимую процедуру, возвращающую новоезначение генератора через gen_id(имя генератора,1). Для его получения используй TpFIBStoredProc.
Но проще всего в AutoUpdateOptions TpFIBDataSet выставить опции: GeneratorName, GeneratorStep(если нужно), KeyFields, WhenGetGenID. Теперь при вставке сначала будет получено значение генератора и вставлено в ключевое поле.
Sergey13 (2004-09-02 12:24:00) [15]2[1] Роман Снегирев (02.09.04 11:51)
>select gen_id(имя генератора,0)+1 from RDB$DATABASE
А почему не
select gen_id(имя генератора,1) from RDB$DATABASE
Iconka (2004-09-02 12:14:00) [16]
> А если это ФИБ (судя по [2])
Это FIB судя по названию темы :)
> Лучше через хранимую процедуру.
Это как? Подробнее объясни.
-SeM- (2004-09-02 12:11:00) [17]Роман Снегирев (02.09.04 11:51) [1]
> select gen_id(имя генератора,0)+1 from RDB$DATABASE
Это может привести к неприятностям с несколькими клиентами. Лучше через хранимую процедуру. А если это ФИБ (судя по [2]), еще проще - смотри AutoUpdateOptions
Роман Снегирев (2004-09-02 12:03:00) [18]тебе надо UpdateTransaction Она должна быть одинаковая для них
Iconka (2004-09-02 11:54:00) [19]
> привязывать датасеты организации и счета к одной транзакции
> и соответсвенно Commit или Rolback
Там есть Transaction и UpdateTransaction. Они должны быть одинаковые для них? Какие параметры указать в транзакции?
Роман Снегирев (2004-09-02 11:51:00) [20]номер один
select gen_id(имя генератора,0)+1 from RDB$DATABASE
номер два
привязывать датасеты организации и счета к одной транзакции и соответсвенно Commit или Rolback