Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как перехватить ошибку? [D7, Paradox]


Страницы:   1 2

Юлия ©   (2003-08-26 12:44:00) 

При попытке добавить неуникальное значение в индексированное (уникально) поле таблицы появляется ошибка. Как перехватить ее и вывести своесообщение?


AlexWeb   (2003-08-26 16:50:00) [1]

Вам же сказали, попробовать запустить программу не из Дельфи!!!
При ошибке сообщение будет показываться только Ваше.

procedure TForm1.Query1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if E.HelpContext = 0 then
begin
Action:= daAbort;
ShowMessage ("Неуникальное значение"));
end;
end;


Zacho   (2003-08-26 14:54:00) [2]


> Юлия (26.08.03 14:52) [23]

Ну не знаю. У меня - работает.


Юлия   (2003-08-26 14:52:00) [3]

VAleksey:
Я действительно явно не вызваю post... У меня значение выбирается из lookup поля... В момент выбора вылезает ошибка. в этом дело? А где же его ловить тогда?

Zacho:
Код обработчика:
application.MessageBox("Неуникальное значение","Ошибка",mb_ok);
Action:=daAbort;

У меня не работает.
(с текстом сообщения пока не разобралась)


VAleksey   (2003-08-26 14:45:00) [4]

В обработчике напиши.
Action := daAbort;


Zacho   (2003-08-26 14:33:00) [5]


> 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:33:00) [6]


> Юлия

Блин, а ты вот этого типа "VAleksey ©" игнорируешь?, или явно Post нигде не вызываешь? ;-)


Юлия   (2003-08-26 14:28:00) [7]

Пробовала. Не получается. Пишет: key violation


VAleksey   (2003-08-26 14:24:00) [8]


> Zacho © (26.08.03 14:23)

Мне тоже помнится, что исключение на нарушение первичного ключа вызывается до OnPostError.


Zacho   (2003-08-26 14:23:00) [9]


> Юлия (26.08.03 14:11) [14]

А у меня - нет. Попробуй снять галочку "Break on Exceptions" или запустить программу не из Дельфи.


Юлия   (2003-08-26 14:20:00) [10]

Если написать такой код, стандартное сообщение появляется, а мое - нет. В процедуру не попадаем.


VAleksey   (2003-08-26 14:14:00) [11]


> Юлия

Тоже естественно. Т.к. жанное сообщение генерируется BDE.
см.

> VAleksey © (26.08.03 12:59)


Юлия   (2003-08-26 14:11:00) [12]

Стандартное Сообщение об ошибке вылезает раньше, чем наступает событие onPostError.


Zacho   (2003-08-26 14:09:00) [13]


> VAleksey © (26.08.03 14:07) [12]

Согласен. Но у меня старая привычка парсить текст сообщения об ошибке :)


VAleksey   (2003-08-26 14:07:00) [14]


> Zacho © (26.08.03 14:04)

Лучше посмотреть в helpe или книге или как - нибудь получить класс исключения и проверить КЛАСС исключения.


Zacho   (2003-08-26 14:04:00) [15]

Примерно так:
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;


Юлия   (2003-08-26 14:00:00) [16]

(Вопрос к Zacho)


Юлия   (2003-08-26 13:56:00) [17]

Напишите, пожалуйста, как это должно выглядеть.


alex-ran   (2003-08-26 13:03:00) [18]

Вернее так, опечатался :) :
try
Table1.InsertRecord([...,...,...]);
except
on EDBEngineError do
begin
MessageBox("Неуникальное значение","Ошибка",mb_ok
Abort;
end;
end;


Zacho   (2003-08-26 13:02:00) [19]


> Юлия (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:00:00) [20]

Попробуй так:
try
tblAccount.InsertRecord([...,...,...]);
except
on EDBEngineError do beginMessageBox("Неуникальное значение","Ошибка",mb_ok
Abort;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо