在查询的条件(where)中,可否使用变量?(30分)

  • 主题发起人 yaminboy
  • 开始时间
Y

yaminboy

Unregistered / Unconfirmed
GUEST, unregistred user!
如:
query3.close;
query3.sql.clear;
query3.sql.add('select rybm,ksn,jfys,bngrjfbz from dw_grzh dw_grzh');
query3.sql.add('where rybm=stbm');
query3.sql.add('Order by ksn');
query3.open;
其中('where rybm=stbm'):stbm是前面语句中的变量,我的执行不能进行。

另外:
如何对上面查询后的多条记录进行循环,要求循环到最后一条时要退出循环。
此句可能不对,while not query3.Eof do begin
          ........
end;
仅有30大元奉上,还望大虾指点。?????
 
query3.sql.add('where rybm=:stbm');
Params.ParamsByName('stbm').value:=stbm;
以上是ADO连接的语句,其它类似.

Query3.First;
while not Query3.eof do
begin
...
Query3.next;
end;

 
提示 'Query3:'字段'stbm'类型未知' 是什么意思?

在前面我已经定义过了:stbm:=query1.Fields[0].AsString;
 
这样试试
Query3.ParamsByName('stbm').value:=query1.Fields[0].AsString;
 
可以用Format格式化呢。
用 +
用参数
 
更正如下:
query3.close;
query3.sql.clear;
query3.sql.add('select rybm,ksn,jfys,bngrjfbz from dw_grzh dw_grzh');
query3.sql.add('where rybm=:stbm');//加了个冒号才是参数,否则是字段
query3.sql.add('Order by ksn');
Query3.ParamsByName('stbm').value:=query1.Fields[0].AsString;//给参数赋值
query3.open;
 
作如下修改:肯定可以
query3.close;
query3.sql.clear;
query3.sql.add('select rybm,ksn,jfys,bngrjfbz from dw_grzh dw_grzh');
query3.sql.add('where rybm=stbm');改為query3.sql.add('where rybm='''+stbm+'''')
query3.sql.add('Order by ksn');
query3.open;

Query3.First;
while not Query3.eof do
begin
...
Query3.next;
end;


 
query3.close;
query3.sql.clear;
query3.sql.add('select rybm,ksn,jfys,bngrjfbz from dw_grzh dw_grzh');
query3.sql.add('where rybm='''+stbm+'''');
query3.sql.add('Order by ksn');
query3.open;
 
所以现在我做以下改进,但这段程序有问题,谁能帮我看看!

while not query3.Eof do begin

inksn:=query3.ParamByName(''ksn'').Asinteger;
if inttostr(inksn)=inttostr(year) then begin
Cells[lin,3].Value :=query3.ParamByName('jfys').Asinteger;
Cells[lin,6].Value :=query3.ParamByName('bngrjfbz').Ascurrency;
inc(lin);
inc(year);
end;
query3.Next;
end;
 
接受答案
 
多人接受答案了。
 
顶部