我刚刚从使用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代码中。
发布于 2014-02-19 16:53:55
首先应该检查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;https://stackoverflow.com/questions/21868588
复制相似问题