我在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;