Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

Транзакции в Firebird   Найти похожие ветки 

 
serguncho ©   (2005-06-26 19:52) [0]

Доброго времени суток!

Не могу понять в чем проблема:
 
var dbmain:tibdatabase;
   ibtable1:tibtable;
...
dbMain.DefaultTransaction.StartTransaction;
try
 ibtable1.FieldByName("NO").AsInteger := 22;
 dbMain.DefaultTransaction.Commit;
except
 dbMain.DefaultTransaction.RollBack;
 raise;
...


пишет что транзакция активна.

И еще такой косяк: удаляю запись из таблицы (table.delete). Закрываю программу, а запись на прежнем месте.


 
DrPass ©   (2005-06-26 20:22) [1]

Если пишет, что активна - значит активна. Убери
dbMain.DefaultTransaction.StartTransaction.
Или замени на if not ...Active then dbMain.DefaultTransaction.StartTransaction, раз ты ее закрываешь время от времени :)
И еще наверное не помешало бы добавить ibtable1.edit и ibtable1.post в нужном месте.


 
serguncho ©   (2005-06-26 20:25) [2]

А смысл в post? Ведь это тоже транзакция.


 
serguncho ©   (2005-06-26 20:28) [3]

если убрать
dbMain.DefaultTransaction.StartTransaction

то в результате выполнения таблицы все становятся пассивными (Active=false), сама database становится connected=false.
Перезапуск программы показывает, что изменений информации не происходит.


 
Zacho ©   (2005-06-26 23:06) [4]

serguncho ©   (26.06.05 20:28) [3]

Почитай http://www.ibase.ru/devinfo/ibx.htm и http://www.ibase.ru/devinfo/ibtrans.htm


 
serguncho ©   (2005-06-27 00:15) [5]

спасибо, почитаю на свежую голову.

А не подскажите, пожалуйста, что с этой проблемой делать:
удаляю запись из таблицы. Перезапускаю программу, а запись на прежнем месте.


 
DrPass ©   (2005-06-27 02:25) [6]


> serguncho ©   (26.06.05 20:25) [2]

post - это, грубо говоря, применение сделанных тобой изменений над текущей записью. Транзакция тут не причем.

> serguncho ©   (27.06.05 00:15) [5]

Наверное же все-таки потому, что ты после удаления не завершаешь транзакцию.
> если убрать
> dbMain.DefaultTransaction.StartTransaction
>
> то в результате выполнения таблицы все становятся пассивными
> (Active=false),

Да, потому что после Commit транзакция завершается, и автоматически закрываются источники данных. Поэтому их нужно открывать после этого. А еще лучше - отображение данных выполнять в одной read-only транзакции (которую вообще можно не закрывать), а изменения - в другой.
> сама database становится connected=false

Ну, это ты преувеличил :)


 
kaif ©   (2005-06-27 03:09) [7]

сделай так:

with dbMain.DefaultTransaction do
if not InTransaction then  
 StartTransaction;

здесь Open-ы, Post-ы и Delete-ы
(Вообще-то кроме присвоения поля принято еще и Post делать :)

with dbMain.DefaultTransaction do
if InTransaction then
 CommitRetaining; //если не устраивает, чтобы запросы закрылись

или

with dbMain.DefaultTransaction do
if InTransaction then
 Commit; //если устраивает, чтобы запросы закрылись

Потом можно заново их открыть.

Еще у транзакии изоляцию поставь. Для начала ReadCommitted хватит в 99% случаев.

Откаты делай только если одновременно несколько действий нужно откатить. Одно действие можно и не откатывать. Если оно не прошло - не прошло. Что тут откатывать блоке в try-except-end?  

А вообще читай.


 
Zacho ©   (2005-06-27 07:58) [8]

serguncho ©   (27.06.05 0:15) [5]
удаляю запись из таблицы. Перезапускаю программу, а запись на прежнем месте.


Надо делать Commit.

P.S. Ещё один небольшой совет: не стоит использовать TIBTable и TIBQuery.


 
serguncho ©   (2005-06-27 09:11) [9]

Zacho ©   (27.06.05 07:58) [8]

P.S. Ещё один небольшой совет: не стоит использовать TIBTable и TIBQuery.
---------
А чего же использовать тогда?


 
P.N.P. ©   (2005-06-27 09:38) [10]

>serguncho ©   (27.06.05 09:11) [9]
>А чего же..
TIBDataSet


 
serguncho ©   (2005-06-27 10:11) [11]

P.N.P. ©   (27.06.05 09:38) [10]
>serguncho ©   (27.06.05 09:11) [9]
>А чего же..
TIBDataSet
----

Не, я еще морально не готов полностью перейти на SQL :-))
В чем же минусы таблиц и запросов?


 
Sergey13 ©   (2005-06-27 10:15) [12]

2[11] serguncho ©   (27.06.05 10:11)
>В чем же минусы таблиц и запросов?
В отсутствии плюсов. 8-) Особенно для таблиц. Запросы хороши (и необходимы) для НЕ селектов.


 
serguncho ©   (2005-06-27 10:21) [13]

Скажите, а в чем ограниченность Ibquery для SELECT?
И что скажете про IBSQL?


 
Zacho ©   (2005-06-27 11:55) [14]

serguncho ©   (27.06.05 10:21) [13]
Скажите, а в чем ограниченность Ibquery для SELECT?


Ни в чём. А вот недостатки с модификацией данных по сравнению с TIBDataSet есть.
1. Нужно использовать 2 компонента.
2. Нельзя использовать ХП.

> И что скажете про IBSQL?


А что ты хочешь услышать ?
Это компонет для выполнения запросов.

Ты всё-таки прочитай http://www.ibase.ru/devinfo/ibx.htm


 
Dazhan   (2005-06-27 17:46) [15]

TIBTable нет смысла использовать, так как TIBTable все равно осуществляет те же SQL-запросы. Просто управлять ими в TIBTable невозможно. Да к тому же нет смысла закачивать всю таблицу, как правило работают с какими-то выборками, да и то сразу из нескольких таблиц.



Страницы: 1 вся ветка

Текущий архив: 2005.08.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.049 c
1-1121323132
Erik1
2005-07-14 10:38
2005.08.07
Правильное ожидание для завершения потока?


9-1113983835
lifo
2005-04-20 11:57
2005.08.07
Алгоритм сравневаия рисунков


4-1118248468
Андрей Жук
2005-06-08 20:34
2005.08.07
Реализации грида на WinApi


6-1114766778
Filin8
2005-04-29 13:26
2005.08.07
TcpServer


14-1120833485
Думкин
2005-07-08 18:38
2005.08.07
Еду домой