比如说表1为
table1 :   a1      b1
            1       hjhjggj
            2       vb
            3       vc
            4       delhi
table2:    b1       c1
          vc        open
          vc        close
          delphi    openfile
          delphi    closefile
          delphi    dirpath
能不能在不创建表的情况下将table2的多个记录放在degrideh的一个记录里 
  结果是这样的:  a1     c1
               1       -
               2      -
               3      open close
               4      openfile  close file dirpath            

解决方案 »

  1.   

    将dbgrideh的数据集的SQL语名写成联合查询.代码如下:
     with   (DBGridEh1.DataSource.DataSet as TADOQuery) do
     begin
       Close;
       sql.Clear;
       sql.Text:= 'select a1,c1 from table1 a,table2 b where a.b1=b.b1 order by a1';
       open;
     end;
      

  2.   

    楼上说的结果会是这样的   a1    c1
                          1      -
                          2      -
                          3      open
                          3       close
                          4      openfile
                          4      closefile
                          4      dirpath
    我想要的是a1=4的c1所有的记录都在一个格里 就是说相当于1个c1记录 
      

  3.   

    呵呵,不好意思.马虎了.// 这样的结果可以借助于dataset的计算字段实现.可在dataset中加一计算字段,字段名称为zzzz.然后在  1CalcFields 事件添加如下代码.
    {//------------------------------------------------------------------------------
    // 窗体初始化.  打开adoquery1.数据集
    //------------------------------------------------------------------------------}
    procedure TForm1.FormShow(Sender: TObject);
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Text:='select a1 from table1 group by a1 order by a1';
      ADOQuery1.Open;
    end;{//------------------------------------------------------------------------------
    // CalcFields事件,处理第计算字段的值
    //------------------------------------------------------------------------------}
    procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
    var
      qry2:TADOQuery;
      c1Value:string;
    begin
      c1Value:='';
      // 这样的结果可以借助于dataset的计算字段实现.可在dataset中加一计算字段,字段名称为zzzz.然后在  qry2 := TADOQuery.Create(nil);
      try
          qry2.ConnectionString:= '....';
          qry2.SQL.Clear;
          qry2.SQL.Text:= 'select * from table2 where b1='+quotedstr( Tadoquery(sender).fieldByName('b1').AsString);
          qry2.Open;
          qry2.First;
          while qry2.Eof do
          begin
            c1Value:= c1Value+ qry2.fieldByname('c1').asstring;
            qry2.Next;
          end;
            Tadoquery(sender).fieldByName('zzzz').Value:= c1Value;
      finally
        qry2.Free;
      end;
    end;