Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2011, 22:33   #1
cliv
Пользователь
 
Регистрация: 30.06.2011
Сообщений: 13
По умолчанию не удаляется запись - почему?

из таблицы access не удаляется запись если она первая и единственная И перед этим вызывался insert(append) кто может подсказать где ошибка?
Код:
//-------------------------------------------------------------------
//Добавить документ
//-------------------------------------------------------------------
procedure TMainMKForm.AddDocBtnClick(Sender: TObject);
begin                             //вот этот блок не работает как надо
  ProgramInsert:= True;  //в beforeinsert = if not ProgramInsert then Abort;
  With  DataModule1.DocumentT do
  begin
    Append;                                        //добавить запись в DocumentT
                                                        //вызов формы редактирования
    Case AddDocForm.ShowModal of     //проверка диалога сохранения
      mrYes : Post;                        //сохранить
      mrNo  : Delete;                     //удалить - НЕ РУГАЕТСЯ НО и НЕ УДАЛЯЕТ
      mrCancel: ;
    end;
  end;
  ProgramInsert:= False;
  DbGridEh1.SetFocus;
end;
//-------------------------------------------------------------------
//Редактировать документ
//-------------------------------------------------------------------
procedure TMainMKForm.EnterDocBtnClick(Sender: TObject);
begin                                                          //здесь все чудесно работает
  Case AddDocForm.ShowModal of
    mrYes : ;
    mrNo  : DataModule1.DocumentT.Delete;  //удалить документ
  end;
end;
//-------------------------------------------------------------------
//Удалить документ
//-------------------------------------------------------------------
procedure TMainMKForm.DelDocBtnClick(Sender: TObject);
begin
  With DataModule1 do
  begin
    if DocumentTDoc_Status.AsBoolean then      //если закрыт - выругаться 
       ShowMessage('     Документ закрыт'+#13+'удаление невозможно')
    else                                                           //если открыть то спросить
      if MessageDlg('Удалить документ ?',
       mtConfirmation, [mbYes, mbNo], 0) = mrYes then
       DocumentT.Delete;                                 //удалить
    DbGridEh1.SetFocus;                                 //фокус на грид
  end;
//Внимание!!! будет обработано событие BeforeDelete в модуле DataModuleUnit
end;


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.07.2011 в 23:09.
cliv вне форума Ответить с цитированием
Старый 25.07.2011, 22:58   #2
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

Прежде чем что-то удалить нужно это сохранить. Если не было сохранения (Post), нужно использовать отмену (Cancel):

Код:
//-------------------------------------------------------------------
//Добавить документ
//-------------------------------------------------------------------
procedure TMainMKForm.AddDocBtnClick(Sender: TObject);
begin                             //вот этот блок не работает как надо
  ProgramInsert:= True ;  //в beforeinsert = if not ProgramInsert then Abort;
  DataModule1.DocumentT.Append ;                                        //добавить запись в DocumentT
                                                                                        //вызов формы редактирования
    case AddDocForm.ShowModal of     //проверка диалога сохранения
      mrYes : DataModule1.DocumentT.Post ;                        //сохранить
      mrNo  : DataModule1.DocumentT.Cancel ;                     //удалить - НЕ РУГАЕТСЯ НО и НЕ УДАЛЯЕТ
      mrCancel: ;
    end;
  ProgramInsert:= False ;
  DbGridEh1.SetFocus ;
end;
//-------------------------------------------------------------------
//Редактировать документ
//-------------------------------------------------------------------
procedure TMainMKForm.EnterDocBtnClick(Sender: TObject);
begin                                                          //здесь все чудесно работает
  DataModule1.DocumentT.Edit ;
  Case AddDocForm.ShowModal of
    mrYes : DataModule1.DocumentT.Post ;
    mrNo  : DataModule1.DocumentT.Cancel ;  //удалить документ
  end;
end;

Последний раз редактировалось Gulik; 25.07.2011 в 23:04.
Gulik вне форума Ответить с цитированием
Старый 25.07.2011, 23:21   #3
cliv
Пользователь
 
Регистрация: 30.06.2011
Сообщений: 13
По умолчанию

сгоряча я такое предположение делал - ставил Post перед Delete - ЭТО не работает. Кроме того прошу обратить внимание что трабл возникает ТОЛЬКО если запись последняя(единственная) в таблице. Если я создам их более одной - код работает чудесно. И ТОЛЬКО если ранее вызывался insert потому что эту единственную запись я легко удаляю в остальных двух блоках программы их текст то же приведен здесь. Логично предположить что после insert взводится какой то флаг и чем его сбросить мне не известно POST точно не подходит
cliv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаляется последняя запись ilushka2306 PHP 15 06.06.2011 06:55
Не удаляется запись. Firebird + Interbase artemavd Общие вопросы Delphi 2 08.05.2011 14:30
С++. Почему удаляется последний эелемент? AxenicX Помощь студентам 5 30.11.2009 00:41
Не удаляется папка. Kashp Операционные системы общие вопросы 9 31.01.2008 10:49