Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.017 c
3-58574
Lamer_of_Delphi
2003-08-27 10:48
2003.09.18
Изменение записи...


3-58594
3APA3A
2003-08-26 14:17
2003.09.18
Выбрать все записи в таблице


1-58766
Vlad25
2003-09-05 14:24
2003.09.18
Иконки для кнопок


11-58605
Alexander
2003-01-08 15:18
2003.09.18
Снова про ScreenSaver - так и не получил ответа на свой вопрос:


6-58806
Дима
2003-07-16 23:23
2003.09.18
Установление соединения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский