Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];

Вниз

Обработка ошибки при неверном добавлении записи в БД.   Найти похожие ветки 

 
Гость   (2009-04-21 10:21) [0]

Добрый день.
Ситуация след-я.
При добавлении новой записи в табличку, если не все поля заполнены вылезает ошибка примерно такая:

Project Project1.exe raised exception class EFIBInterBaseError with message "DMForm.ClassDSet.InsertQuery:
The insert failed because a column definition includes validation constraints.Validation error for column ID_MODEL, value "*** null ***".
".
Хочется обработать ее и выдать собственное сообщение пользователю.
Кидаю на форму ErrorHandler1. Пишу обработчик:
procedure TDMForm.ErrorHandler1FIBErrorEvent(Sender: TObject;
 ErrorValue: EFIBError; KindIBError: TKindIBError; var DoRaise: Boolean);
begin
 DoRaise := True;
 if (Sender is TFIBQuery) and
    (ErrorHandler1.LastError = keOther) // Она почему то именно этого типа.
 then
 begin
   MessageDlg("Все поля новой записи должны быть заполнены!!", mtError,[mbOK], 0);
   DoRaise := False;
 end;
end;

Так вот, если ошибка возникает в следствии попытки пользователя перейти на с новой недозаполненной записи на другую, то сообщение то я получаю свое, но вот переход на другую запись осуществляется и получается в табличке на форме неверная строка!!
Если же [b]DoRaise[/b] ставить в true, то остается текущей неверная строчка, что и требуется, но при этом вслед за моим сообщением вылезает ошибка с сервера.
(FB, FIB, Delphi 2007)


 
Sergey13 ©   (2009-04-21 10:30) [1]

Я предпочитаю не допускать до сервера не проверенные (хотя бы прмитивненько) данные.
Во первых можно проверить данные перед POST-ом. Во вторых можно (и очень желательно) сделать ввод сложных и/или объемных данных на отдельной форме и проверять по кнопке "Сохранить".
А отлов исключений сервера - это последний рубеж обороны, который никогда не должен срабатывать. 8-)


 
Гость   (2009-04-21 11:32) [2]

Sergey13, согласен полностью.
Подскажи, pls, как мне обработать эту ошибку перед добавлением записи.
Я пробовал сделать в методе BeforePost. Но не могу сообразить как отменить этот самый Post и вернуть пользователя на неверную строку, а не просто отменить с удалением этой строки, что делает DataSet.Cancel.


 
Sergey13 ©   (2009-04-21 12:44) [3]

> [2] Гость   (21.04.09 11:32)

Abort


 
sniknik ©   (2009-04-21 13:12) [4]

прятать оригинальную строку с ошибкой ни в коем случае нельзя! самые большие проблемы с поддержкой не изза того, что чего-то не работает, а из-за того, что ошибка не выдается или "переводится" (а то еще одной фразой целый класс ошибок. русификаторы блин).


 
Anatoly Podgoretsky ©   (2009-04-21 13:19) [5]

Стрелять из рогатки.


 
clickmaker ©   (2009-04-21 13:21) [6]

> прятать оригинальную строку с ошибкой ни в коем случае нельзя!

не очень продвинутые пользователи пугаются таких строк ) уж не говоря о том, что не все в состоянии будут, например, по телефону произнести внятно текст экцепшена. который в первом посте.
можно вести лог, в случае сбоя просить выслать его техподдержке


 
Anatoly Podgoretsky ©   (2009-04-21 13:24) [7]

> clickmaker  (21.04.2009 13:21:06)  [6]

Так есть же другой метод, когда текста два, свой и оригинальный. И нашим и вашим.


 
clickmaker ©   (2009-04-21 14:56) [8]

> Так есть же другой метод, когда текста два, свой и оригинальный

это и имелось в виду под ведением лога. Разумеется, юзеру надо как-то сказать об ошибке


 
Anatoly Podgoretsky ©   (2009-04-21 15:15) [9]

> clickmaker  (21.04.2009 14:56:08)  [8]

Можно и так, а можно и в сообщение. Вариантов то много. Важно не скрывать, а то концов не найти.


 
Гость   (2009-04-21 15:19) [10]

Sergey13, спасибо. Аборт помог ))
Для лога использую отдельную функцию:

procedure AddToLog(s:string);
var
fn:string;
F:TextFile;
begin
 Fn:=ExtractFilePath(ParamStr(0))+"ARM_log.txt";
 assignFile(f,fn);
 if FileExists(fn) then Append(f) else Rewrite(f);
 Write(f,DateTimeToStr(Now));
 Writeln(f,"> "+ s);
 Flush(f);
 Closefile(f);
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.004 c
2-1240244578
Роман
2009-04-20 20:22
2009.06.07
Фильтрация по нескольким полям


15-1238574558
Правильный$Вася
2009-04-01 12:29
2009.06.07
начали выпускать автосамолет


15-1238704205
Юрий
2009-04-03 00:30
2009.06.07
С днем рождения ! 3 апреля 2009 пятница


2-1240308814
aza
2009-04-21 14:13
2009.06.07
Помогите редактировать записи..


15-1238405776
Alex_2009
2009-03-30 13:36
2009.06.07
windows 2000 пропал доступ к редактору реестра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский