起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 366|回复: 16

【结帖】关于数据库事务的应用

[复制链接]
发表于 2009-4-15 09:39:34 | 显示全部楼层 |阅读模式
论坛里与事务相关的贴子我已经基本都看过了。但是在实际应用中发现用以下的方式写的代码会在执行查询时报错。

var
   qry, qryIn: TQuery;
   lHandle: TTransactionHandle;
begin
  qry := TQuery.Create(self);
  qryIn := TQuery.Create(self);
  try
    qry.Connection := DataSetBrokerInDepotBill.DataSet.Connection; //DataSetBrokerInDepotBill在信息层声明,通过ConnectionString连接数据库。
  qryin.Connection := DataSetBrokerInDepotBill.DataSet.Connection;
  lHandle := DataSetBrokerInDepotBill.DataSet.Connection.Transaction.Start(True);
    try
      qry.CommandText := 'select distinct jizu_unit, machine_sort_id, ' +
        ' project_id, is_installed, SubjectID, NeedTaxRate ' +
        ' from in_depot_bill ' +
        ' where type = 2 and coalesce(Offseted, 0) = 0 and ' +
        '   contract_id = ' + IntToStr(AContractID);
      qry.Open;
      while not qry.Eof do
      begin
         qryIn.CommandText := 'Insert Into in_depot_bill (...) values (...)'; //实际内容忽略
         qryIn.Execute;
         qry.Next;
      end;
      
      with DataSetBrokerInDepotBill.DataSet do
      begin
        Edit;
        FieldByName('Offseted').AsInteger := 1;
        Post;
        ApplyUpdates;
        Connection.Transaction.Commit(lHandle);
      end;
    except
      On E:Exception do
      begin
        DataSetBrokerInDepotBill.DataSet.Connection.Transaction.RollBack(lHandle);
        jsDialogs.ShowWarning(E.Message, Caption);
        exit;
      end;
    end;
  finally
    qry.Free;
    qryIn.Free;
  end;
end;


首次执行有时不会报错,但不关闭程序的情况下,再次执行到第一个查询语句就会报错了。是后台Tomcat报出的错误。具体错误信息“---------------------------
X3 Studio
---------------------------
运行系统初始化的时候发生异常:java.lang.Exception

类型:Exception。
---------------------------
确定   
---------------------------”


我想问的是:是不是事务的句柄需要释放,或者有不该释放的被释放掉了?
回复

使用道具 举报

发表于 2009-4-15 10:15:34 | 显示全部楼层
代码呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 10:16:50 | 显示全部楼层
我现在的X3版本是2644.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 13:23:09 | 显示全部楼层
不知道能否给我回复?
回复 支持 反对

使用道具 举报

发表于 2009-4-16 10:48:00 | 显示全部楼层
楼主,你把你的完整资源导一个上来,我们测试看下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-16 11:13:31 | 显示全部楼层
涉及的单元太多,操作较复杂,导出来给你反倒费事。只要按这个思路随便写几个查询,做个表的更新就可以重复出来了。
回复 支持 反对

使用道具 举报

发表于 2009-4-16 11:14:36 | 显示全部楼层
楼主,最好是你做一个简单例子,否则怕测试的过程和结果跟楼主的不一定一样。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-16 13:23:21 | 显示全部楼层
以下是代码资源及测试数据库备份

facilityinout.rar

558.46 KB, 下载次数: 99

回复 支持 反对

使用道具 举报

发表于 2009-4-16 14:50:47 | 显示全部楼层
好。我们这边测试一下。
回复 支持 反对

使用道具 举报

发表于 2009-4-16 15:31:08 | 显示全部楼层
楼主,你给的这个资源不全呀。
能不能这样:你就做一个简单例子,能说明你的这个问题的。然后传上来我们重现看一下。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 06:55 , Processed in 0.045649 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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