怎么用QUERY写条件查询?(10分)

  • 主题发起人 主题发起人 redmig
  • 开始时间 开始时间
R

redmig

Unregistered / Unconfirmed
GUEST, unregistred user!
用一个EDIT输入一个变量FHNO,然后让QUERY根据这个变量来查询数据表,代码如下:
procedure TForm2.Button1Click(Sender: TObject);
var
fhno:string;
begin
if c_edit_fhdh.text<>'' then
fhno:=c_edit_fhdh.text;
query1.SQL.Clear;
query1.Active:=False;
query1.SQL.Add('select * from fhd.db where f_no=:fhno');
query1.Active:=True;
end;
但是运行后,总说fhno是不可认的类型,请告知那里出错了,谢谢
 
query1.SQL.Clear;
query1.Active:=False;
query1.SQL.Add('select * from fhd.db where f_no=:fhno');
query1.ParamByName('fhno').Value:=fhno;
query1.Active:=True;
 
同意楼上,你定义了一个参数,但未赋值,所以...
 
不知道你的query1还完成其他什么工作,如果仅仅是这样的简单查询,建议不要用变量传
输的方式,直接写成语句:
query1.sql.add('select * from fhd.db where fno=' + #39 + fhno + #39;
按照楼上的建议做的话,在某些场合还需要增加:
query1.createparams
 
也可以写成这样:
procedure TForm2.Button1Click(Sender: TObject);
var
strsql:string;
begin
if c_edit_fhdh.text<>'' then
strsql:='select * from fhd.db where f_no='+''''+c_edit_fhdh.text+'''';
query1.Active:=False;
query1.SQL.Clear;
query1.SQL.Add(strsql);
query1.Active:=True;
end;
这样就ok了
 
query1.SQL.Add('select * from fhd.db where f_no='+fhno);
 
procedure TForm2.Button1Click(Sender: TObject);
var
fhno:string;
begin
if c_edit_fhdh.text<>'' then
begin
fhno:=trim(c_edit_fhdh.text);
query1.close
query1.SQL.Clear;
query1.SQL.Add('select * from fhd.db where f_no=quotedstr(fhno));
query1.open;
end;
 
sql 语句 应该是:select * from fhd.db where f_no='fhno'
所以要把 ' 转化为 #39 或 '' 因此分别是armyjiang ,netbird的写法
 
十分感谢各位的不吝赐教,只可惜我是新手没有那么多分可以分给大家,对不起了。
我还想问一下,如果我定了8个查询条件,假如用户输入了其中的5个查询条件,
那么这5个就按条件查询,其余空白的,让它默认是搜索全部记录,应该怎么写代码?
 
一口气想吃成胖子?
#……%·##!

var
selectstring, wherestring : string;
...
begin
selectstring := 'select * from fhd.db ';//注意最后一个’号前有个空格!后面的也有。
wherestring := '';
//对于“and”的处理方法有多种,我写的是一种,你自己看着办。
if trim(c_edit_fhdh.text) <> '' then wherestring := wherestring + 'and f_no = ''' + trim(c_edit_fhdh.text) + '''';
//如果是数值型的字段
if trim(c_edit_fhdh1.text) <> '' then wherestring := wherestring + ' and f_no1 = ' + trim(c_edit_fhdh1.text);
....
//去掉最前面的“and”
if wherestring <> '' then wherestring := copy(wherestring, 6, length(wherestring) - 5);
with query1 do
begin
close;
sql.clear;
sql.add(selectstring + wherestring);
open;
end;
...
 
谢谢各位的帮助:)
 
后退
顶部