谁能帮我看看这段程序错在那儿???(100分)

  • 主题发起人 monster112115
  • 开始时间
M

monster112115

Unregistered / Unconfirmed
GUEST, unregistred user!
这段程序有满足条件的记录时,dbgrid中能正确的显示出查询的结果,但是在我不选
中任何条件时,点击查询按钮,就出现adoquery2 parameter 'ajnb'not found的错
误。
procedure TForm3.FlatButton22Click(Sender: TObject);
var
ssql,qssj,jzsj,ajnbp:string;
begin
if ajnbck.Checked then
begin
ajnb.Text:=ajnb.items[ajnb.itemindex];
ajnbp:=ajnb.Text;
ssql:='where 案件类别=:ajnb';
end;
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.sql.Add('select 编号,案件名称');
adoquery2.sql.Add('from 案件');
adoquery2.sql.add(ssql);
try
adoquery2.Parameters.ParamByName('ajnb').Value:=ajnbp;
adoquery2.Prepared;
adoquery2.Open;
finally
adoquery2.ExecSQL;
end;

if AdoQuery2.RecordCount=0 then
MessageDlg('对不起,没有找到你要的记录!',mtinformation,[mbok],0);
end;
 
>if ajnbck.Checked then
>begin
>ajnb.Text:=ajnb.items[ajnb.itemindex];
>ajnbp:=ajnb.Text;
>ssql:='where 案件类别=:ajnb';************************************HERE!
>end;
上面这段程序只有选择了Checkbox后才能执行,当未选择时
在下面的try..finally..end中却使用了SQL参数,当然不行了
 
看了一下
if ajnbck.Checked then
begin
ajnb.Text:=ajnb.items[ajnb.itemindex];
ajnbp:=ajnb.Text;
ssql:='where 案件类别=:ajnb';
end;
--------------------------
ajnb 是个什么东东?Tedit?
瞎改一下
if Trim(ajnb.items[ajnb.itemindex])<> '' then
begin
ajnb.Text:=ajnb.items[ajnb.itemindex];
ajnbp:=ajnb.Text;
ssql:='where 案件类别=:ajnb';
end;
就是说,要是没有选择条件,sql语句就不用加 where了
 
你这段代码可以这样写:
procedure TForm3.FlatButton22Click(Sender: TObject);
var
ssql,qssj,jzsj,ajnbp:string;
begin
if ajnbck.Checked then
begin
ajnb.Text:=ajnb.items[ajnb.itemindex];
ajnbp:=ajnb.Text;
ssql:='where 案件类别=:ajnb';
end
else
ssql:='';
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.sql.Add('select 编号,案件名称');
adoquery2.sql.Add('from 案件');
adoquery2.sql.add(ssql);
try
adoquery2.Parameters.ParamByName('ajnb').Value:=ajnbp;
adoquery2.Prepared;
adoquery2.Open;
finally
adoquery2.ExecSQL;
end;
 
呵呵,逻辑上的错误!
 
谢谢大家
 
to liusm
按你的方法还是出那样的错误,我想再请问你一个问题:adoquery的参数是怎么定义的
呀,我觉得有可能是我把阐述定义错了。
 
顶部