1、在编写三层程序时发现一个问题,找不到问题所在,请各位高手帮忙。
服务器端一个adodataset,其commandtext如下:
select wb.billno, wb.billname, wb.unit, wb.conprice,
ww.conqty contqty, nvl(compqty,0), ww.conqty*wb.conprice contsum,
nvl(compqty*wb.conprice,0) compsum,
round(decode(ww.conqty,0,null,compqty*100/ww.conqty)) compercent,
ww.billcode, ww.workcode, ww.projcode
from tncost.wbswork ww, tncost.workbills wb,
(select billcode compbill, workcode compwork, projcode compproj,
sum(conqty) compqty
from tncost.wbsdaily
group by billcode, workcode, projcode)
where ww.projcode = wb.projcode
and ww.billcode = wb.billcode
and ww.projcode = compproj(+)
and ww.workcode = compwork(+)
and ww.billcode = compbill(+)
and ww.projcode = :pprojcode
and ww.workcode = :pworkcode
定义两个参数:pprojcode和pworkcode
客户端动态修改参数,然后显示再dbgrid中,发现有时有数据有时没有。但设置断点
得到参数值后在sql explorer中查询却有数据。
2、昨天还发现一问题,折腾半天才发现,大家注意:
在服务器端设置查询谋字段为其它两字段乘积,客户端显示时老是提示越界。察看clientdataset和dbgrid均无问题,后来在服务器端adoquery中将field添加后发现精度竟然自动设为225,改为32后问题解决。
服务器端一个adodataset,其commandtext如下:
select wb.billno, wb.billname, wb.unit, wb.conprice,
ww.conqty contqty, nvl(compqty,0), ww.conqty*wb.conprice contsum,
nvl(compqty*wb.conprice,0) compsum,
round(decode(ww.conqty,0,null,compqty*100/ww.conqty)) compercent,
ww.billcode, ww.workcode, ww.projcode
from tncost.wbswork ww, tncost.workbills wb,
(select billcode compbill, workcode compwork, projcode compproj,
sum(conqty) compqty
from tncost.wbsdaily
group by billcode, workcode, projcode)
where ww.projcode = wb.projcode
and ww.billcode = wb.billcode
and ww.projcode = compproj(+)
and ww.workcode = compwork(+)
and ww.billcode = compbill(+)
and ww.projcode = :pprojcode
and ww.workcode = :pworkcode
定义两个参数:pprojcode和pworkcode
客户端动态修改参数,然后显示再dbgrid中,发现有时有数据有时没有。但设置断点
得到参数值后在sql explorer中查询却有数据。
2、昨天还发现一问题,折腾半天才发现,大家注意:
在服务器端设置查询谋字段为其它两字段乘积,客户端显示时老是提示越界。察看clientdataset和dbgrid均无问题,后来在服务器端adoquery中将field添加后发现精度竟然自动设为225,改为32后问题解决。
什么意思?
dmData.cdsWorkCom.Close;
dmData.cdsWorkCom.Params.ParamByName('pprojcode').AsString:=dmData.cdsWBS.FieldByName('projcode').AsString;
dmData.cdsWorkCom.Params.ParamByName('pworkcode').AsString:=dmData.cdsWBS.FieldByName('workcode').AsString;
dmData.cdsWorkCom.Open;
后来发现如果在客户端直接生成sql语句则没有问题,不明白?