這個Adoquery的錯誤如何解決

sirliner 2003-08-24 10:33:23
我在Adoquery的PostError中寫如下代碼時提示Invalid class typecast錯誤,要怎麼解決.
if (E as EDBEngineError).Errors[0].Errorcode=eKeyViol then

我在前面已經定義:
Const
eKeyViol=9729;

我看了很多例子都是這樣的,我運行總是錯誤.

...全文
49 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdsimon 2003-08-24
  • 打赏
  • 举报
回复
不错,EDBEngineError是在DBTables单元定义的:

EDBEngineError is the exception class for Borland Database Engine errors.

Unit

DBTables//单元名

Description

EDBEngineError is raised whenever a BDE error occurs. Its Errors property contains TDBError objects.

When EDBEngineError exceptions are raised at design time, they appear in a special dialog (TDbEngineErrorDlg) that displays the complete stack of BDE errors. At runtime, unhandled EDBEngineError exceptions generate the same message box as other exceptions.
lxl 2003-08-24
  • 打赏
  • 举报
回复
你的UNIT必须引用dbtables单元
madyak 2003-08-24
  • 打赏
  • 举报
回复
要取得错误的原生码,那么我们必须从EDBEngineError这个例外对象中取得。但是由ADO产生例外对象并不是从EDBEngineError继承下来的。
ADOExpress组件在发生错误时产生的例外对象并不像BDE/IDAPI一样是EDBEngineError对象,因此我们无法像BDE/IDAPI的应用程序一样从EDBEngineError取得原生的错误代码。如果你检查封装ADOExpress组件的ADODB程序单元,也会发现ADO的错误是由EADOError类别封装的。
{ Errors }
EADOError = class(EDatabaseError );

请参考下面:
procedure TForm4.ADODataSet1PostError(DataSet: TDataSet; E:
EDatabaseError; var Action: TDataAction);
var
adoErrors : Errors;
adoError : Error;
iCount : Integer;
begin
/ /开始处理ADO的Errors对象
adoErrors := ADOConnection1.Errors;
for iCount := 0 to adoErrors.Count - 1 do // Iterate
begin
adoError := adoErrors.Item[iCount];
lbADOErrors.Items.Add('Error Number : ' + IntToStr(adoError.Number));
lbADOErrors.Items.Add('Error Source : ' + adoError.Source);
lbADOErrors.Items.Add('Error Description : ' + adoError.Description);
lbADOErrors.Items.Add('Error HelpFile : ' + adoError.HelpFile);
lbADOErrors.Items.Add('Error SQLState : ' + adoError.SQLState);
lbADOErrors.Items.Add('Error NativeError : ' +
IntToStr(adoError.NativeError));
end ; // for
end ;
sirliner 2003-08-24
  • 打赏
  • 举报
回复
不是这个原因,如果没有引用DBTables,那么在程序的编译阶段就会出错,而我的这个错误是在运行期间出现的.
(E as EDBEngineError).Errors[0].Errorcode 应该是返回word类型.
怎么会提示类型方面的错误.

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧