Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.67.26] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Использую БД InterBase. В диалоге удаляю запись по кнопке "delete" в навигаторе. Из Грида запись удаляется. А в таблице БД изменений нет. Лишь после выхода из формы, где у меня завершается транзакция, изменения в БД есть. Но я после удаления записи в Гриде могу запустить отчет. И нужно, чтобы транзакция завершилась. Как правильно написать код для кнопки "delete", чтобы все работало правильно. Подскажите, пожалуйста. В InterBase я еще не спец...
При выходе из формы транзакцию завершаю так: if (DataModule1->Transaction1->Active == true) { DataModule1->Transaction1->Commit(); } |
Сообщ.
#2
,
|
|
|
Цитата laifik @ В диалоге удаляю запись по кнопке "delete" в навигаторе. Предлагаю отказаться от навигатора(это вчерашний день) и выполнить запрос на удаление, либо вызвать процедуру которая получает id записи и удаляет ее с commit'ом на сервере а не на клиенте. Вы выходите из формы и выполняете коммит? Но если форма открыта и вы хотите создать отчет , то коммита еще нету и запись не удалена. Либо подтверждайте перед созданием отчета (не есть хорошо), либо выберите события навигатора (OnExit например) Добавлено Если Вы удалите десяток-сотню записей и приложение зависнет, не нормально закончиться либо питание закончится то все ваши "удаленные" записи так и останутся в БД - и начинай все сначала. |
Сообщ.
#3
,
|
|
|
Перед созданием отчета пробовала. Ничего хорошего из этого не получилось.
Навигатором воспользовалась, потому что это иногда удобно - в данном случае. Хотела не заморачиваться. В SQL такой проблемы не возникло бы. Сейчас попробовала на OnExit. Что-то никакой реакции. Если не получится, буду писать запрос на удаление. А вообще, когда должно сработать событие OnExit на навигаторе? |
Сообщ.
#4
,
|
|
|
Цитата laifik @ когда должно сработать событие OnExit на навигаторе? В хелпе пишут что при получении фокуса другим контролом, но не окном и не окном другого приложения. Добавлено Цитата laifik @ А вообще, когда должно сработать событие OnExit на навигаторе? Не проще сделать свою кнопку и не заморачиватся в багах навигатора? |
Сообщ.
#5
,
|
|
|
Bas, огромное спасибо. Разобралась. Все получилось, даже с навигатором.
|
Сообщ.
#6
,
|
|
|
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; Что не так? |
Сообщ.
#7
,
|
|
|
Цитата ULik @ Что не так? CommitRetaining можно использовать при редактировании датасета с большим кол-вом записей. Но лучше используйте Commit или перейдите на SQL. |
Сообщ.
#8
,
|
|
|
достаточно просто заменить на DataM.ReadTransaction.Commit; ?
Добавлено при DataM.ReadTransaction.Commit удаляются все записи, а после того как снова зайти в программу все удалённые записи на месте |
Сообщ.
#9
,
|
|
|
Цитата ULik @ DataM.ReadTransaction.Commit удаляются все записи Как событие кнопки TMainForm.MDelClick связано с DataM.DataSetUr.Delete? Транзакции в InterBase/Firebird и их использование в FIBPlus (часть 4) О транзакциях - подробно |
Сообщ.
#10
,
|
|
|
Удаление записи в Grid-е происходит по нажатию кнопки
|
Сообщ.
#11
,
|
|
|
ULik DataSetUr связан с ReadTransaction ?
в общем лучше даже как-то так: 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; |
Сообщ.
#12
,
|
|
|
да, DataSetUr связан с ReadTransaction. Спасибо, попробую.
Добавлено У меня на старт транзакции пишет,что Transaction is activ. Если Commit, то удаляет все записи но не сохраняет всё, если CommitRetaining, то удаляет одну запись, но всё равно не сохраняет удаление |
Сообщ.
#13
,
|
|
|
Цитата ULik @ У меня на старт транзакции пишет,что Transaction is activ. значит транзакция уже была открыта раньше, ищите где в программе еще открывается эта транзакция |
Сообщ.
#14
,
|
|
|
В том то и дело,что я только по книге начала изучать IBX и транзакции, нигде ничего не открывала.Может в инспекторе объектов задать ещё можно по умолчанию? самое простое не могу сделать - удаление и вставка не идут. перешла с access и ADO на firebird и IBX, пытаюсь только
|
Сообщ.
#15
,
|
|
|
Цитата ULik @ перешла с access и ADO на firebird и IBX, пытаюсь только Пойдите по ссылке что я вам дал, и начните с первой части. |