where子句中多次用同一变量的问题(100分)

  • 主题发起人 主题发起人 sweidong
  • 开始时间 开始时间
S

sweidong

Unregistered / Unconfirmed
GUEST, unregistred user!
我用主从表(设adoquery1的datasoure为adoquery2)
adoquery2的sql:select * from a1
在adoquery1的sql中用( :a为a1表的一个字段变量)
select * from b1
where a = :a and b=1
union all
select * from b1
where a = :a and b=2
为何只得到第一条数据,而第二条为空,原因是我使用了两次变量 :a
如何解决!
 
自己合成sql语句,不用参数呗.
vStr:='select * from b1 where a = '+a+' and b=1 union all select * from b1 where a = '+a+' and b=2';
 
declare @a integer
set @a=:a
select * from b1
where a = @a and b=1
union all
select * from b1
where a = @a and b=2
 
declare @a integer
set @a=:a
对access2000无效!
 
不要用参数,直接凑sql好了。
 
可我用的是主从表,不好凑sql,变量是从另外一个表得来的;
 
select * from b1
where a = :n and b=1
union all
select * from b1
where a = :m and b=2
adoquery2.Parameters.ParamByName ('n').Value :=edit1.Text ;
adoquery2.Parameters.ParamByName ('m').Value :=edit1.Text ;
设置两个参数,两个参数复相同的值。
 
大家还不明白我的意思吗,我的变量值是从另外主表中自动赋予的,我不想用Parameters.ParamByName ('n').Value来另外赋予,我用的是主从表。
 
sweidong,
我明白你的意思。
 修改一下 adoquery2的sql:select * from a1,使一个字段变成两个。
 比如:“我的变量值是从另外主表中自动赋予的” 的字段是a
那么就写成 select a as n,a as m from ...
然后,再adoquery1:select * from b1
where a = :n and b=1
union all
select * from b1
where a = :m and b=2
 
那就不要用参数了吧。
SQL.Text:= Format('
select * from b1
where a = %0:D and b=1
union all
select * from b1
where a = %0:D and b=2', [a]);
 
谢谢各位,接受douzheng答案
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部