Показать сообщение отдельно
  #1  
Старый 23.01.2010, 18:23
Gurt87 Gurt87 вне форума
Прохожий
 
Регистрация: 17.05.2009
Сообщения: 16
Репутация: 10
По умолчанию Транзакции

Доброго времени суток!
Ребята при работе с 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?
Ответить с цитированием