请看以下代码
try
if not VarIsNull(CustVar) then
CustVar := DataSetProvider1.ApplyUpdates(CustVar,0,ErrCount);
except
//showmessage('Error');
on E: Exception do
raise Exception.Create(HandleError(E));//SmDataModule.GetErrorInfo(E));
end;此段代码用TDataSetProvider的ApplyUpdate方法来进行数据的更新,可是如果输入的数据错误,导致数据库报错,我用try..except截获它,并且将此错误抛出,由客户端截获此错误,并显示,可无论我怎样输错数据except...之中的代码就不执行,但是我调试时程序执行到这一段 Custvar := DataSetProvider.ApplyUpdate()就报错,不知道为什么?
请高手帮忙解决;
注:
function HandleError(E);的代码如下
if not (E is EDBEngineError) then
begin
ADOErrors := ADOConnection.Errors;
for i := 0 to ADOErrors.Count - 1 do
begin
ADOError := ADOErrors.Item[i];
Result := ADOError.Description;
end;
end;
为截获ADO的错误,因为我的DataSetProvider的DataSet为ADO。
上面的错误跟HandleError无关,主要的问题是明明有错误发生Except中的代码却不执行>??????下面我会将我的整个程序的处理过程跟大家解释一下,我不想在DataSetProvider的OnUpdateError里写东西。
try
if not VarIsNull(CustVar) then
CustVar := DataSetProvider1.ApplyUpdates(CustVar,0,ErrCount);
except
//showmessage('Error');
on E: Exception do
raise Exception.Create(HandleError(E));//SmDataModule.GetErrorInfo(E));
end;此段代码用TDataSetProvider的ApplyUpdate方法来进行数据的更新,可是如果输入的数据错误,导致数据库报错,我用try..except截获它,并且将此错误抛出,由客户端截获此错误,并显示,可无论我怎样输错数据except...之中的代码就不执行,但是我调试时程序执行到这一段 Custvar := DataSetProvider.ApplyUpdate()就报错,不知道为什么?
请高手帮忙解决;
注:
function HandleError(E);的代码如下
if not (E is EDBEngineError) then
begin
ADOErrors := ADOConnection.Errors;
for i := 0 to ADOErrors.Count - 1 do
begin
ADOError := ADOErrors.Item[i];
Result := ADOError.Description;
end;
end;
为截获ADO的错误,因为我的DataSetProvider的DataSet为ADO。
上面的错误跟HandleError无关,主要的问题是明明有错误发生Except中的代码却不执行>??????下面我会将我的整个程序的处理过程跟大家解释一下,我不想在DataSetProvider的OnUpdateError里写东西。
解决方案 »
- 警惕!!!易语言太厉害了。
- form1中有个listview,想按button按钮执行listview的onSelectItem事件处理程序?
- 今天d7无法运行:Borland License Information found,
- 简单的问题,急!!
- 主从结构问题
- 天太热了,请大家来喝点可乐,呵呵
- 我想问一下:在DELPHI中,如何连接数据库SQL SERVER 2000?
- dxDBTreeView DragDropTreeNode 报错!!!
- 人穷的时候,http://www.zsgt.8u8.com/gushi.htm,别进来,因为只有标题。
- 我想在运行一个表单时, 鼠标变成漏斗形的,要怎么做?
- help~!
- 估计没多少人会。Corba问题。
begin
SMDataModule.BeginTrans; //为ADOConnection.BeginTransction,启动ADO的事物处理
try
DoApplyUpdates(CurVar,ProviderName); //注意这个地方可能发生异常,在这个地方发生异常以后,将会终止此调用中所有动作,而转到except去执行。也就是,当你的 doapplyUpdates函数中发生异常之后,doapplyupdates函数的所有动作都被终止,那么里面的except当然不被执行!你可以把except修改为finally尝试一下!
SmDataModule.CommitTrans;
except
SmDataModule.RollTrans;
end;
end;
DoApplyUpdate代码如下:
begin
try
if not VarIsNull(CustVar) then
begin
CustVar := DsProvider.ApplyUpdates(CustVar,0,ErrCount);
if ErrCount > 0 then
SysUtils.Abort;
end;
except
on E: exception do
raise Exception.Create(SmDataModule.GetErrorInfo(E));//抛出异常,由客户端调用ApplyUpdate时,可以截获
end;
end;
SmDataModule.GetErrorInfo(E)代码如下: //为截获ADO的错误,
var
ADOErrors: Errors;
ADOError: Error;
i: integer;
begin
if not (E is EDBEngineError) then
begin
ADOErrors := ADOConnection.Errors;
for i := 0 to ADOErrors.Count - 1 do
begin
ADOError := ADOErrors.Item[i];
Result := ADOError.Description;
end;
end;
end;