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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2009, 12:43   #1
pav-pas
Новичок
Джуниор
 
Регистрация: 19.11.2008
Сообщений: 2
Вопрос Ошибка при вводе данных с ограниченной структурой

Имеется база Access

В базе определены несколько обязательных полей которые не должны быть пустыми.
При добавлении записи и не заполнении ее, при закрытии переходе и т.д. возникает ошибка типа так и так "поле1" не заполнено. Подскажите как обработать ошибку именно на то поле которое не заполнено а не на весь класс EOLEException. Чтоб например если "поле1" не заполнено то появляется сообщение "Поле1 незаполено"
pav-pas вне форума Ответить с цитированием
Старый 17.07.2009, 13:06   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Подскажите как обработать ошибку именно на то поле которое не заполнено а не на весь класс EOLEException
Перед добавлением записи в БД, проверять заполнены ли все обязательные поля, если нет, то выводить соответствующее сообщение.

Точнее отвечу, если расскажешь как добавляешь запись: через таблицу или sql-запросом, также можешь привести код добавления.

P.S. В таблице для полей можно указать значение по умолчанию.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 17.07.2009, 14:39   #3
pav-pas
Новичок
Джуниор
 
Регистрация: 19.11.2008
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Daramant Посмотреть сообщение
Перед добавлением записи в БД, проверять заполнены ли все обязательные поля, если нет, то выводить соответствующее сообщение.

Точнее отвечу, если расскажешь как добавляешь запись: через таблицу или sql-запросом, также можешь привести код добавления.

P.S. В таблице для полей можно указать значение по умолчанию.
Перед заполнением та я знаю но мне надо через объект AdoTable1.append;
Дальше в гриде заполняем, и вот тут мне надо чтоб ошибка при не вводе данных в полеN выдовало сообщение и указывало на данное поле.
По умолчанию тоже не пойдет так как у мну это поле индексированное (при повторении записи тоже ошибка)
pav-pas вне форума Ответить с цитированием
Старый 17.07.2009, 15:38   #4
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Можно сделать так:
У ADOTable есть событие BeforePost. Оно вызывается перед добавлением записи в БД.
Напиши следующий код:
Код:
// DataSet содержи запись которую собирается добавить
procedure TMyDataModule.ADOTableBeforePost(DataSet: TDataSet);
begin
  // если значение не определено, то сообщаем об этом пользователю
  if DataSet.FieldByName('<Имя поля>').Value = null then
    raise Exception.Create('Не введено заначение для поля <Имя поля>');
end;
Добавляем в обработчик ADOTableBeforePost условия для проверки всех необходимых полей.

Например такой код, проверяет, чтобы были заполнены все поля:
Код:
procedure TMyDataModule.ADOTableBeforePost(DataSet: TDataSet);
var
  i: Integer;
begin
  for i := 0 to DataSet.FieldCount - 1 do
    if DataSet.Fields[i].Value = null then
      raise Exception.Create('Не введено значение поля: "' + DataSet.Fields[i].Name + '"');
end;
Так же можно перекрыть события BeforeEdit, BeforeInsert, чтобы проверять корректность редактирования и вставки записей.

P.S. Можно организовать и более сложную проверку, если необходимо.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Daramant; 17.07.2009 в 15:44.
Daramant вне форума Ответить с цитированием
Старый 17.07.2009, 16:53   #5
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Так не делается:
Код:
 if DataSet.FieldByName('<Имя поля>').Value = null then
Так:
Код:
  if DataSet.FieldByName('<Имя поля>').IsNull then
Evgeniy26 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка при вводе данных через php-myadmin и sql запросы serg-php PHP 4 27.09.2009 17:03
Написать программу, которая бы определяла при вводе данных в список, симметричен ли он WhyBeNormal Паскаль, Turbo Pascal, PascalABC.NET 3 03.12.2008 00:04
ошибка при работе со структурой msvc vvviperrr Общие вопросы C/C++ 0 07.05.2008 20:34
Ошибка при работе с структурой Nullator Общие вопросы C/C++ 11 07.03.2008 23:52
преобразование массивов при вводе данных greenkat Microsoft Office Excel 4 28.02.2008 19:21