如何写永远为真的条件?(100分)

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

wdq

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在sql语句中写一句永远为真的条件(条件T,目的是不影响前面的查询条件
如:
with query1 do
sql.clear;
sql.add('select * from Mytable where ' + 条件1);
sql.add(条件2 + 条件3 +...+ 条件n + 条件T);
open;
end;
注:每个条件后(除了条件T)都跟随有 and ,如 条件1为 field1=234 and
 
with query1 do
sql.clear;
sql.add('select * from Mytable where ' + 条件1);
<b>
for i:=2 to t do
sql.add('and '+条件i);</b>
open;
end;

 
不太明白你的意思.不过,用为真可这样:
条件t: 1=1
1=1 可永为真,不过,不知这有何用?
 
做逐级查询时用的,是么?
pxlei的建议挺好的。
 
永远为真,那多容易呀。
只不过觉得没有什么意义似的。
如果只想在where后面加一个真,不如不要where。
 
实在看不明白要干什么,既然条件为真,就不要了呗.
 
情况如此:一个查询窗体上有多个条件等待输入,为了语句统一,我在每一个
条件后加上一个 and ,然后在最后在添一个永远为真的条件,作到不影响
查询结果。如。
条件1: field1=Dbedit1.text and
条件2: field2=Dbedit2.text and
.....
条件n: fieldn=Dbeditn.text and
最后的形成的查询条件为:
条件:条件1+条件2+...+条件n+条件T(其中条件T就是那个永远为真的条件)
我曾经试过用下面的语句但报错
where 1<>2
 
我还是不太明白你的意思,不过我的理解是这样的,
你根据若干dbedit确定查询条件,万一dbedit为空
怎么办?
wherestring:='';
wherestring:='where '
wherestring:=wherestring+'field1 like '+'%'+dbedit1.text+'%'+' and'
wherestring:=wherestring+'field2 like '+'%'+dbedit2.text+'%'+' and'
...
就算dbedit1.text='',field1 like '%%',相当于全选
 
有意思,不过还没看明白. :-(
 
是做逐级查询的吗?如果是,不用那么麻烦呀,呵呵,动态生成SQL语句就可以了
另:一定要用,1=1没问题
 
奇怪, 干吗一定要加个真的条件呢?
为什么不判断字符串?
with query1 do
begin
sql.text := 'select * from table where '+ 条件1+....条件n;
sql.text := copy(sql.text, 1, length(sql.text)-4); // 去掉最后一个'and '
open;
end;
 
我知道你的意思了,是因为你加入N个条件后,
最后一句会多个AND,所以你要加入个T条件,这个
问题我也碰到过。我解决方法是:
找一个整数的字段fieldN FieldN>-2000000000
也可以fieldN>0 主要看这个字段的使用范围
字符串也可以 FieldStr<>'XXXXXXX'。
是不是我这个意思
 
它的意思是如果字段为空时,可以查到全部记录吧?
(field1=Dbedit1.text or field1='')and....
 
可以这样, 对一个不能是null的字段设定fieldx<>null就可以了:-)
 
urus:
我认为你对题目的理解是正确的,但你为什么
要这么做,在最后的and 后面加上 1=1 不就行了?
 
看不懂,他要说明什么。
 
To urus:你的理解是对的,你的方法我做过,也可以,但总觉得有些不是很
完美。
To lhxu: 在最后加 1=1 Delphi会报错。
Another_eYes的方法很好,以前没有想到过。
是不是可以派分了,还是等一会吧,看看大家还有什么高见,总之先谢谢各位了。
 
让大家久等了,我来分钱了
 
多人接受答案了。
 
呵呵, eyes的方法有问题, 如果一个条件都没有呢?
会得到'select * from table1 wh' 呵呵:-)
 
后退
顶部