1. StartTransaction
2. Делаем выборку данных
3. CommitRetaining
В таком случае видим набор данных в DBGrid. Если нужно сделать модификацию данных, то делаем это уже через другую транзакцию, а в этой просто переоткрываем набор данных. А вот по закрытию формы, уже делаю на основном наборе данных - Commit. Иначе форму не переоткрыть, так как скажет, что транзакция активна. У кого-то есть опыт с подобным? Нормальная реализация?
я просто отказался от использования DBGrid ))
это у тебя БД Firebird?
Лазарус, транзакции. Где Лазарус, а где транзакции? Лазарус ничего не обязан знать о БД. О БД обязан знать компонент доступа к ним. Сам несколько прифигел, когда перелез с ФаирДака + Дельфи + Фаирберд на Юнидак + Лазарус + Фаирберд. Оказывается на Фаирберде любой доступ к данным, в том числе и SELECT открывает транзакцию. И тоже напоролся на похожий трабл как у тебя. Щас гляну как вывернулся.
Видимо там так сложно выворачивался, что решил уснуть, читая код 😅 Ну а вообще я так понимаю, что любой запрос - это транзакция. Просто FireDac по умолчанию делает CommitRetaining. Когда вызывается метод Open
Тут без бутылки не разобраться. Скорее всего используется две транзакции. Default для DBGrid-ов и вторая для DML-ов.
Вот я так же реализовал. Есть один Query, через который Insert, Update, Delete со своей транзакцией, а для отображения данных тоже свой Query со своей транзакцией
Обсуждают сегодня