Конференция "Базы" » Проблемы с удалением только что вставленной записи
 
  • TheEd (07.12.15 10:19) [0]
    Уважаемые Мастера, не пинайте ногами - чую, что проблема на поверхности, однако опыта маловато, поделитесь им. Итак:
    есть таблица, в которую вставляю запись, через некоторое время удаляю её. Она из грида исчезает, однако физически присутствует - это отслеживается, к примеру, если в другой таблице используются записи из данной в качестве подстановочных люкап-полей (для отбора использую отдельный датасет). Или если закрыть и октрыть программу, то запись "возрождается".
    Среда: D7, FB2.0, FIBPlus, EhLib.
    на форме:
    TpFIBDataBase,
    2 транзакции:
     на чтение TimeoutAction=TARollback, TPDMode=tpbReadCommitted, TRParams=Empty
     на запись - то же самое.
    датасеты на TpFIBDataSet, AutoCommit=true, CachedUpdates=false, остальное вроде бы по умолчанию.
  • sniknik © (07.12.15 13:40) [1]
    если запись "возрождается" пере открытием рекордсета значит она не удаляется... в базе в смысле, а не датасете.
    почему х.з., попробуй повторить в отдельном, пустом, проекте на единственном датасете/операции. кстати в фибах пишут запросы на операции как в InterBase компонентах (TIBUpdateSQL)? может добавить, раз автоматом не срабатывает?
  • TheEd (07.12.15 14:11) [2]
    блин, переоткрытием - возрождается!
    Счас поэкспериментирую.

    Почитал по транзакциям букварь, назначил читающей ТА
    read nowait read_committed rec_version

    , пишущей -
    write nowait read_committed rec_version

    , имхо должно видеть удалённую запись. Но понял что дело всё-таки в том что она не удалена...
  • TheEd (07.12.15 14:16) [3]
    ещё момент: в фибах есть DeleteSQL, до сих пор не был замечен в глюках... Может с параметрами накосячил, буду ковыряться - если найду где глюк - сообщу.
  • TheEd (07.12.15 15:31) [4]
    нашёл! В АвтоАпдэйт'ах выставил генератор, таблиц, полу и срабатывание на OnNewRecord, и всё заработало. До этого получалось что ID присваивался на стороне сервера, но до переоткрытия датасета - его для вновь вставленной записи его не было видно, соответственно этот код для DeleteSQL не работал:
    DELETE FROM
    SomeTable
    WHERE
     ID = :OLD_ID

    ...
 
Конференция "Базы" » Проблемы с удалением только что вставленной записи
Есть новые Нет новых   [118465   +22][b:0][p:0.001]