我在Grid中输入了两条编号相同的记录,我在存储过程的事务控制中会扑捉到该错误会返回错误号12,在点保存的时候程序确实给我提示"重复纪录"的信息,而当我在继续点保存或删除了Grid中的重复纪录后在点保存,跟踪发现他给我报错误号10(10错误号是无明细数据,我自己在存储过程中的事务中定义的),基于这个角度考虑:事务未执行成功,数据在内存中的数据会丢失.
请问是这样吗?请个位大虾给点建议:
下面是保存数据的相关代码:
try
frmData.adoConn.BeginTrans;
query.UpdateBatch(arAll);
adoStoredProc.ProcedureName:='sp_shpdj';
adoStoredProc.Parameters.Refresh;
adoStoredProc.Parameters.ParamByName('@hzStr').Value:=HzStr;
adoStoredProc.Prepared;
adoStoredProc.ExecProc;
ErrorCode:=adoStoredProc.Parameters.ParamByName('@RETURN_VALUE').Value ;
if ErrorCode=510 then
begin
MessageDlg('请填写明细!',mtInformation,[mbOk],0);
frmData.adoConn.RollbackTrans;
end; if (ErrorCode=512) or (ErrorCode=513) then
begin MessageDlg('保存失败,税票号码重复,请检查!',mtInformation,[mbOk],0);
frmData.adoConn.RollbackTrans;
end;
if ErrorCode=511 then
begin MessageDlg('保存失败,税票号码不允许为空或Null值!',mtInformation,[mbOk],0);
frmData.adoConn.RollbackTrans;
end;
if ErrorCode=0 Then
begin
frmData.adoConn.CommitTrans;
tmpQuery:=TADOQuery.Create(nil);
tmpQuery.Connection:=frmData.adoConn;
with tmpQuery do
begin
Close;
SQL.Clear;
SQL.Add('select max(shpid) shpid from shpdjhz ' ) ;
Open;
djbh:=FieldValues['shpid'];
end;
edtDjbh.Text:= djbh;
MessageDlg('保存成功!',mtInformation,[mbOk],0);
btnSave.Enabled:=false;
end; except
frmData.adoConn.RollbackTrans;
MessageDlg('保存失败! 错误代码:'+IntToStr(ErrorCode),mtInformation,[mbOk],0); end;
请问是这样吗?请个位大虾给点建议:
下面是保存数据的相关代码:
try
frmData.adoConn.BeginTrans;
query.UpdateBatch(arAll);
adoStoredProc.ProcedureName:='sp_shpdj';
adoStoredProc.Parameters.Refresh;
adoStoredProc.Parameters.ParamByName('@hzStr').Value:=HzStr;
adoStoredProc.Prepared;
adoStoredProc.ExecProc;
ErrorCode:=adoStoredProc.Parameters.ParamByName('@RETURN_VALUE').Value ;
if ErrorCode=510 then
begin
MessageDlg('请填写明细!',mtInformation,[mbOk],0);
frmData.adoConn.RollbackTrans;
end; if (ErrorCode=512) or (ErrorCode=513) then
begin MessageDlg('保存失败,税票号码重复,请检查!',mtInformation,[mbOk],0);
frmData.adoConn.RollbackTrans;
end;
if ErrorCode=511 then
begin MessageDlg('保存失败,税票号码不允许为空或Null值!',mtInformation,[mbOk],0);
frmData.adoConn.RollbackTrans;
end;
if ErrorCode=0 Then
begin
frmData.adoConn.CommitTrans;
tmpQuery:=TADOQuery.Create(nil);
tmpQuery.Connection:=frmData.adoConn;
with tmpQuery do
begin
Close;
SQL.Clear;
SQL.Add('select max(shpid) shpid from shpdjhz ' ) ;
Open;
djbh:=FieldValues['shpid'];
end;
edtDjbh.Text:= djbh;
MessageDlg('保存成功!',mtInformation,[mbOk],0);
btnSave.Enabled:=false;
end; except
frmData.adoConn.RollbackTrans;
MessageDlg('保存失败! 错误代码:'+IntToStr(ErrorCode),mtInformation,[mbOk],0); end;
解决方案 »
- Delphi的MSDN
- 在TABLE中如何删除多条记录?
- 大家请帮忙,如何在delphi中使用udl文件动态改变ado连接
- InstallShield for delphi怎么用
- 请问如何把一个treeview里的数据导入到access数据库?
- 使用QReport如何实现打印机的不换行连打?
- 我用installshield profeessional做出来的安装包,为什么要执行两次,才能把程序安装成功呢?请指点.
- 对DELPHI异常处理有经验的同志请帮忙
- 关于锁定系统功能键
- stringgrid的onrowmoved怎么用?
- 找不到vcl40.bpl文件?
- 谁能说说IDUdpServer的BINDING,BINDINGS的含义?
你看看你的标题与内容!误导别人