![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
два TIBTransaction ! [D5, IB или FB]
GanibalLector © (2004-07-01 12:53:00)Решил разобраться как работать с двумя компонентами TIBTransaction(одна на запись,вторая на чтение).Раньше,все в одной делал и после Commit все открывал заново. Итак имею следующее:
WR_IB.params=write,consistency,read_committed,rec_version,nowait
RD_IB.params=read,consistency,read_committed,rec_version,nowait
IBDataBase1.DefaultTransaction=RD_IB.
Дальше,вставляю что-либо в таблицу через IBQuery1 и связанный с ним IBUpdateSQL(кстати IBQuery1.Transaction=WR_IB) например так:
Ibquery1.Insert;
Ibquery1.FieldByName('mod').value:=17;
Ibquery1.FieldByName('model').value:='Talla2k';
Ibquery1.FieldByName('ser').value:='88';
Ibquery1.Post;
if WR_IB.InTransaction=false then
WR_IB.StartTransaction;
WR_IB.Commit;
все чудесно вставилось,НО !!!
По моему IMHO вставленная запись должна была моментально появиться в IBQuery2,который связан с RD_IB ,а ее нет.
В чем я не прав?
Соловьев (2004-07-01 13:17:00) [21]
> По моему IMHO вставленная запись должна была моментально
> появиться в IBQuery2,который связан с RD_IB ,а ее нет
с какой это стати?
Переоткрой эту квери и увидишь
GanibalLector (2004-07-01 13:16:00) [22]2 Sergey_Masloff
>Может быть завтра вечером если время будет попробую простой пример состряпать
Был бы ОЧЕНЬ признателен!
Sergey_Masloff (2004-07-01 13:14:00) [23]GanibalLector © (01.07.04 13:11) [4]
С примером не помогу - у меня там комплексный класс с тучей заточенного под конкретную идеологию кода да и проект коммерческий нельзя такое публиковать. Я только автор но не владелец кода. Может быть завтра вечером если время будет попробую простой пример состряпать. Ели еще не разберешься к тому времени
GanibalLector (2004-07-01 13:11:00) [24]2 Sergey_Masloff
Может примерчик подарите???
mailto:Talla2k@ukr.net
Sergey_Masloff (2004-07-01 13:11:00) [25]1) С UpdateSQL не получится.
(есть патч сторонний для IBX если хочешь ищи на ibase.ru я его не использовал никогда)
2) Можно делать так: (подробно не напишу потому что у меня это закрыто своим классом который публиковать не могу)
- к IBQuery цепляется UpdateSQL c "пустыми" но валидными SQL (например select null from rdb$database)
- обновление осуществляется отдельным IBSQL работающим в своей транзакции
- при подтверждении кэшированных изменений заполняшь IBSQL значениями параметров выполняешь и коммитишь (пишущую транзакцию). У меня все изменения выполняются черех XP но это может быть и простой запрос - у меня есть специфика.
>И что-же там не правильного???
То что если Query у тебя открыт то транзакция УЖЕ стартована. Но даже если вдруг она бы оказалась не стартованой (что ты видимо предполагал) то ты ей делаешь старт и сразу коммит (а чего она коммитить тебе будет? Не подскажешь?)
;-)
GanibalLector (2004-07-01 13:00:00) [26]2 Sergey_Masloff
>Во всем от начала до конца.
Ну а подробности???
>особенно меня умилило вот это
И что-же там не правильного???
Sergey_Masloff (2004-07-01 12:56:00) [27]В чем я не прав?
Во всем от начала до конца. Это делается не так.
особенно меня умилило вот это:
WR_IB.StartTransaction;
WR_IB.Commit;