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

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

Транзакции в 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


Наверх

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