我看到别人这样用query控件
先添加1个query控件,然后再
 public
    { Public declarations }
    procedure SetDianDiaoSQL(var Query:TQuery);
    procedure SetDianDiaoParam(var Query:TQuery;Param:string);
    procedure DianDiaoView;
分别在各个procedure中再写内容
最后删除query控件,程序可以运行,是不是说没有query控件也可以,
请高手解释其中原因,现在我在做打印了,rvcustomconnection该怎么设置呢

解决方案 »

  1.   

    procedure SetDianDiaoSQL(var Query:TQuery);里的Query就是一个变参,可以在过程内创建然后输出;也可以把实参传进去。
    大多数情况是把实参传进去,不需要输出procedure SetDianDiaoSQL( Query:TQuery);
      

  2.   

    我现在要打印查询结果rvcustomconnection该怎么设置呢,各位大哥
      

  3.   

    这是我编的一段程序!希望对你有帮助
    unit Unit3;interfaceuses
      SysUtils, Classes, DB, DBTables,Dialogs;type
     TEASYTABLE = class
     Protected
        EasyQuery:TQuery;
     Public
        Constructor Create();
        Destructor Destroy();override;
        Procedure setData(DatabaseName:string;DataSource:TDataSource);
        Procedure UpdateTable(sql:string);virtual;
        function Seach(select, selectinto, from,where,whereDesign,GroupBy,
        Having,Orderby: string;whereDesignEnabled:Boolean ): string;
        function inster(into,Fields,values:string):string;
        function update(update,Fields,values,where:string):string;
        function delete(from,where:string):string;
        function SelectProcedure(select,Procedurename,parameters:string):string;
        function ExecuteProcedure(Procedurename,parameters:string):string;
        procedure EasyQueryAfterInsert(DataSet: TDataSet);
        Procedure UpdateTable1(sql:string);virtual;
     end;implementation{ TEASYTABLE }constructor TEASYTABLE.Create();
    begin
    EasyQuery:=TQuery.Create(EasyQuery);
    EasyQuery.AfterInsert:=EasyQueryAfterInsertend;destructor TEASYTABLE.Destroy;
    begin
      EasyQuery.Close;
      EasyQuery.Free;
      inherited;
    end;function TEASYTABLE.inster(into, Fields, values: string): string;
    var
    s:string;
    begin
      if (into <>'')then
        s:='INSERT INTO '+into
      else begin
        s:='Into must have a value!';
        Result:=s;
        exit;
      end;
      if (Fields <>'')then
        s:=s+' ('+Fields+') '
      else begin
        s:='Fields must have a value!';
        Result:=s;
        exit;
      end;
      if (values <>'')then
        s:=s+'Values ('+values+') '
      else begin
        s:='values must have a value!';
        Result:=s;
        exit;
      end;
      Result:=s;
    end;procedure TEASYTABLE.UpdateTable(sql: string);
    begin
    EasyQuery.Close;
    EasyQuery.SQL.Clear;
    EasyQuery.SQL.Add(sql);
    if pos('select',sql)=1 then
      EasyQuery.Open
      else
      EasyQuery.ExecSQL;
    end;
    procedure TEASYTABLE.setData(DatabaseName: string;
      DataSource: TDataSource);
    begin
    EasyQuery.DatabaseName:=DatabaseName;
    DataSource.DataSet:=EasyQuery;
    end;function TEASYTABLE.Seach(select, selectinto, from, where, whereDesign,
      GroupBy, Having, Orderby: string; whereDesignEnabled: Boolean): string;
    var
      s:string;
      sWhere:string;
    begin
      s:='select '+select;
      if (selectinto <>'')then begin
        s:=s+' into '+ selectinto;
      end;
      s:=s+' from '+from;
      swhere:=where;
      if (whereDesign<>'') and whereDesignEnabled then
        if swhere=''then
          swhere:=whereDesign
        else
          swhere:=swhere+' and ('+whereDesign+')';
      if swhere<>''then
        s:=s+' where '+swhere;
      if GroupBy<>''then
        s:=s+' Group By '+GroupBy;
      if Having<>''then
        s:=s+' having '+ Having;
      if Orderby<>''then
        s:=s+' order by '+Orderby;
      result:=s;
    end;function TEASYTABLE.delete(from, where: string): string;
    var
    s:string;
    begin
      if (from <>'')then
        s:='DELETE FROM '+from
      else begin
        s:='FROM must have a value!';
        Result:=s;
        exit;
      end;
      if (where <>'')then
        s:=s+' WHERE '+where
      else begin
        s:='Where must have a value!';
        Result:=s;
        exit;
      end;
      Result:=s;
    end;function TEASYTABLE.update(update, Fields, values, where: string): string;
    var
    s:string;
    begin
      if (update <>'')then
        s:='UPDATE '+update+' SET '
      else begin
        s:='UPDATE must have a value!';
        Result:=s;
        exit;
      end;
      if (Fields <>'')and(values <>'')then
      begin
       while(pos(',',Fields)<>0)and (pos(',',values)<>0) do
       begin
       s:=s+copy(Fields,1,pos(',',Fields)-1)+'='
           +copy(values,1,pos(',',values)-1)+',';
       Fields:=copy(Fields,pos(',',Fields)+1,length(Fields));
       values:=copy(values,pos(',',values)+1,length(values));
       showmessage(Fields+'  '+values);
       end;
       s:=s+Fields+'='+values;  end
      else begin
        s:='Fields and values must have a value!';
        Result:=s;
        exit;
      end;
      if (where <>'')then
        s:=s+' where '+where
      else begin
        s:='where must have a value!';
        Result:=s;
        exit;
      end;
    Result:=s;
    end;procedure TEASYTABLE.EasyQueryAfterInsert(DataSet: TDataSet);
    begin
    showmessage('Insert');
    end;function TEASYTABLE.ExecuteProcedure(Procedurename, parameters:string): string;
    var
    s:string;
    begin
      if (Procedurename <>'')then
        s:='Execute Procedure '+Procedurename
      else begin
        s:='Procedurename must have a value!';
        Result:=s;
        exit;
      end;
      if (parameters <>'')then
        s:=s+'('+parameters+')'
      else begin
        s:='parameters must have a value!';
        Result:=s;
        exit;
      end;
      Result:=s;
    end;function TEASYTABLE.SelectProcedure(select, Procedurename,
      parameters: string): string;
    var
    s:string;
    begin
      if (select <>'')then
        s:='select '+select
      else begin
        s:='select *';
      end;
      if (Procedurename <>'')then
        s:=s+' from '+Procedurename
      else begin
        s:='Procedurename must have a value!';
        Result:=s;
        exit;
      end;
      if (parameters <>'')then
        s:=s+'('+parameters+')'
      else begin
        s:='Procedurename must have a value!';
        Result:=s;
        exit;
      end;
      Result:=s;
    end;procedure TEASYTABLE.UpdateTable1(sql: string);
    begin
    showmessage('ok');
    end;end.
      

  4.   

    直接看不懂
    我看到别人做的查询没用query控件,只是直接定义了
    procedure SetDianDiaoSQL(var Query:TQuery);
        procedure SetDianDiaoParam(var Query:TQuery;Param:string);
        procedure DianDiaoView;
    然后分别在PROCEDURE中写内容,就可以查询,这是什么原理,能解释一下吗?
    是先用1个QUERY 然后设好QUERY控件的属性 ,在删掉,就可以这样用了