在QueryRange里面慎用strfmt拼出来的条件

    gStartAmount = -40000;
    gEndAmount = -1;
使用下面的语句
    gStrAmountRangeCredit =  strfmt("%1..%2",gStartAmount,gEndAmount);
    gStrAmountRangeDebit =  strfmt("%1..%2",-1*gEndAmount,-1*gStartAmount);

    Qbds.addRange(fieldnum(LedgerTrans,AmountCur)).value(gStrAmountRangeCredit);
拼出来的SQL居然是下面的:
NAME:
 Qbds
VALUE:
 SELECT * FROM LedgerTrans WHERE ((TransDate>={ts '2009-07-01 00:00:00.000'} AND TransDate<={ts '2009-07-31 00:00:00.000'})) AND ((AmountCur = -4.E1 OR AmountCur>=1.E0 AND AmountCur<=-1.E0)) AND ((Crediting = 0)) JOIN * FROM LedgerJournalTable WHERE LedgerTrans.JournalNum = LedgerJournalTable.JournalNum
TYPE:
 QueryBuildDataSource
无语!!

调整为下面的写法:
    gStrAmountRangeCredit =  num2str(gStartAmount,10,2,1,0) + ".."+ num2str(gEndAmount,10,2,1,0);//strfmt("%1..%2",gStartAmount,gEndAmount);
    gStrAmountRangeDebit =  num2str(-1*gEndAmount,10,2,1,0) + ".."+ num2str(-1*gStartAmount,10,2,1,0);//strfmt("%1..%2",-1*gEndAmount,-1*gStartAmount);

Qbds.addRange(fieldnum(LedgerTrans,AmountCur)).value(gStrAmountRangeCredit);
拼出来的语句是正确的:
NAME:
 Qbds
VALUE:
 SELECT * FROM LedgerTrans WHERE ((TransDate>={ts '2009-07-01 00:00:00.000'} AND TransDate<={ts '2009-07-31 00:00:00.000'})) AND ((AmountCur>=-4.00001E5 AND AmountCur<=-1.E0)) AND ((Crediting = 0)) JOIN * FROM LedgerJournalTable WHERE LedgerTrans.JournalNum = LedgerJournalTable.JournalNum
TYPE:
 QueryBuildDataSource

转载于:https://www.cnblogs.com/lingdanglfw/archive/2009/07/28/1533286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值