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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.05.2012, 17:25
Petros9n Petros9n вне форума
Прохожий
 
Регистрация: 13.10.2011
Сообщения: 34
Репутация: 10
По умолчанию Перехватывание ошибки field must have a value

Если пользователь не вводит данные при добавлении/редактировании в поле которое Not Null, то появляется такая ошибка.
Мне надо перехватить эту ошибку и вместо неё вывести аналогичную по смыслу но локализованную и вместо имя поля из базы вывести текст из заголовка DBGrid'а который соответствует этому полю, подскажите пожалуйста решение для этого.
Ответить с цитированием
  #2  
Старый 09.05.2012, 19:31
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

try-except
Ответить с цитированием
  #3  
Старый 09.05.2012, 19:49
Petros9n Petros9n вне форума
Прохожий
 
Регистрация: 13.10.2011
Сообщения: 34
Репутация: 10
По умолчанию

понятно что try-except, а можно ли узнать какое поле ошибку вызвало ? В самой ошибке поле пишется.
Ответить с цитированием
  #4  
Старый 09.05.2012, 21:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Лежит в E.Message.
Как понять отдельно - ну тут сложный вопрос. В конце концов можно просто проверить наличие некоторых ключевых слов в этом сообщении.
Ответить с цитированием
  #5  
Старый 09.05.2012, 22:07
Petros9n Petros9n вне форума
Прохожий
 
Регистрация: 13.10.2011
Сообщения: 34
Репутация: 10
По умолчанию

Спасибо, решение конечно не очень для меня удобное, у меня в базе полей ого-го сколько, ну наверное буду так делать раз других вариантов нету.
Ответить с цитированием
  #6  
Старый 10.05.2012, 19:49
Petros9n Petros9n вне форума
Прохожий
 
Регистрация: 13.10.2011
Сообщения: 34
Репутация: 10
По умолчанию

Посидел немного - придумал решение, с использованием обработчика OnPostError, вот код может кому будет интересно/пригодится, написано универсально, чтоб можно было использовать 1 обработчик на разных ДатаСетах, если для одного дата сета делать то он будет намного проще, преимущество по сравнению со стандартной ошибкой ещё в том что здесь перечисляются все поля которые пользователь не ввёл а не только первое попавшиеся.

Код:
procedure TMainForm.dstSpcPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
var
  i:integer;
  s,gridName:string;
begin
S := '';
gridName:=GetGridName(DataSet.Name);
for i := 0 to DataSet.FieldCount - 1 do
  begin
    if DataSet.Fields[i].Required and DataSet.Fields[i].IsNull then
      s := s +'Поле '+(FindComponent(gridName) as TDBGridEh).Columns[GetColumnByName(DataSet.Fields[i].FullName,(FindComponent(gridName) as TDBGridEh))].Title.Caption+' не может быть пустым. ';
  end;
E.Message:=s;
end;

function TMainForm.GetColumnByName(const sFieldName : String; GridEh : TDBGridEh): Integer;
var
  i:Integer;
begin
Result := -1;
for i := 0 to GridEh.Columns.Count-1 do
  begin
    if GridEh.Columns[i].FieldName = sFieldName then
      begin
        Result := i;
        break;
      end;
  end;
end;

function TMainForm.GetGridName(a:string):string;
var
  i:integer;
begin
result := '';
  for I:= 0 to ComponentCount - 1 do
  if (Components[i] is TDBGridEh) then
    if (Components[i] as TDBGridEh).DataSource.DataSet.Name = a then
      begin
        result := (Components[i] as TDBGridEh).Name;
        break;
      end;
end;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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