-
Уважаемые Мастера, не пинайте ногами - чую, что проблема на поверхности, однако опыта маловато, поделитесь им. Итак: есть таблица, в которую вставляю запись, через некоторое время удаляю её. Она из грида исчезает, однако физически присутствует - это отслеживается, к примеру, если в другой таблице используются записи из данной в качестве подстановочных люкап-полей (для отбора использую отдельный датасет). Или если закрыть и октрыть программу, то запись "возрождается". Среда: D7, FB2.0, FIBPlus, EhLib. на форме: TpFIBDataBase, 2 транзакции: на чтение TimeoutAction=TARollback, TPDMode=tpbReadCommitted, TRParams=Empty на запись - то же самое. датасеты на TpFIBDataSet, AutoCommit=true, CachedUpdates=false, остальное вроде бы по умолчанию.
-
если запись "возрождается" пере открытием рекордсета значит она не удаляется... в базе в смысле, а не датасете. почему х.з., попробуй повторить в отдельном, пустом, проекте на единственном датасете/операции. кстати в фибах пишут запросы на операции как в InterBase компонентах (TIBUpdateSQL)? может добавить, раз автоматом не срабатывает?
-
блин, переоткрытием - возрождается! Счас поэкспериментирую. Почитал по транзакциям букварь, назначил читающей ТА read nowait read_committed rec_version , пишущей - write nowait read_committed rec_version , имхо должно видеть удалённую запись. Но понял что дело всё-таки в том что она не удалена...
-
ещё момент: в фибах есть DeleteSQL, до сих пор не был замечен в глюках... Может с параметрами накосячил, буду ковыряться - если найду где глюк - сообщу.
-
нашёл! В АвтоАпдэйт'ах выставил генератор, таблиц, полу и срабатывание на OnNewRecord, и всё заработало. До этого получалось что ID присваивался на стороне сервера, но до переоткрытия датасета - его для вновь вставленной записи его не было видно, соответственно этот код для DeleteSQL не работал:
DELETE FROM SomeTable WHERE ID = :OLD_ID ...
|