起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 440|回复: 0

事务提交出错

[复制链接]
发表于 2011-3-31 09:12:26 | 显示全部楼层 |阅读模式
版本:2144
代码如下:
static function TProgram.CommitData(AHeaderDs, ADetailDs, AListDs: TSQLDataSet; ASQLs: string): Boolean;
var
  lQuery: TQuery; lSQLs, lSQL: string; //用于执行SQL语句
  lTransHandle: TTransactionHandle;
begin
  //先POST
  if AHeaderDs.State in DB.dsEditModes then
    AHeaderDs.Post;
  if (ADetailDs <> nil) and (ADetailDs.Active) and (ADetailDs.State in DB.dsEditModes) then
    ADetailDs.Post;
  if (AListDs <> nil) and (AListDs.Active) and (AListDs.State in DB.dsEditModes) then
    AListDs.Post;

  lSQLs := ASQLs;  Result := False;
  lQuery := TQuery.Create(nil);
  try
    lQuery.Connection := AHeaderDs.Connection;
    with AHeaderDs.Connection.Transaction do
    begin // Start 后面的参数是指事务的启动方式,分为立即方式和非立即方式,建议使用False,非立即方式
      lTransHandle := Start(False);    //启动事务
      try // 提交数据
        AHeaderDs.ApplyUpdates(False);
        if (ADetailDs <> nil) and (ADetailDs.Active) then
          ADetailDs.ApplyUpdates(False);
        if (AListDs <> nil) and (AListDs.Active) then
          AListDs.ApplyUpdates(False);
        if ASQLs > ' ' then
        begin
          repeat
            lSQL := TCommon.GetDelStr(lSQLs, ';', 'L');
            lQuery.CommandText := lSQL;
            lQuery.Execute;
          until lSQLs = '';
        end;
        Commit(lTransHandle);     //  结束
        Result := True;
      except
        on E: Exception do
        begin
           Rollback(lTransHandle);    //回滚事务
          {if AListDs <> nil then
            AListDs.CancelUpdates;
          if ADetailDs <> nil then   //利用
            ADetailDs.CancelUpdates;}
          jsDialogs.ShowError('保存数据提交失败:' + #13#10 + E.Message, '提示');
        end;
      end;
    end;
  finally
    lQuery.Free;
  end;
end;


出现问题:两个数据集一起提交,同时参数 ASql中带有一个insert 语句,很多情况下程序运行都是正常,偶尔会出现 保存数据提交失败:执行更新数据的时候出现错误:DBX Error:No Mapping for Error Code Found
前两个数据集已经提交数据了,但是insert语句没有能够成功插入,为什么出错了没有回滚?
会是什么原因呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 13:11 , Processed in 0.040014 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表