紧急求助:参数问题(100分)

  • 主题发起人 主题发起人 西门
  • 开始时间 开始时间
西

西门

Unregistered / Unconfirmed
GUEST, unregistred user!
问题如下:
在TQuery的SQL属性内容如下
select * from khk where floor in (:floor)
其中 floor 为integer型字段 问题是现在这种写法floor只能赋一个值
请问如何使floor存在多个值,以便达到类似select * from khk where floor in(1,2,3,4)的效果

 
如果floor的值固定,就多放几个,否则就从数据库中查。
 
select * from khk where floor>:f1 and floor<:f2
 
select * from khk where floor=:f1 or floor=:f2 or floor=:f3 ...
若用 in, 动态组装SQL比较合适
 
conse sql : String ='select * from khk where floor in (%s)'

query.Close;
query.sql.text :=Format(sql,['1,2,3,6']) ;
query.Open;
 
多谢诸位,但问题还没有解决,我再把没说清楚的地方重说一遍
floor的值不固定,也没有顺序,值的个数也有变化
 
Query1.Params[0].AsString := '1,2,3,4'
 
还没明白我的意思,我想通过floor达到如下效果 再举几个例子
select * from khk where floor in(1,2,3,4)
select * from khk where floor in(1,5,6)
select * from khk where floor in(2,3)
select * from khk where floor in(4)
select * from khk where floor in(1,2,3,4,9)
floor的值不固定,也没有顺序,值的个数也有变化
 
不能用unite连接两个表吗?

或者先用一个StringList存储:floor,然后就可以知道count,做一个循环。OK?
 
select * from khk where floor in :f
然后一个一个负值吧
 
type aInteger: set of integer;
aIntset:aInteger;
aIntset:=(1,2,3,4,5,6);
floor in aIntset;

does this work??
 
floor是个给出的参数(想赋什么值就赋什么值),不是表

如果按我开始所写的,floor只能赋一个值,赋多个值就报错,你想1,2,3这样的值不是整型
 
你为什么不自己拼SQL语句呢如下:
var
strTemp :String;//该变量用于存放你的列表值
begin
strTemp := '1,3,5,6,7';
...
SQL.Text := 'select * from khk where floor in (' + strTemp + ')';
....
end;

这样是不是就OK了。

 
将参数Floor定义为String;
若要查询Floor 为1,2,3时,
将参数赋值为Floor := '1,2,3';
 
这样看看行不行?
var
floor: array of integer;
i: integer;
begin
Setlength(floor,xxx);
SQLString := 'Select * from khk where';
for i := low(floor) to high(floor)-1 do
begin
SQLString := SQLString + format('floor =:%d or',[floor]);
end;
SQLString := SQLString + format('floor =:%d',[floor]);
end;
 
如果可以用table的话,在table里的onfilterRecord事件里写,也可以这样:

Accept := accept or (table1['floor']=floor);

当然,效率没有sql语句来得高。
 
faint! 刚才的SQL语句,应该把and 改成 or
 
后退
顶部