Форум: "Базы";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизТранзакции в Interbase Найти похожие ветки
← →
suharew (2005-09-18 20:45) [0]Добрый вечер. У меня в проекте около 30 форм. и около 20 таблиц. Почти на каждой форме таблица. Использую TIBQuery для выбора записи. На главной форме TIBDataBase и TIBTransaction. Получается что все IBQuery используют одну базу и один IBTransaction. Так пойдет или каждому Query по IBTransaction. Просто получается на одной форме данные читаются на другой редактируются. Читал про транзакции там упоминается про параметры read, write. подскажите как организовать по лучше все это.
Сейчас некоторые запросы выполняются по таймеру. По моему получается какое-то пересечение транзакций. Наверное следует использовать много IBTransaction. Я новичок в использовании Interbase раньше работал с БДЕ. Подскажите.
И как в коде программы делать выборку или запись в базу.
Ну я имею ввиду использование транзакций.
Я делаю так.
try
If form1.IBTransaction1.InTransaction then
begin
..................
form2.IBQuery1.ExecSQL;
form1.IBTransaction1.CommitRetaining;
end;
except
if form1.IBTransaction1.Active then form1.IBTransaction1.RollbackRetaining;
← →
Sergey_Masloff (2005-09-18 20:53) [1]В принципе, для 80% приложений сойдет 1 транзакция на все.
Еще для 19.999% достаточно двух - одна читающая другая пишущая.
В любом случае после селекта коммит ретайнинг излишество.
Так что совет такой:
1) Попробуй с 1 транзакцией
2) Если все же это не устроит сделай так:
первая транзакция только читающая. На ней будут висеть все датасеты. Она может быть открыта постоянно - никаких коммитов и роллбеков не надо.
вторая транзакция пишущая. Для обновлений не используй встроеных средств IBDataSet а организуй свою обработку и пиши в базу через отдельный компонент TIBSQL подвязаный к пишущей транзакции. И там - через try - except то есть делаешь быстро: открываешь транзакцию выполняешь команду (удаление запись или изменение) коммитишь если ошибка откатываешь но транзакцию закрываешь в любом случае. При успешном изменении ДатаСет данные которого ты обновлял нужно переоткрыть.
← →
DrPass © (2005-09-18 22:19) [2]
> В любом случае после селекта коммит ретайнинг излишество
Его вообще не стоит делать в транзакциях, которые открыты долгое время. В конце-концов потребление ресурсов сервера Interbase может возрасти до совершенно неудобоваримого уровня.
В большинстве случаев оптимальный вариант - две транзакции. Одна с параметром read+read commited, к ней подключены отображающие датасеты. Ее можно без всяких коммитов держать открытой сколь угодно долго. Вторая используется для операций вставки/удаления/изменения. Открывается непосредственно перед операцией и после операции завершается коммитом или откатом.
Одна транзакция нехороша тем, что после коммита приходится переоткрывать источники данных.
← →
Sergey_Masloff (2005-09-18 22:36) [3]>В конце-концов потребление ресурсов сервера Interbase может возрасти >до совершенно неудобоваримого уровня
Это уже да-а-а-вным давно вылечили. Не говорю что это нужно делать но если и делать ничего страшного не будет.
← →
Os (2005-09-19 17:07) [4]Там есть еще транзакции по таймеру.
Что будет если два потока вызовут
WriteTransaction.StartTransaction;
На таймеры нужны свои компоненты?
← →
Tonich © (2005-09-19 17:27) [5]http://www.ibase.ru/devinfo/ibx.htm - тоже есть что-то по этому поводу
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c