Консультация № 43502
18.05.2006, 18:53
0.00 руб.
0 1 1
Помогите плз!
Написал код (см ниже). Прога компилируется (ошибок не находит), запускается, но при сохранении данных (btnSaveClick) из формы в БД, если остались не заполненные обяз.поля вместо "on EOleException do" работает ‘else", а вместо "on EConvertError do" при неправельном вводе формата даты вообще запускается "raise" (которое по умолчанию), хм.
Классы "EOleException" и "EConvertError" я взял из сообщений "raise" после соответствующих ошибок, до того, как написал этот код.
Если не трудно, подкорректируйте меня пожалуйста!

Приложение:
type EOleException = class(Exception); EConvertError = class(Exception);procedure TfrmEditRecord.btnSaveClick(Sender: TObject); begin try if DataModule1.MainTable.Modified then DataModule1.MainTable.Post; Close; except on EConvertError do Application.MessageBox(‘Ошибка формата даты‘, ‘Ошибка‘, MB_OK); on EOleException do Application.MessageBox(‘Заполните обязательные поля‘, ‘Ошибка‘, MB_OK); else Application.MessageBox(‘Другая ошибка‘, ‘Ошибка‘, MB_OK); end; end;

Обсуждение

Неизвестный
18.05.2006, 22:17
общий
это ответ
Здравствуйте, Dredd!
Я бы сделал так:
п.1 приложения - если таблица в режиме вставки или редактирования, то сохраняю запись
п.2 приложения - в обработчике beforePost проверяю на заполненность обязательные поля. Если не заполнено - сохранение запрещено.
Если непревильно введён формат даты, соответствующее сообщение будет выдано и даже по-русски (в случае ADO). Можно также самому проверять поле на наличие даты. Например, путём преобразования в дату с try except и сообщением + поставить маску на поле ввода (я не знаю, какой элемент управления используете).

Приложение:
п.1procedure TfrmEditRecord.btnSaveClick(Sender: TObject);begin if DataModule1.MainTable.state in [dsEdit,dsInsert] then DataModule1.MainTable.Post; Close;end;//--------------------------------------------------------п.2procedure TDataModule1.MainTableBeforePost(DataSet: TDataSet);begin if MainTable.fieldByName(‘NotNullField‘).AsString = ‘‘ then begin Application.MessageBox(‘Не заполнили обязательное поле NotNullField‘,‘Внимание!‘,mb_IconExclamation); abort; end;end;//код на компиляцию не проверял, здесь Delphi нету, если что, пишите
Форма ответа