请教大家,怎样将DBGrid显示的数据导入到一张在程序中新建的表中??(用的是VF的数据库, free table).(另,能否说说动态创建表的技术)       非常感谢赐教!!

解决方案 »

  1.   

    Data create请参考书籍,太长而且比较复杂。(因为字段的类型有点麻烦....)
    速度慢的就一个字段接一个字段的写入
    olddata.first;
    repeat
    for i:=0 to fields.count -1 do begin
      newdata.fields[i].value:=olddata.fields[i].value;
    end;
    olddata.next;
    until eof;
    快的话就要Batchmove
    设置soure和destination数据库,具体的请参考书籍。
      

  2.   

    VF的数据库能用batchmove 吗?麻烦再解释清楚一点??
    我用SQLExplore 使用ODBC连接VF的数据库(free table)先在SQLExplore用sql语句
    操作数据(insert into tableA select * from tableB  . tableA和tableB表结构完全一样
    )但是visual foxpro driver 无法通过该语句。有没有办法在程序中使用vf的命令直接操作数据库?
      

  3.   

    Connection1和connection2为两个不同数据库。
    在程上添加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;
        Connection := Connection1
        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 := Connection2;
          RecordSet := ADODataset1.RecordSet;
        end;
      except
        DataSource2.Free;
        ADODataset2.Free;
      end;
    end;然后在你用完时的代码上加:
        DataSource2.Free;
        ADODataset2.Free;
    你可以看到DBGrid2可得到你想的结果集。