Форум: "Базы";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
ВнизТранзакции в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c