起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: liso

[请求]在一个事务中多次更新同一记录的问题**

[复制链接]
 楼主| 发表于 2008-3-11 15:58:46 | 显示全部楼层
我重新改了一下代码
lQueryex := TDbCommand.CreateConnect(DSB_INV_BILL_DETAIL.DataSet);
             ls_sql := 'SELECT COUNT(EBD_AUTOIN) lcount FROM EXP_BILL_DETAIL WHERE EBD_MAINID = ' + QuotedStr(ls_new_billid) +
                       ' AND EBD_CONTRACT = ' + QuotedStr(ls_new_contract) + ' AND EBD_PAYMENT_FLAG = ' + QuotedStr(ls_new_paymentflag) ;
             lQuery := TDbCommand.OpenSqlex(ls_sql, lQueryex);
             li_count := 0;
             while not lQuery.Eof do
             begin
               li_count := lQuery.FieldByName('lcount').AsInteger;
               lQuery.Next;
             end;
             lQuery.EmptyDataSet;
             li_count := 1;
             If li_count = 1 Then
             begin
               ls_sql := 'SELECT (EBD_ServiceCharge - EBD_InvServiceCharge) EBD_ServiceCharge, ' +
                       '(EBD_FitmentCharge - EBD_InvFitmentCharge) EBD_FitmentCharge, ' +
                       '(EBD_OtherExpenses - EBD_InvOtherExpenses) EBD_OtherExpenses, ' +
                       '(EBD_MagrofCardFee - EBD_InvMagrofCardFee) EBD_MagrofCardFee, ' +
                       '(EBD_VacantRent - EBD_InvVacantRent) EBD_VacantRent, ' +
                       '(EBD_TotalAmount - EBD_InvTotalAmount ) EBD_TotalAmount, ' +
                       ' EBD_STATUS ' +
                       ' FROM EXP_BILL_DETAIL WHERE EBD_MAINID = ' + QuotedStr(ls_new_billid) +
                       ' AND EBD_CONTRACT = ' + QuotedStr(ls_new_contract) + ' AND EBD_PAYMENT_FLAG = ' + QuotedStr(ls_new_paymentflag) +
                       ' AND EBD_PAYMENT_FLAG = ' + QuotedStr(ls_new_paymentflag);

               lQueryex := TDbCommand.CreateConnect(DSB_INV_BILL_DETAIL.DataSet);
               lQuery := TDbCommand.OpenSqlex(ls_sql, lQueryex);

发现每次 执行TDbCommand.OpenSqlex(ls_sql, lQueryex); 后下次如果还是要执行
  TDbCommand.OpenSqlex(ls_sql, lQueryex);一定要再对lQueryex := TDbCommand.CreateConnect(DSB_INV_BILL_DETAIL.DataSet); 就是一定要把连接再重新负值给lQueryex的连接,
不知道这样还算不算一个事务
回复 支持 反对

使用道具 举报

发表于 2008-3-11 17:03:10 | 显示全部楼层
可以不在赋值,你Close一下lQueryex 就可以了
回复 支持 反对

使用道具 举报

发表于 2008-3-11 17:03:11 | 显示全部楼层
可以不再赋值,你Close一下lQueryex 就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 17:14:06 | 显示全部楼层
好,我试一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 19:01:10 | 显示全部楼层
运行的时候 FQuery.Open; 的时候报错
代码如下
static function TDBCOMMAND.OpenSqlex(FSql:string;FQuery:TQuery):TQuery;
begin
  FQuery.Close;
  FQuery.CommandText:=FSql;
  try
    FQuery.Open;
    Result:=FQuery;
  except
    Result:=nil;
    FQuery.Free;
  end;
end;

这个是什么原因造成的

baocuo.jpg

9.97 KB, 下载次数: 145

回复 支持 反对

使用道具 举报

发表于 2008-3-12 09:05:21 | 显示全部楼层
看看服务端日志,是否有错误
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 09:28:46 | 显示全部楼层
服务端报的错!

baocuo.jpg

81.98 KB, 下载次数: 150

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 09:44:51 | 显示全部楼层
日志文件

catalina.2008-03-11.rar

1.1 KB, 下载次数: 80

回复 支持 反对

使用道具 举报

发表于 2008-3-12 13:38:12 | 显示全部楼层
看错误是服务端版本跟客户端版本不一致造成的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 13:45:04 | 显示全部楼层
服务端和客户端都升级到2918了
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-10 06:20 , Processed in 0.046282 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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