起步软件技术论坛-X3

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

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

[复制链接]
发表于 2008-3-4 09:17:23 | 显示全部楼层
对头
回复 支持 反对

使用道具 举报

发表于 2008-3-6 11:48:08 | 显示全部楼层
楼主请回馈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 11:02:31 | 显示全部楼层
lQueryex := TDbCommand.CreateConnect(DSB_INV_BILL_DETAIL.DataSet);
H := lQueryex.Connection.Transaction.Start(False);
try
   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);
               lQuery1 := TDbCommand.OpenSqlex(ls_sql, lQueryex);

               ldc_ServiceCharge :=  lQuery1.FieldByName('EBD_ServiceCharge').asfloat;
  lQueryex.Connection.Transaction.Commit(H);
except
     lQueryex.Connection.Transaction.Rollback(H);
    raise;
end;   


这段代码里面:是在一个事务中处理,我们用的是sqlserver数据库.
现在出现的情况是:我依次执行条sql语句,第一条是查找某条记录是否存在,第二条是在存在的基础上把需要的值取出来.现在具体执行下来的结果是:第一次查询是成功的,第二次取数据查询的时候,记录没有查出来.请问这是什么原因?(两次查询用的是同一个连接)
回复 支持 反对

使用道具 举报

发表于 2008-3-11 11:17:20 | 显示全部楼层
H := lQueryex.Connection.Transaction.Start(True);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 11:27:32 | 显示全部楼层
不是说不建议用Start(True);嘛, false和true的区别是什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 11:36:36 | 显示全部楼层
改了也没用,运行到
  ldc_ServiceCharge :=  lQuery.FieldByName('EBD_ServiceCharge').asfloat;      
这句还是报错

baocuo.jpg

9.68 KB, 下载次数: 185

回复 支持 反对

使用道具 举报

发表于 2008-3-11 13:36:04 | 显示全部楼层
看提示,说 lQuery中没有'EBD_ServiceCharge' 这个字段,那你实际上有这个字段吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 13:57:47 | 显示全部楼层
有的,我debug把后面那个sql拿出来,单独运行的时候就有1条记录
放在一起运行的时候记录没取到
回复 支持 反对

使用道具 举报

发表于 2008-3-11 15:34:42 | 显示全部楼层
放在一起?放在哪里了?
你设置断点跟踪一下,是否有地方传进去的参数,或者逻辑出问题了,
还有Query打开了吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 15:38:15 | 显示全部楼层
我可以打电话问吗,这样来回发帖也讲不清楚.您贵姓,分机多少?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 23:11 , Processed in 0.040014 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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