菜鸟求一条sql语句!!! (118分)

  • 主题发起人 wanglongc
  • 开始时间
W

wanglongc

Unregistered / Unconfirmed
GUEST, unregistred user!
菜鸟想动态查询'单位情况'这个表里的情况,查询listview1里的单位名称,当listview1里
的记录有一个时还比较好查,我的sql语句是
sql:='select * from 单位情况 where 单位名称=:mc1';
adoquery1.Close;
adoquery1.sql.clear;
adoquery1.SQL.add(sql);
adoquery1.Parameters.ParamValues['mc1']:=ListView1.Items[0].Caption;
adoquery1.open;
这样我的dbgrid1就有一条记录,
当listview1的内容有5个时,我是这么写的:

sql:='select * from 单位情况 where 单位名称=:mc1 or 单位名称=:mc2 or 单位名称=:mc3 or 单位名称=:mc4 or 单位名称=:mc5 ';
adoquery1.Close;
adoquery1.sql.clear;
adoquery1.SQL.add(sql);
adoquery1.Parameters.ParamValues['mc1']:=ListView1.Items[0].Caption;
if ListView1.Items.Count>1 then
begin
adoquery1.Parameters.ParamValues['mc2']:=ListView1.Items[1].Caption;
end
else
begin
adoquery1.Parameters.ParamValues['mc2']:='';
end;

if ListView1.Items.Count>2 then
begin
adoquery1.Parameters.ParamValues['mc3']:=ListView1.Items[2].Caption;
end
else
begin
adoquery1.Parameters.ParamValues['mc3']:='';
end;

if ListView1.Items.Count>3 then
begin
adoquery1.Parameters.ParamValues['mc4']:=ListView1.Items[3].Caption;
end
else
begin
adoquery1.Parameters.ParamValues['mc4']:='';
end;

if ListView1.Items.Count>4 then
begin
adoquery1.Parameters.ParamValues['mc5']:=ListView1.Items[4].Caption;
end
else
begin
adoquery1.Parameters.ParamValues['mc5']:='';
end;
adoquery1.Open;
当listview1里有100条记录,菜鸟可怎么办啊?????????哪位大侠有简便方法。
 
select * from 单位情况 where 单位名称 in (mc1,mc2,mc3,mc4,mc5)
 
'select * from 单位情况 where 单位名称 in :mc1'
s:string;
s:='('+ListView1.Items[1].Caption+','+ListView1.Items[2].Caption+','..+')'
 
如果想把所有记录都查出来 何必加条件呢

select * from 单位情况
 
可以用一个循环么?
办法一 该循环里面对每一个名称进行配置SQL语句
办法二 象搂上的哥们说的,不加条件,然后进行FIND语句,这个好象快点

 
SayForever的方法没错啊
 
select * from 单位情况 where 单位名称 in (mc1,mc2,mc3,mc4,mc5)
sql := 'select * from 单位情况 where 单位名称 in';
for i:=0 to ListView1.Items.count-1 do
str := str + ListView1.Items.Caption + ',';
Delete(str,length(str),1);
sql := sql + str;
========
其实就是将 SayForever, 的语句。
 
菜鸟直接在adoquery的sql属性里运行这条语句都不行,语法是不是有问题?
select * from 单位情况 where 单位名称 in 欢喜岭采油厂
 
select * from 单位情况 where 单位名称 in ('欢喜岭采油厂')
 
语法我明白了,可是还是没有简便方法。
 
我也是菜鸟,看看好使不?
var
sql:string;
i:integer;
str:string;
begin

sql := 'select * from 单位情况 where 单位名称 in ';
str:='(';
for i:=0 to ListView1.Items.count-1 do
str := str +''''+ListView1.Items.Caption +''''+ ',';
Delete(str,length(str),1);
str:=str+')';
sql := sql + str;

adoquery1.Close;
adoquery1.sql.clear;
adoquery1.SQL.add(sql);
adoquery1.Open;
 
多人接受答案了。
 
顶部