Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > не срабатывает проверка на Modified


Автор: santilaas 25.5.2007, 17:02
Привет всем!
Firebird1.5.3, FibPlus5.2, Ehlib4.0
Ситуация такая: редактирую записи непосредственно в таблице (т.е. через DBGridEh), другими словами, без использования формы редактирования. Притом все довольно таки примитивно - на соответствующие кнопки пишу:
добавить - DM.DataSet.Append;
изменить  - DM.DataSet.Edit;
удалить    - DM.DataSet.Delete;
сохранить - DM.DataSet.Post;
При закрытии формы хочу, чтобы проверялось условие - если запись модифицировалась, тогда предлагать, сохранить изменения перед закрытием или нет.
Пишу:
Код

if DM.DataSet.Modified then
    begin
        if Application.MessageBox('Сохранить изменения?','Вопрос!',MB_YesNo+MB_ICONQUESTION)=IDYes then   
             DM.DataSet.Post; 
        else
             DM.DataSet.Cancel;
    end;  
   
Затем добавляю данные, без сохранения и пытаюсь закрыть форму НО!!! - (проверял отладчиком) - показывает, что DM.DataSet.Modified = False
Вопрос: почему? как тогда быть?  

Автор: Palladin 26.5.2007, 01:11
если показывает что false, а тебе обязательно сохранить попробуй обмануть систему, вообщем в любое поле твоей БД, к примеру поле "Фамилия", добавь в любую имеющуюся строку любой символ и сразу его удали, я думаю такие действия приведут к тому что modified будет показывать true:)
я думаю ты понял что я имею ввиду, или можеш просто добавить один пробел в конец любой записи, хуже базе от этого не станет

Или вариант создай в БД еще одно поле, которое в программе видно не будет(visible:=false:)) и туда заноси что угодно, после этого точно будет modified = true, да и делай любое из моих предложений, сразу перед вызовом твоего if, т.е. тут:

Код

//реализуй мою задумку тут
/////////////////////////////////////
if DM.DataSet.Modified then
    begin
        if Application.MessageBox('Сохранить изменения?','Вопрос!',MB_YesNo+MB_ICONQUESTION)=IDYes then   
             DM.DataSet.Post; 
        else
             DM.DataSet.Cancel;
    end;  

Автор: santilaas 26.5.2007, 14:23
перед тем, как задать вопрос на форум, я пробовал сделать подобное и Modified действительно устанавливался в True, но по моему мнению при редактировании записи через DBGridEh изменения должны менять Modified в любом случае, и почему этого не происходит не понятно. Т.е. получается вариант с непосредственным редактированием записи единственный возможный?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)