在某些情况下(在多用户环境中)当我编辑TADODataSet并发布它时,我得到了ADO引发的异常:
“Row cannot be located for updating. Some values may have been changed
since it was last read.”
如果我从IDE运行我的程序,异常将引发为EOleException,错误号为-2147217864.
我希望能够捕获此异常,但是当我在IDE外部运行程序时,会引发异常,因为EDatabaseError没有我需要检查的ErrorCode.这是我的代码的一部分:
procedure TForm1.DataSetCommit(ds: TADODataSet);
begin
ds.Connection.BeginTrans;
try
try
ds.Post; //
except
on E: EOleException do; // EOleException is NOT fired! (E.ErrorCode = -2147217864) - see "ADODB.TCustomADODataSet.InternalPost"
on E: EDatabaseError do
begin
// todo: Handle this situation
end;
end;
ds.Connection.CommitTrans;
except
ds.Connection.RollbackTrans;
raise;
end;
end;
如果您查看ADODB.TCustomADODataSet.InternalPost,您会注意到它被包装为:
procedure TCustomADODataSet.InternalPost;
begin
UpdateCursorPos;
try
... //
except
on E: Exception do
DatabaseError(E.Message);
end;
CheckForFlyAway;
end;
异常是在本地过程UpdateData内引发的:Recordset.Update(EmptyParam,EmptyParam);它会触发EOleException(我需要的东西),但是包装器会引发EDatabaseError! (grrrrrrr).
我的问题是我如何得到原始的EOleException,所以我可以查询EOleException.ErrorCode?