adoquery的参数问题(100分)

  • 主题发起人 主题发起人 thgerman
  • 开始时间 开始时间
T

thgerman

Unregistered / Unconfirmed
GUEST, unregistred user!
我用adoquery控件,在对表进行查询时我想用参数查询(一个日期型字段)
可是我一执行adoquery.open就出错,为什么?
如我想对表中的多个字段进行条件查询,sql应怎样写(有的字段可能没有输入条件,
用参数查询是不是就达不到要求了).
 
两种方法如下:
第一、
用sql语句的话,在程序中是这样的:
self.Adoquery1.close;
self.AdoQuery1.sql.text:='select * from Table1 where Column1=''value'' and '+
'Column2=123';
self.AdoQuery1.open;
第二、
用AdoQuery的参数的话,是这样的:
事先在设计控件时,Adoquery的Sql里的语句是这样写:
select * from Table1 where Column1=:Param1 and Column2=:Param2
写完后会Adoquery自动创建两个参数Param1和Param2;然后在程序中写:
Self.Adoquery1.close;
self.ADOQuery1.Parameters[0].Value:='Value';
self.ADOQuery1.Parameters[1].Value:=123;
self.ADOQuery1.open;

以上是Sql语句和Adoquery的参数基本用法,你看着办,啥不明白的再提问!
 
程序中输入sql语句不就可以了,难道你是在设计时就输好了
 
谢谢两位:
1。举个例子,我在一张表中有“产品名称”“生产班次”“生产日期”
我的条件查询是以班次或日期进行查询,问题是我不知道以后的查询到底是用那一个字段
进行查询或两个字段都用,如果在设计期就指定了两个参数,实际中可能只用一个参数不
就查询不到想要的结果(有没有什么值参数是默认为全部的?),如果在程序中输入SQL语
句,我想只能用情况判断来设计SQL语句,有没有更简单的方法(我现在只对两个字段进行
条件查询,如果是三个四个字段那不是有太多种情况)。
2。最主要的问题是:我的参数,只能在设计期输入,如在程序中输入参数就出错,如
Adoquery1.close;
ADOQuery1.Parameters[0].Value:='Value';
ADOQuery1.Parameters[1].Value:=123;
ADOQuery1.open;
这样的语句在语法检查时通不过(我不太明白self的作用,不用也应该正确的吧?)
用ADOQuery1.Parameters[0].asstring:=edit1.text 也错说是不认识asstring
我用的是:
adoquery.Parameters.ParamValues ['rq';'bz']:=vararrayof[edit1.text,edit2.text];
可是运行adoquery.open程序出错,我真的不明白是不是adoquery不能用参数查询。
菜鸟很弱小可怜的动物,多谢大侠们的仗义!!!^o^

 
哇,不会吧,Self用来引用当前Form,在这里指得是Adoquery1控件所在的Form,
self.Adoquery1就是指当前Form的Adoquery1对象,这是个Delphi编程常识,
除非你不会Delphi?!
我以前所说的我又校验了一遍,没什么问题的!不可能语法检查也不通过!
"ADOQuery1.Parameters[0].asstring:=edit1.text "这一句是肯定不对的,
因为ADOQuery1.Parameters[0]不是Tfield对象类型.
其他的毛病自己再查查代码,可能是别的地方的!
 
用FORMAT吧。既简单又方便。
sqlstr='select * from table1 where 生产日期=#%s#
and 产品名称=''%s'' and 生产班次=%d '
sqlstr:=format(sqlstr,[day,productName,produceNo])
这里 day是实际的日期, productName是实际的产品名称(为字符串),
produceNo是实际生产班次(为整型)

然后 adoquery1.sql.add(sqlstr); 再open即可。
 
多谢各位,我的第一个问题已经解决。
还有就是对表中的多各字段进行条件查询如对“生产班次”“生产日期”进行查询,要求是
可以对任一字段进行条件查询(如对“生产班次”的“甲班”,“生产日期”的某一段
时间)也可对两个字段一起进行条件查询(如对某一时段甲班生产的产品进行查询)
我目前的做法是对输入框的情况进行判断,这样做很麻烦(如要对三,四个字段进行查询那
不是有很多种情况)不知有没有更简单的方法。再次谢谢各位大虾,(如分数不够,小弟
勒紧裤带也要加上几分)
 
自己根据条件合成sql不就行了
mysql:='select * from xx where true '
if 条件1 then mysql:=mysql+' and 条件1';
if 条件2 then mysql:=mysql+' and 条件2';
....
我就是这么作的,效果不错

 
多人接受答案了。
 
我再提几个问题:
在这里加分应怎样做
第二个问题:seachild2000
Tyrael两位的方法在单机版中很管用,但我过渡到两层时都不行,这是为什么?
有办法解决吗??
 
后退
顶部