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

Вниз

Как обработать ошибки выдаваемые при выполнении SQL-оператора?   Найти похожие ветки 

 
Neposeda   (2002-10-15 13:45) [0]

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

Спасибо! Алексей.


 
neXt   (2002-10-15 13:46) [1]

код ошибки хранится в @@error если это MS2000


 
Johnmen   (2002-10-15 14:08) [2]

try ...


 
Neposeda   (2002-10-15 14:35) [3]

А по подробней можно:
Вот я пишу в программе:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(ick);
Query1.ExecSQL;


ick-строка SQL-оператора.


 
AM   (2002-10-15 14:45) [4]

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(ick);
TRY
Query1.ExecSQL;
EXCEPT
ShowMessage("ОШИБКА!");
Exit;
END;

ShowMessage("Все хорошо!");


 
Neposeda   (2002-10-15 15:27) [5]

А как правильно интерпритировать ошибку, т.е. при вашем способе любая ошибка опишется сообщением "ОШИБКА", вне зависимости есть ли коннект, синтаксическая ошибка, либо двойник примарикей.
Хотелось бы сообщать более конкретную ошибку, путем обработки SQL кода ошибки.


 
Johnmen   (2002-10-15 15:39) [6]

Нет ли желания нажать F1 на try ?


 
gek   (2002-10-15 15:43) [7]

> Johnmen © (15.10.02 15:39)

Он видимо хочет примерно так

TRY
Query1.ExecSQL;
EXCEPT
on E:Exception do
begin
ShowMessage(E.message);
Exit;
end;



 
Johnmen   (2002-10-15 15:58) [8]

>gek © (15.10.02 15:43)

Да-да !!! Пусть жмет !


 
passm   (2002-10-15 16:15) [9]

Neposeda (15.10.02 13:45)> Ошибки SQL - оператора не могут привести к "вываливанию" из программы, если она написана без "экзотики"! Обычный DBException.


 
Alinka   (2002-10-15 17:08) [10]

Procedure ObrabotchicErrorov(E:EDatabaseError;{E: EDBEngineError;}UpdateKindSTR: string;Pole:string);
var
s:string;
PartCat,PartCode:word;
sp:Pchar;
UKSTR:string;
function OriginalMessage: String;
var I: Integer; DBErr: TDBError; S: String;
begin
if E is EDBEngineError then
begin
Result := #13#10 ;
for I := 0 to EDBEngineError(E).ErrorCount - 1 do
begin
DBErr := EDBEngineError(E).Errors[I];
case DBErr.NativeError of
-836: { Intebase exception }
begin
S := DBErr.Message;
Result := #13#10 + Copy(S, Pos(#10, S) + 1, Length(S));
Exit;
end;
end;
S := Trim(DBErr.Message);
if S <> "" then Result := Result + #13#10 + S;
end; end;
OriginalMessage :=Result;
end;
{********************}
begin
UKSTR:=UpdateKindSTR;
case EDBEngineError(E).Errors[0].ErrorCode of
(* $2204: E.Message := "aaaaa"{LoadStr(SKeyDeleted);};
$271E,$2734: E.Message := "bbbbbbbb"{LoadStr(SInvalidUserName);};
$2815: E.Message := "cccccccccc"{LoadStr(SDeadlock);};*)
(* $2604: E.Message :={ LoadStr(SFKViolation) + }"wwww"+OriginalMessage;*)
13059:
begin
E.Message:="У вас отсутствуют права на изменение даной таблицы."{+OriginalMessage};
end;
$2601:
begin
if UKSTR="ukDelete" then E.Message:="Удалить запись нельзя так как это повлечет нарушение целостности базы данных."{+OriginalMessage};
if ((UKSTR="ukInsert")) then
E.Message:="Изменения сохранить нельзя так как нарушается условие уникальности поля ""+Pole+"""{+OriginalMessage};
if ((UKSTR="ukModify")) then
begin
if Pos("Btrieve Error 5", OriginalMessage)<>0 then
E.Message:="Изменения сохранить нельзя, так как нарушается условие уникальности поля ""+Pole+"""{+OriginalMessage};
if Pos("Btrieve Error 71", OriginalMessage)<>0 then
E.Message:="Изменения сохранить нельзя, так как это повлечет нарушение целостности базы данных."{+OriginalMessage};
{дублирование значений полей в уникальном ключе}
end;
end;
else
begin
E.Message := (*Format(LoadStr(6{SErrorCodeFmt}), [EDBEngineError(E).Errors[0].ErrorCode]) +*)OriginalMessage;
end; end;
Application.MessageBox(PChar(E.Message),"Сообщение",MB_OK);
end;


 
Neposeda   (2002-10-16 09:08) [11]

Всем Огромное Спасибо за ответы!
Алексей.



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

Форум: "Базы";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-11248
Semion
2002-10-22 06:28
2002.11.04
Без Ини файла


1-11317
DeMoN-777
2002-10-23 23:22
2002.11.04
Или может есть стандартная функция определения разширения файла ?


3-11043
Programmer1
2002-10-14 17:43
2002.11.04
Авторизация пользователя


1-11245
Dok_3D
2002-10-25 13:22
2002.11.04
Передача больших по значению параметров на удаленные COM-сервера.


1-11146
opoloXAI
2002-10-24 13:05
2002.11.04
Сообщение об ошибке при показе MessageDlg.





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