我想编写这样的一个过程:
  其中参数有:一个query,一个表名,一个字段名,一个字段值和一个数组
这个过程是用来根据所给出的字段值,从所给出的表中进行查询,完成sql语句的设置。
在根据查询结果返回一个二维数组!
  可是这里的query,表名,字段名怎么在过程的参数表中进行定义呢?
这里的query声明为一个class:即:type queryx=class(tquery);
表名,字段名,字段值都为字符串类型!
我的定义如下:
procedure creattable(query:queryx;bm,zdm,zdz:string;var temp:arr);//arr已经声明为二维数组!
 var i,j:integer;
 begin
  with queryx do
   begin
   close;
   sql.clear;
   sql.add('select xqs,js from  bm');
   sql.add('where zdm=:number);
   params[0].asstring:=zdz;
   prepare;
   open;
  end;
 while not queryx.eof do
  begin
  i:=queryx.fields[0].asinteger;
  j:=queryx.fields[1].asinteger;
  temp[i,j]:=1;
  queryx.next;
  end;
end;
可是当我进行调用时:creattable(query1,teacheruse,teacher,jsm,ttemp);
这里的teacheruse是数据库中存在的一个表,teacher是其中的一个字段名,而
jsm在前面已经给出值!
  可是进行编译时:它说,incompatible type query and tquery
                         undeclared identifier :teacher!
不知道该怎么做,请教! 

解决方案 »

  1.   

    procedure creattable(queryx:Tquery;bm,zdm,zdz:string;var temp:arr);
     var i,j:integer;
      

  2.   

    procedure creattable(var queryx:Tquery;bm,zdm,zdz:string;var temp:arr);
     var i,j:integer;
      

  3.   

    queryx干嘛不直接用TQuery试试procedure creattable(query:queryx;bm{没有用过,干嘛用的},zdm{没有用过,干嘛用的},,zdz:string;var temp:arr);//arr已经声明为二维数组!
     var i,j:integer;
     begin
      with queryx do
       begin
       close;
       sql.clear;
       sql.add('select xqs,js from  bm');
       sql.add('where zdm=:number);
       params[0].asstring:=zdz;
       prepare;
       open;
      end;
     while not queryx.eof do
      begin
      i:=queryx.fields[0].asinteger;
      j:=queryx.fields[1].asinteger;
      temp[i,j]:=1;
      queryx.next;
      end;
    end;