Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.07.2014, 23:52
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию Переоткрыть модальную форму после неудачного Table.Post

Вызов метода Post
Код:
function TFormNewGTD.Execute(GTDDataSet: TDataSet): boolean;
begin
  dsNewGTD.DataSet := GTDDataSet;

  dsNewGTD.DataSet.Insert;
  Result := ShowModal = mrOK;
  if Result then
    dsNewGTD.DataSet.Post
  else
    dsNewGTD.DataSet.Cancel;
end;

Его обработка:
Код:
procedure TFormMain.GTDBeforePost(DataSet: TDataSet);
begin
  if DataSet.FieldByName('Registration Number').IsNull or
    DataSet.FieldByName('Date').IsNull then
  begin
    MessageDlg('Для создания ГТД оба поля должны быть заполнены.', mtError,
      [mbOk], 0);
    DataSet.Cancel;
  end;
end;

Если ввести в пустую таблицу "пустую строку" (т.е. не заполнить поля) на строчке DataSet.Cancel; возникает exception o.O будто я ничего не отменял и не "обрабатывал". Куда копать?

В целом предполагал вместо DataSet.Cancel делать Abort, но тогда становится вообще непонятно, как открыть эту же форму для исправления ошибок. Номера ГТД очень длинные, и меня проклянут если я заставлю их вводить каждый раз, когда юзверь забудет ввести дату.

Тут где-то нужен цикл для ShowModal...

P.S. Ко всему прочему Abort это утечка памяти, ибо до метода Free (для модальной формы) компилятор просто не доберётся.

Последний раз редактировалось Uniq!, 26.07.2014 в 23:58.
Ответить с цитированием
  #2  
Старый 26.07.2014, 23:57
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Uniq!
на строчке DataSet.Cancel; возникает exception o.O
Телепатические способности отключены для экономии энергии из-за жары.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #3  
Старый 27.07.2014, 00:29
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от Freeman
Телепатические способности отключены для экономии энергии из-за жары.
Я коряво изложил мысль. Exception указывает как раз на то, что строки пустые, и что приложение не может заPOSTить пустую строку.
Но перед этим же я проверил и указал ему, что если параметры пустые-делай Cancel; o.O


Судя по офф. документации от Embarcadero, нужно использовать Abort; внутри функции BeforePost;

Последний раз редактировалось Uniq!, 27.07.2014 в 15:47.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter