Access2003,Win Xp Sp2,Delphi7,Ado连接
在Access环境的查询里可以查询到正确的结果,Sql语句一样;
动态参数的变化:Access里使用*+数据+*,Delphi为%+数据+%;
Sql语句为
SELECT *
FROM EatBill
WHERE BillID like :pBillID and DeskName like :pDeskName and (DeskID in (select DeskID from EatDeskFile where DeskClassID like :pDeskClass )) and (BillSat in (select StaID from EatBillSat where StaID like :pBillSat ))
ORDER BY BillID;
使用Adoquery;
没有报错,奇怪的是我show了参数名和对应的值均没有错
当时查询结果确是按照
billid的查询条件和(DeskID对换了
DeskName 的查询条件和(BillSat对换了
就是明明输入的查询条件是billid 的值,查出的结果是满足(DeskID的数据;
百思不得其解!
在Access环境的查询里可以查询到正确的结果,Sql语句一样;
动态参数的变化:Access里使用*+数据+*,Delphi为%+数据+%;
Sql语句为
SELECT *
FROM EatBill
WHERE BillID like :pBillID and DeskName like :pDeskName and (DeskID in (select DeskID from EatDeskFile where DeskClassID like :pDeskClass )) and (BillSat in (select StaID from EatBillSat where StaID like :pBillSat ))
ORDER BY BillID;
使用Adoquery;
没有报错,奇怪的是我show了参数名和对应的值均没有错
当时查询结果确是按照
billid的查询条件和(DeskID对换了
DeskName 的查询条件和(BillSat对换了
就是明明输入的查询条件是billid 的值,查出的结果是满足(DeskID的数据;
百思不得其解!
解决方案 »
- TTreeView节点拖动的问题.
- 怎样对填充DBGrid的同时对其中的数据进行统计呢?
- 哪里有InstallShield6.22下载?肯定给分!不够再加!!
- 想用delphi做个语音聊天软件.请大侠给点建议.
- 远程数据模块中添加的接口方法应当用 safecall 还是 stdcall 调用方式?
- 如何安装fastreport2.5到delphi6中?
- 各位大大请问如何获取本地连接的信息啊?
- 高难度!有没有把utf-8转为iso-8859-1的函数或是算法?(用DELPHI写组件完成)
- 欲哭无泪啊!!!!!!!!!!11
- 大家帮忙看一下!!这个字符指针该怎么释放???或者说不用释放!!
- [求助]如何定位类似INI文件里的,OPEN=SETUP.EXE?
- 在双方通过VOIP进行通话时,我如何播放一个语音文件,能让对方听到
With PubDataMode.ADOQueryTmp Do
Begin
Active:=False; //读取报表查询条件
SQL.Clear ;
Parameters.Clear ;
SQL.Text :=RepSerSql;
End; //打开报表查询条件
With PubDataMode.ADOQueryshow Do
Begin
Active:=False; //读取报表查询条件
SQL.Clear ;
SQL.Text :='select * from BaseRepQuery Where RepID like :pOpenRepID order By ViewOrder';
Parameters.ParamByName('pOpenRepID').Value :=OpenRepID;
Active :=True ; While Not eof Do
Begin
PParaName := FieldByName('QueryName').Asstring;
Case StrToInt(FieldByName('FieldClassID').Asstring) Of
1,4,5,6: // 字符
PubDataMode.ADOQueryTmp.Parameters.ParamByName(PParaName).Value :='%'+FieldByName('QTextVal').AsString+'%';
2: PubDataMode.ADOQueryTmp.Parameters.ParamByName(PParaName).Value :=FieldByName('QNumVal').Value ;
3: PubDataMode.ADOQueryTmp.Parameters.ParamByName(PParaName).Value :=FieldByName('QBoolVal').AsBoolean ;
7: PubDataMode.ADOQueryTmp.Parameters.ParamByName(PParaName).Value :=FieldByName('QDateVal').AsDateTime ;
Else End;
showmessage(PubDataMode.ADOQueryTmp.Parameters.ParamByName(PParaName).Value+PubDataMode.ADOQueryTmp.Parameters.ParamByName(PParaName).Name);
next;
End;
End;
showmessage(PubDataMode.ADOQueryTmp.SQL.Text );
PubDataMode.ADOQueryTmp.Open ; // 查询报表这是赋值的语句;
发现问题的原因,默认的参数顺序合Sql语句中参数出现的顺序一样;parameters[i]既按0,1,2,3排列;但是系统取参数时,先取子查询的参数,我这里取参数的顺序变为了2,3,0,1。
造成数据查询条件错乱。随意更改了顺序就可以了。
但是我不明白为什么取参数会出错,因为我没有改代码,只调整了Sql语句的顺序。看起来这两条是完全一样的。我不知道这是Ado,Delphi,Access中那个错了。
Access的查询是按先取子查询的参数,估计Delphi传则按出现顺序传。
有知道原因的人请指教。SELECT *
FROM EatBill
WHERE (DeskID in (select DeskID from EatDeskFile where DeskClassID like :pDeskClass )) and (BillSat in (select StaID from EatBillSat where StaID like :pBillSat )) and (BillID like :pBillID) and (DeskName like :pDeskName)
ORDER BY BillID