如何将查询出的记录存到一个临时表中?用完再将临时表删除

解决方案 »

  1.   

    select * into #TempTable from 表名 where 条件
    // 删除
    delete #TempTable
      

  2.   

    使用代码创建临时表
      函数代码如下:
      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;
      这样,临时表就创建完成。
      

  3.   

    select * into #TempTable from 表名 where 条件
    // 删除表不是用Delete
    Drop Table #TempTable
      

  4.   

    上面的 #TempTable不需要创建,SQL会根据你需要的字段自动创建如果已经创建的话会报错已经存在。
      

  5.   

    这样做吧!
    一、只取到结果集
    在程上添加1个TDatasource, 1个TADODataSet(或其它Dataset)和两个TDBGrid;
    比如他们分别是Datasource1,ADODataset1, DBGrid1, DBGrid2.
    Datasource1的Dataset属性是ADODataset1, DBGrid1的DataSource属性是Datasource1, 一个表为T_User;
    创建临时的Datasource2,ADODataset2.
     Datasource2的Dataset属性是ADODataset2, DBGrid2的DataSource属性是Datasource2,
    1. 首先查询数据操:
    procedure QueryRecord;begin
    ......
      with ADODataset1 do
      begin
        Active := False;
        CommandText := 'Select * from T_User';
        Active := True;
      end;
    .....
    end;Assigned结果集:
    procudure AssignedResultSet;
    begin
      with ADODataset2 do
      begin
        RecordSet := ADODataset1.RecordSet;
      end;
    end;你可以看到DBGrid2可得到你想的结果集。
      

  6.   

    在程上添加1个TDatasource, 1个TADODataSet(或其它Dataset)和两个TDBGrid;
    比如他们分别是Datasource1,ADODataset1, DBGrid1, DBGrid2.
    Datasource1的Dataset属性是ADODataset1, DBGrid1的DataSource属性是Datasource1, 一个表为T_User;
    创建临时的Datasource2,ADODataset2.
     Datasource2的Dataset属性是ADODataset2, DBGrid2的DataSource属性是Datasource2,
    1. 首先查询数据操:
    procedure QueryRecord;begin
    ......
      with ADODataset1 do
      begin
        Active := False;
        CommandText := 'Select * from T_User';
        Active := True;
      end;
    .....
    end;Assigned结果集:
    声明Public的变量:
      ADODataset2: TADODataSet;
      DataSource2: TDataSource;procudure AssignedResultSet;begin
      Try
        AdoDataSet2 := TADODataSet.Create(nil);
        DataSource2 := TDataSource.Create(nil);
        DataSource2.DataSet := AdoDataSet2 ;
        DBGrid2.DataSource := DataSource2;
        with ADODataset2 do
        begin
          Connection := ADODataset1.Connection;
          RecordSet := ADODataset1.RecordSet;
        end;
      except
        DataSource2.Free;
        ADODataset2.Free;
      end;
    end;然后在你用完时的代码上加:
        DataSource2.Free;
        ADODataset2.Free;
    你可以看到DBGrid2可得到你想的结果集。
      

  7.   

    你可以这样做的,你用query 把要的数据集找出来,而后再用一个bachmove 
    导出不就可以了吗?
      

  8.   

    不好意思,不过我的问题是还没有结决,你给出的办法我试过了,只不过不是我想要的,你的例程是将查询出的东西一模一样的搬到别一个ADOQUERY中,我想做的是将查询出的东西,经过一些计算存到一个临时表中
      

  9.   

    如果是大型数据库
    select  into #语句中可以做计算呀, 好象没什么难的吧