当前位置:主页>销售管理软件> 列表

关于异常的问题(不知道这个问题太难还是太简单,竟然没有人回

销售管理软件版1楼: 想问大家一个问题,有一张表结构如下
code name (code 为PK)
0001 张三
0002 小名
现在我想向表中插入数据,使用TClientDataSet控件
插入一行数据: 0001 李明 程序如下
ClientDataSet.open
ClientDataSet.append;
.....填入数据
......保存
try
ADOConnection.BeginTrans;
ClientDataSet.ApplyUpdates(0);
ADOConnection.CommitTrans;
except
on E:exception do
begin
ADOConnection.RollbackTrans;
showmessage(E.Message);
end;
end;
我插入的数据主键是重复的阿,我在调试时会有错误信息,但直接运行exe文件时无法捕捉到异常啊?

2楼: try
Begin

End;
Except
Begin

End;
End; 如进销存表格

3楼: 楼上的说法好象无效啊

4楼: 需要在中间层触发异常,才会被客户端捕捉到

5楼: procedure TForm1.Button2Click(Sender: TObject);
var
sqlstr : String;
begin
try
ADOConnection1.BeginTrans;
sqlstr := '' insert into admin(adminid, name) values(''''01'''', ''''aaa'''') '';


ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.ExecSQL;
ADOConnection1.CommitTrans;
except
on E:exception do
begin
ADOConnection1.RollbackTrans;
showmessage(E.Message);
end;
end;

end;

同样的程序运行exe和调试时报同样的错~!建议楼主再仔细看看数据。

6楼: 嗯, 关注!

销售管理软件版7楼: 有点不清楚兄弟你的程序的架构是怎么样的,是三层的吗?
如果是三层的话,那么在TClientDataSet的OnReconcileError事件中可以知道是发生了什么错误,另外DataSetProvide自己会起事务、回滚事务不用你来处理事务。

8楼: kkkchenA兄我没有用三层,算是两层啊
使用了一个TADOQuery---〉TDataSetProvider——〉TClientDataSet

9楼: 应该是运行期的时候TDataSetProvider把错误截获了,所以在运行期的时候你截获不了错误。相信在TClientDataSet的OnReconcileError事件里面应该可以对你的错误进行处理。

10楼: 对于kkkchenA的说法是正确的