界面显示的内容需要查询多张表数据,也就是需要同时存在多个查询返回
数据集,是不是一定要用多个AdoQuery控件,AdoQuery有没有办法同时保存
多个数据集?谢谢!

解决方案 »

  1.   

    可以同时检索多个表,但是保存的时候需要注意.如下检索两个表:
    adoquery1.sql.clear;
    adoquery1.sql.add('select * from table1, table2');
    adoquery1.open;保存的时候,可以在BeforeUpdate中自己定义多个adoquery,然后对每个记录开始执行更新操作.
    也可以使用一个控件,忘了是什么了.如果你使用ClientDataSet,那么可以在DataProvider的BeforeOnUpdate中对每个记录执行sql.
      

  2.   

    不能保存多个数据集吧.
    你可以写SQL么.把你要的数据用一个SQL查询出来,然后返回一个数据集.
      

  3.   

    给你一个返回数据集的函数
    function TdbMain.qryData(const sSqlString: WideString; var vData: OleVariant) :Boolean;
    begin
        if not cnMain.Connected then
        try
          DataModuleCreate(Self);
        except
          Result := False;
        end;
        try
          if cdsMain.Active then
          cdsMain.Close;
          qryMain.Close;
          qryMain.SQL.Text := sSqlString;
          qryMain.Open;
          //cdsMain.CommandText :=sSqlString;
          cdsMain.Open;
          vData := cdsMain.Data;
          Result := True;
        except
          Result := False;
        end;
    end;var
      sSql :String;
      vData :OleVariant;
    begin
      ....
      if qryData(sSql,vData) then
      begin
        Data := vData;
      end;
    end;
      

  4.   

    是不是一定要用多个AdoQuery控件可以使用连接查询。。当然,也可以用多个adoquery来完成。
      

  5.   

    adoquery1.sql.clear;
    adoquery1.sql.add('select table1.a,table2.b from table1, table2');
    adoquery1.open;
      

  6.   

    显示的时候,用视图,
    然后在试图上建立instead of触发器,在执行插入的时候根据你的要求插入对应的基础表
      

  7.   

    如果只是查询,一个个AdoQuery就够了,当然是写一条复杂的语句,我昨天写了一条统计汇总的复杂语句,涉及多个表。