Форум: "Базы";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
ВнизКак перехватить ошибку? Найти похожие ветки
← →
Юлия (2003-08-26 12:44) [0]При попытке добавить неуникальное значение в индексированное (уникально) поле таблицы появляется ошибка. Как перехватить ее и вывести свое сообщение?
← →
Zacho (2003-08-26 12:48) [1]Например, написать обработчик события OnPostError.
← →
Юлия (2003-08-26 12:56) [2]как предотвратить появление стандартного сообщения?
procedure Form1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
application.MessageBox("Неуникальное значение","Ошибка",mb_ok);
abort;
end;
Стандартное сообщение появляется все равно.
И как определить, что ошибка произошла именно в результате вставки неуникальной записи?
← →
VAleksey (2003-08-26 12:59) [3]Try
Post;
Except
On E:Exception do
begin
....
end;
end;
Это общий случай.
В твоем случае можно > Zacho © (26.08.03 12:48)
PS
А вместо Exception нужный класс исключения.
← →
ZrenBy (2003-08-26 12:59) [4]Проверять перед вставкой
if(t.FindKey(...)=True)then raise ...
← →
LVitaliy (2003-08-26 13:00) [5]Поставить
try ....
Post
except
Сообщение("Неуникальное значение");
end;
← →
alex-ran (2003-08-26 13:00) [6]Попробуй так:
try
tblAccount.InsertRecord([...,...,...]);
except
on EDBEngineError do beginMessageBox("Неуникальное значение","Ошибка",mb_ok
Abort;
end;
← →
Zacho (2003-08-26 13:02) [7]
> Юлия (26.08.03 12:56) [2]
TDataSetErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction) of object;
Обрати внимание на E: EDatabaseError; и var Action: TDataAction
Подробности - в хелпе.
← →
alex-ran (2003-08-26 13:03) [8]Вернее так, опечатался :) :
try
Table1.InsertRecord([...,...,...]);
except
on EDBEngineError do
begin
MessageBox("Неуникальное значение","Ошибка",mb_ok
Abort;
end;
end;
← →
Юлия (2003-08-26 13:56) [9]Напишите, пожалуйста, как это должно выглядеть.
← →
Юлия (2003-08-26 14:00) [10](Вопрос к Zacho)
← →
Zacho (2003-08-26 14:04) [11]Примерно так:
procedure Form1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if E.Message="не помню я, какое там сообщение, поставь нужное" then
begin
Action:=daAbort;
application.MessageBox("Неуникальное значение","Ошибка",mb_ok);
end else Action:=daFail;
end;
← →
VAleksey (2003-08-26 14:07) [12]
> Zacho © (26.08.03 14:04)
Лучше посмотреть в helpe или книге или как - нибудь получить класс исключения и проверить КЛАСС исключения.
← →
Zacho (2003-08-26 14:09) [13]
> VAleksey © (26.08.03 14:07) [12]
Согласен. Но у меня старая привычка парсить текст сообщения об ошибке :)
← →
Юлия (2003-08-26 14:11) [14]Стандартное Сообщение об ошибке вылезает раньше, чем наступает событие onPostError.
← →
VAleksey (2003-08-26 14:14) [15]
> Юлия
Тоже естественно. Т.к. жанное сообщение генерируется BDE.
см.
> VAleksey © (26.08.03 12:59)
← →
Юлия (2003-08-26 14:20) [16]Если написать такой код, стандартное сообщение появляется, а мое - нет. В процедуру не попадаем.
← →
Zacho (2003-08-26 14:23) [17]
> Юлия (26.08.03 14:11) [14]
А у меня - нет. Попробуй снять галочку "Break on Exceptions" или запустить программу не из Дельфи.
← →
VAleksey (2003-08-26 14:24) [18]
> Zacho © (26.08.03 14:23)
Мне тоже помнится, что исключение на нарушение первичного ключа вызывается до OnPostError.
← →
Юлия (2003-08-26 14:28) [19]Пробовала. Не получается. Пишет: key violation
← →
VAleksey (2003-08-26 14:33) [20]
> Юлия
Блин, а ты вот этого типа "VAleksey ©" игнорируешь?, или явно Post нигде не вызываешь? ;-)
← →
Zacho (2003-08-26 14:33) [21]
> VAleksey © (26.08.03 14:24) [18]
> Юлия (26.08.03 14:28) [19]
Только что попробовал. Все работает нормально. Естественно, при запусе под отладчиком при включенной опции "Break on Exceptions" сначало выдается стандартное сообщение об ошибке и вываливается в отладчик, а потом вызывается OnPostError. При запуске программы не из Дельфи - естественно, никаких "стандартных" сообщений нет, только то, что я сам выдаю в OnPostError.
2 Юлия : приведи свой код обработчика OnPostError.
← →
VAleksey (2003-08-26 14:45) [22]В обработчике напиши.
Action := daAbort;
← →
Юлия (2003-08-26 14:52) [23]VAleksey:
Я действительно явно не вызваю post... У меня значение выбирается из lookup поля... В момент выбора вылезает ошибка. в этом дело? А где же его ловить тогда?
Zacho:
Код обработчика:
application.MessageBox("Неуникальное значение","Ошибка",mb_ok);
Action:=daAbort;
У меня не работает.
(с текстом сообщения пока не разобралась)
← →
Zacho (2003-08-26 14:54) [24]
> Юлия (26.08.03 14:52) [23]
Ну не знаю. У меня - работает.
← →
AlexWeb (2003-08-26 16:50) [25]Вам же сказали, попробовать запустить программу не из Дельфи!!!
При ошибке сообщение будет показываться только Ваше.
procedure TForm1.Query1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if E.HelpContext = 0 then
begin
Action:= daAbort;
ShowMessage ("Неуникальное значение"));
end;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c