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语句,第一条是查找某条记录是否存在,第二条是在存在的基础上把需要的值取出来.现在具体执行下来的结果是:第一次查询是成功的,第二次取数据查询的时候,记录没有查出来.请问这是什么原因?(两次查询用的是同一个连接) |