var
   Query:TQuery;
begin
   Query:=TQuery.Create(Application);
   try
      ...
   finally
      Query.Free;
   end;
end;DBGrid先和一个DataSource相连,创建了Query之后,设置DataSource.DataSet:=Query;

解决方案 »

  1.   

    使用代码创建临时表
      函数代码如下:
      function CreateTableInMemory(const AFieldDefs:TFieldDefs):
      TDataSet;
      var TempTable:TClientDataSet;
      begin
      TempTable:=nil;
      Result:=nil;
      if AFieldDefs〈〉nil then
      begin
      try
      TempTable:=TClientDataSet.Create(Application);
      TempTable.FieldDefs.Assign(AFieldDefs);
      TempTable.CreateDataSet;
      Result:=(TempTable as TDataSet);
      Except
      if TempTable〈〉nil then TempTable.Free;
      Result:=nil;
      raise;
      end
      end
      end;
      在程序中按如下方法调用:
      procedure TForm1.Button1Click(Sender: TObject);
      var ADataSet:TDataSet;
      begin
      ADataSet:=TDataSet.Create(Self);
      with ADataSet.FieldDefs do
      begin
      Add(′Name′,ftString,30,False);
      Add(′Value′,ftInteger,0,False);
      end;
      with DataSource1 do
      begin
      DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
      DataSet.Open;
      end;
      ADataSet.Free;
      end;
      这样,临时表就创建完成。
      

  2.   

    同意xzgyb的程序,但是象这种临时表的创建,出错了也不好查。如果一定要用,为什么不在设计时留一个备用的呢