На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Как завершить транзакцию после удаления записи?
    Использую БД InterBase. В диалоге удаляю запись по кнопке "delete" в навигаторе. Из Грида запись удаляется. А в таблице БД изменений нет. Лишь после выхода из формы, где у меня завершается транзакция, изменения в БД есть. Но я после удаления записи в Гриде могу запустить отчет. И нужно, чтобы транзакция завершилась. Как правильно написать код для кнопки "delete", чтобы все работало правильно. Подскажите, пожалуйста. В InterBase я еще не спец... 8-)
    При выходе из формы транзакцию завершаю так:

    ExpandedWrap disabled
      if  (DataModule1->Transaction1->Active == true)  {
           DataModule1->Transaction1->Commit();
       
           }
      Цитата laifik @
      В диалоге удаляю запись по кнопке "delete" в навигаторе.

      Предлагаю отказаться от навигатора(это вчерашний день) и выполнить запрос на удаление, либо вызвать процедуру которая получает id записи и удаляет ее с commit'ом на сервере а не на клиенте.
      Вы выходите из формы и выполняете коммит? Но если форма открыта и вы хотите создать отчет , то коммита еще нету и запись не удалена.
      Либо подтверждайте перед созданием отчета (не есть хорошо), либо выберите события навигатора (OnExit например)

      Добавлено
      Если Вы удалите десяток-сотню записей и приложение зависнет, не нормально закончиться либо питание закончится то все ваши "удаленные" записи так и останутся в БД - и начинай все сначала.
      Сообщение отредактировано: Bas -
        Перед созданием отчета пробовала. Ничего хорошего из этого не получилось.
        Навигатором воспользовалась, потому что это иногда удобно - в данном случае. Хотела не заморачиваться. В SQL такой проблемы не возникло бы.
        Сейчас попробовала на OnExit. Что-то никакой реакции.
        Если не получится, буду писать запрос на удаление.
        А вообще, когда должно сработать событие OnExit на навигаторе?
          Цитата laifik @
          когда должно сработать событие OnExit на навигаторе?

          В хелпе пишут что при получении фокуса другим контролом, но не окном и не окном другого приложения.

          Добавлено
          Цитата laifik @
          А вообще, когда должно сработать событие OnExit на навигаторе?

          Не проще сделать свою кнопку и не заморачиватся в багах навигатора?
            Bas, огромное спасибо. Разобралась. Все получилось, даже с навигатором.
              ExpandedWrap disabled
                 
              Добрый день! есть БД firebird, подключаю базу компонентами IBX только разбираюсь с транзакциями. делаю удаление, удаляет, но после переоткрытия удаленная запись на метсе.


              ExpandedWrap disabled
                 procedure TMainForm.MDelClick(Sender: TObject);
                begin
                 if DataM.DataSetUr.RecordCount = 0 then exit;
                 if Application.MessageBox('Удалить текущую запись',
                 'Удаление', MB_YESNO + MB_ICONQUESTION) = mrYes then
                 DataM.DataSetUr.Delete;
                 DataM.ReadTransaction.CommitRetaining;
                end;


              Что не так?
              Сообщение отредактировано: Bas -
                Цитата ULik @
                Что не так?

                CommitRetaining можно использовать при редактировании датасета с большим кол-вом записей.
                Но лучше используйте Commit или перейдите на SQL.
                  достаточно просто заменить на DataM.ReadTransaction.Commit; ?

                  Добавлено
                  при DataM.ReadTransaction.Commit удаляются все записи, а после того как снова зайти в программу все удалённые записи на месте
                    Цитата ULik @
                    DataM.ReadTransaction.Commit удаляются все записи

                    Как событие кнопки TMainForm.MDelClick связано с DataM.DataSetUr.Delete?
                    Транзакции в InterBase/Firebird и их использование в FIBPlus (часть 4)
                    О транзакциях - подробно
                      Удаление записи в Grid-е происходит по нажатию кнопки
                        ULik DataSetUr связан с ReadTransaction ?
                        в общем лучше даже как-то так:
                        ExpandedWrap disabled
                          DataM.DataSetUr.Transaction.StartTransaction;
                          try
                            // ...
                            DataM.DataSetUr.Delete;
                            // ...
                            if DataM.DataSetUr.Transaction.Active
                              then DataM.DataSetUr.Transaction.Commit;
                          except
                            if DataM.DataSetUr.Transaction.Active
                              then DataM.DataSetUr.Transaction.Rollback;
                          end;
                          да, DataSetUr связан с ReadTransaction. Спасибо, попробую.

                          Добавлено
                          У меня на старт транзакции пишет,что Transaction is activ.

                          Если Commit, то удаляет все записи но не сохраняет всё, если CommitRetaining, то удаляет одну запись, но всё равно не сохраняет удаление
                            Цитата ULik @
                            У меня на старт транзакции пишет,что Transaction is activ.

                            значит транзакция уже была открыта раньше, ищите где в программе еще открывается эта транзакция
                              В том то и дело,что я только по книге начала изучать IBX и транзакции, нигде ничего не открывала.Может в инспекторе объектов задать ещё можно по умолчанию? самое простое не могу сделать - удаление и вставка не идут. перешла с access и ADO на firebird и IBX, пытаюсь только
                                Цитата ULik @
                                перешла с access и ADO на firebird и IBX, пытаюсь только

                                Пойдите по ссылке что я вам дал, и начните с первой части.
                                  а добавление работает,но только при CommitRetaining

                                  procedure TEditUrForm.Button1Click(Sender: TObject);
                                  begin
                                  DataM.DataSetUr.Insert;
                                  DataM.DataSetUr.Post;
                                  Close;
                                  DataM.ReadTransaction.CommitRetaining;
                                  end;

                                  Добавлено
                                  я же использую компоненты IBX,а не FibPlus
                                    Цитата Bas @
                                    Пойдите по ссылке что я вам дал, и начните с первой части.


                                    я же использую компоненты IBX,а не FibPlus
                                      Цитата ULik @
                                      я же использую компоненты IBX,а не FibPlus

                                      Они одинаковые, по крайней мере были до Delphi6.
                                      Почему при удалении не делаете Post?
                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                        0 пользователей:


                                        Рейтинг@Mail.ru
                                        [ Script execution time: 0,0492 ]   [ 17 queries used ]   [ Generated: 28.03.24, 19:50 GMT ]