![]() |
|
#1
|
|||
|
|||
![]() Доброго времени суток!
Ребята при работе с 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? |