Транзакция закрывает Select'ы
Транзакция закрывает Select'ы
Приветствую ВСЕХ!
Просьба разьяснить работу/настройку транзакций.
Есть MDI приложение, например в одном окне открыто select'ом (TQuery) одна таблица, в другом что то другое тоже select'ом логически не связанная с первой таблицой. Если я делаю изменение SQL запросом например в первой, то ВСЕ select'ы закрываются.
Почитав (старался внимательно ) http://www.ibase.ru/devinfo/ibtrans.htm, наткнулся на такую цитату:
Например SELECT в режиме read committed видит только те записи, которые были committed другими транзакциями или изменены текущей на момент своего старта (т.е. execute). Последующие операции выборки записей (fetch) не будут видеть новые committed записи. Для того, чтобы их увидеть, нужно перевыполнить запрос.
подскажете, плиз как это обойти? т.е. что бы в отображаемой не связанной с изменяемой таблице select не закрывался?
Просьба разьяснить работу/настройку транзакций.
Есть MDI приложение, например в одном окне открыто select'ом (TQuery) одна таблица, в другом что то другое тоже select'ом логически не связанная с первой таблицой. Если я делаю изменение SQL запросом например в первой, то ВСЕ select'ы закрываются.
Почитав (старался внимательно ) http://www.ibase.ru/devinfo/ibtrans.htm, наткнулся на такую цитату:
Например SELECT в режиме read committed видит только те записи, которые были committed другими транзакциями или изменены текущей на момент своего старта (т.е. execute). Последующие операции выборки записей (fetch) не будут видеть новые committed записи. Для того, чтобы их увидеть, нужно перевыполнить запрос.
подскажете, плиз как это обойти? т.е. что бы в отображаемой не связанной с изменяемой таблице select не закрывался?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Товарищ программист, вы понимаете, что сменили КЛАСС объекта из-за двух букв?.. Давай тогда вместо "Москвич 412" писать "Москвич 4" или "М 412". А то и вовсе "M2". Короче же...andycat писал(а):1. конечно TIBQuery - просто писать было короче
Создаешь компонент taReadOnly (TIBTransaction) - транзакцию с ReadOnly-параметрами. При коннекте к БД стартуешь ее, а при дисконнекте коммитишь. Это транзакцию линкуешь ко всем наборам, которые просто считывают данные (не изменяют их). Затем в процессе работы просто рефрешишь определенные записи. Но не забывай, что вставленные записи ты не увидишь. Для этого надо переоткрыть весь набор.andycat писал(а):2. изв., не понимаю (некогда не использовал несколько транзакций - не требовалось по логике программ): т.е. я для каждой нужной Select выбираю нужный DefaultTransaction, ставлю им нужные параметры транзакцию и выполняю Open/Execute?
Для той формы, где изменяются данные, создаешь отдельный компонент транзакции - taWrite. Ее линкуешь к TIBQuery этой формы. Ну и при для сохранения изменений вызываешь taWrite.Commit.