Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-1112307304
КанВас
2005-04-01 02:15
2005.08.07
Пишу на TBitMap текст через Canvas Но края округлых букв


4-1118079752
NikNet
2005-06-06 21:42
2005.08.07
Как вызвать приревание в DELPHI из RING3 (Третего кольца)


10-1098787967
TUser
2004-10-26 14:52
2005.08.07
Excel in Word


14-1120473280
АНТИСПАММЕР
2005-07-04 14:34
2005.08.07
Будущее Windows


14-1121754577
Ega23
2005-07-19 10:29
2005.08.07
С днем рождения! 19 июля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский