我想在一个学生信息表中进行多条件查询,在窗体上有一个字段名组合框(Cbozdm)、一个关系符(Cbogxf)组合框和一个字段值组合框(Cbozdz),一个添加条件按钮(ButtonAdd),一个执行sqltj语句的按钮(ButtonRun)
    程序中定义了i:integer; ii:integer;
               sqltj:string; tjz:array[1..20] of string;
    每点击一次ButtonAdd,就要完成sqltj的添加。
    我是这样做的:    已经完成给i赋值为0        procedure TFrmCxtj.ButtonAddClick(Sender: TObject);
     begin
      i:=i+1;
      if i=1 then
        sqltj:=cbozdm.Text+cbogxf.Text+':tjz[i]'
       else
        sqltj:=sqltj+' AND '+cbozdm.Text+cbogxf.Text+':tjz[i]';
      tjz[i]:=cbozdz.Text;
  end;  完成条件添加后,点击buttonRun
   procedure TFrmCxtj.ButtonRunClick(Sender: TObject);
     begin
      adoquery1.Active :=false;
      adoquery1.SQL.clear;
      adoquery1.sql.Add(sqltj);
      for ii:=1 to i do
         adoquery1.Parameters.ParamByName('tjz[ii]').Value:=tjz[ii];
      adoquery1.Active :=true;
     end;
   运行结果出现如下错误提示:
   Parameter对象被子不正确的定义,提供了不一致或不完整的信息。
 
  请教高手们,应如何修改程序,或者可不可以采用其它方法达到上述目的?
  不甚感激!

解决方案 »

  1.   

    adoquery1.Parameters.ParamByName(tjz[ii]).Value:=tjz[ii];
    //这句有问题吧。
      

  2.   

    字段名有这样的吗?tjz[ii]???
      

  3.   

    参考
    procedure Tform1.Button1Click(Sender: TObject);
    with adoquery1 do
    begin
       close;
       sql.clear;
       sql.add('select * from 表名 where 1=1');
       if edit1.text<>''
         sql.add('add 字段1 = '+''''+edit1.text+'''');
       if edit2.text<>''
         sql.add('add 字段2 = '+''''+edit2.text+'''');
       open;
    end;     
      

  4.   

    这句是不是写错了:adoquery1.Parameters.ParamByName('tjz[ii]').Value:=tjz[ii];是不是该写成这样呀:
    adoquery1.Parameters.ParamByName('tjz[i]').Value:=tjz[ii];
      

  5.   

    with adoquery1 do
      begin
         for ii:=1 to i do
          begin 
           Active :=false;
           SQL.clear;
           sql.Add(sqltj);
           Parameters.ParamByName('tjz[ii]').Value:=tjz[ii];
           Active :=true;
          end;
      end;
      

  6.   

    with adoquery1 do
      begin
         for ii:=1 to i do
          begin 
           close;
           SQL.clear;
           sql.Add(sqltj);
           Parameters.ParamByName('tjz[i]').Value:=tjz[ii];
           open;
          end;
      end;
      

  7.   

    我已经发了一个Email to you,相信一定能很简单地解决你的问题。