Главная страница
    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.041 c
14-1120933199
lookin
2005-07-09 22:19
2005.08.07
Я атеист. Вы? (Да/Нет)


8-1112552568
seregka
2005-04-03 22:22
2005.08.07
MP3 tags


6-1114085582
Gek1
2005-04-21 16:13
2005.08.07
Проблема с TClientSocket


3-1120132669
Леонид
2005-06-30 15:57
2005.08.07
Как правильно сделать перемещение указателя в гриде если...


1-1121671426
Джек
2005-07-18 11:23
2005.08.07
Поиск файлов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский