ADO Обработка исключений?
Я только что перешел от использования BDE к ADO, заменив таблицы и запросы на их эквиваленты в компонентах ADO.
Я всегда выполняю запрос внутри try... catch так:
//Fdm is Data Module
//TEndOfDay is TTable
//QEndOfDay is TQuery
Screen->Cursor = crSQLWait;
Fdm->QEndOfDay->SQL->Add("SELECT * FROM TEndOfDay");
try{
Fdm->QEndOfDay->ExecSQL();
Fdm->QEndOfDay->Open();
Screen->Cursor = crDefault;
}
catch (EDBEngineError &DBEngineError){
strError = DBEngineError.Message;
Screen->Cursor = crDefault;
}
catch (EDatabaseError &DatabaseError){
strError = DatabaseError.Message;
Screen->Cursor = crDefault;
}
catch(...){
strError = "Error";
Screen->Cursor = crDefault;
}
Поскольку я перешел на ADO, применимы ли эти исключения (DBEngineError, DatabaseError)?
Я отредактировал свой пост, чтобы включить людей Delphi, они быстро отвечают. Неважно, если ответ в Delphi код.
1 ответ
Решение
Вы должны сначала проверить EADOError
, которые являются конкретными исключениями, связанными с ADO, а затем EDatabaseError
, которые являются более общими исключениями базы данных. EDBEngineError
является старым классом исключений BDE и больше не применяется, если вы не используете BDE.
Screen.Cursor := crSQLWait;
Fdm.QEndOfDay.SQL.Text := 'SELECT * FROM TEndOfDay';
try
try
Fdm.QEndOfDay.Open;
except
on E: EAdoError do
begin
// ADO specific error handling
end;
on E: EDatabaseError do
begin
// Generic database error handling
end;
on E: Exception do
begin
// Other exceptions (non-DB related)
end;
end;
finally
// Revert cursor to default always.
Screen.Cursor := crDefault;
end;