Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 18:24   #1
Gurt87
Пользователь
 
Регистрация: 08.11.2008
Сообщений: 24
По умолчанию TIBTransaction

Доброго времени суток!
Ребята при работе с FireBird возникли ряд вопросов..

1. Интересует как правильно делать транзакции.
Нужно ли выполнять транзакцию для запроса SELECT?
В своей программе я делаю транзакции так:

Компоненты
Код:
    Transaction: TIBTransaction;
    db: TIBDatabase;
    sql: TIBQuery;
Для SELECTа
Код:
sql.Transaction.StartTransaction;
sql.SQL.Clear;
sql.SQL.Add('SELECT * FROM LOGIN');
sql.Transaction.Active:=True;
sql.Transaction.Commit;
sql.Close;
sql.Open;
Для INSERTа
Код:
sql.Transaction.StartTransaction;
sql.SQL.Clear;
sql.SQL.Add('INSERT INTO LOGIN (ACCOUNT)  VALUES (NEWACCAUNT)');
sql.ExecSQL;
sql.Transaction.Active:=True;
sql.Transaction.Commit;

Самое главное то чтобы когда я запустил свою программу два раза,
и в одной копии добавил запись с помощью INSERT в таблицу LOGIN, а в другой копии загрузил с помощью SELECT все данные с таблицы LOGIN, то данные, которые были внесены первой копией отображались во второй копии...

Правильно ли я делаю эти транзакции? Если что то лишнее или не правильное прошу Вас поправить...


2. Существует так называемая ошибка Deadlock.(Конфликт обновления.)
Как избежать ее? Ну или хотя бы свести ее возникновение к минимуму..

3. Какие должны быть параметры в Transaction: TIBTransaction; ???
Или параметры по умолчанию оптимальные?
Может ответ в них как то можно предотвратить DeadLock?
Gurt87 вне форума Ответить с цитированием
Старый 23.01.2010, 19:46   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Читать внимательно здесь: http://www.ibase.ru/devinfo/ibx.htm, где есть ответы на все поставленные вопросы.
Скандербег вне форума Ответить с цитированием
Старый 23.01.2010, 19:53   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Транзакцию лучше делать всегда - это как бы ваш персональный канал доступа к базе.
Дэдлока не избежать (хотя это довольно редкое явление), ибо это от вас не зависит - за этим следит сервер интербэйса.
Для важных (и длительных) операций можно назначать свои транзакции, но если вы будете аккуратно работать с транзакцией по умолчанию (не забудете коммитить после старта), то проблем быть не должно.
mihali4 вне форума Ответить с цитированием
Старый 23.01.2010, 20:20   #4
Gurt87
Пользователь
 
Регистрация: 08.11.2008
Сообщений: 24
По умолчанию

Ну а сам код правильный?
Мне кажется что там есть что то лишнее...
Подскажите плиз..!
Gurt87 вне форума Ответить с цитированием
Старый 23.01.2010, 20:44   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот эта строка совершенно лишняя:
Код:
sql.Transaction.Active:=True;
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц