如何获得异常的类型?急!!! (30分)

  • 主题发起人 主题发起人 HHSH
  • 开始时间 开始时间
H

HHSH

Unregistered / Unconfirmed
GUEST, unregistred user!
我在TclinetDataset的onposterror()中写下如下代码:
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
application.MessageBox('序号重复!', '提醒:',mb_OK);
Abort;
end
但是我发现这时E is not EDBEngineError!但我又不知道它是什么?
请问如何显示出这个E的类型?就象可以显示出错信息:showmessage(E.Message)一样?
请看清楚,我用的是TclientDataset而不是Tquery.
 
测试的时候出错不是有错误代码嘛?
 
我是想取得这个过程中参数E的值是什么。例如上面的EDBEngineError。
这个问题难吗?怎么没人回答?
 
不加任何处理时,delphi的错误窗就提示错误的类型,
 
to ning_ning:
这个我也知道,过去,我经常从错误窗里得知错误类型,但遗憾的是这次不行。看不出来。
没有显示如EDBEngineError之类有价值的信息。
怎么?真的没办法吗?
 
except
on E: EDBEngineError do
begin
for i := 0 to E.ErrorCount - 1 do
begin
if E.Errors.ErrorCode = $2601 then
begin
Application.MessageBox('已经存在这个编号,请选择其他编号!', '提示', 48 + mb_ok);
end
else
Application.MessageBox(pChar('保存错误!错误信息为:' + E.Message), '提示', 48 + mb_ok);
Exit;
end;
 
兄弟,用 On 啊
 
to beat:
连E是什么都不知道,怎么用on呢?象上面的代码: on E: EDBEngineError do 根本不执
行,因为E is not EDBEngineError,on 又有什么用呢?我是想精确地知道这个E是什么,
以便给出恰当的提示。
to yzhshi:
你的代码与我上面贴的无本质区别。
 
to HHSH, 但是我就是使用上面的这个捕获主键冲突的,而且效果很好!
其实主键冲突有两个错误,一个是EDBEngineError,还有一个是EDataBaseError什么的,记不清了,
不过上面我贴的代码就是可以的,要不,你仔细实验一下。
 
EDatabaseError
 
试试
try
...
except
on e:exception do
begin
if e.classname = 'EDBEngineError' then
begin
end
else
showmessage(e.classname);
end
else
begin
end;
end;
 
to yzhshi:
你的代码是无误,但这要看你用的是什么Tdataset.上面我已提出:我用的是
Tclientdataset,它返回的肯定不是EDBEngineError,你呢?

to yhee:
你的这个不经意的e.classname好厉害!我得到它为edbclient,立刻奔到dbclient.pas
中查找,原来 EDBClient = class(EDatabaseError),于是我用IF E IS EDatabaseError
一试,果然是lmmlw说的EDatabaseError!看来,你的用法还真有价值!没有直接得到的办法
吗?
to lmmlw:
如何检测呢?
 
这位兄弟:
不知是不是盗版软件的问题,delphi中的自带的异常处理(主键非空、主键重复等)无法
靠delphi自动识别异常种类,仅能判断是异常。
 
多人接受答案了。
 
后退
顶部