我把一个DBF文件读入到DBGrid中来显示了,怎么将这个DBF中显示的数据一条一条写入到SQl表中?
他们有字段是相同的。可以作为条件写入

解决方案 »

  1.   

    访问DBGrid所关联的DataSet就可以了。
      

  2.   

    比如有个adocommand叫cmd1
    cmd1.commandtext='insert into sql表名 values(参数列表)';
    with dbgrid.datasource.dataset do begin
      first;
      while not eof do begin
        cmd1.parameters.parambyname('参数1').value=fieldbyname('字段1').value;
        cmd1.parameters.parambyname('参数2').value=fieldbyname('字段2').value; 
        ....
        ....
        cmd1.execute;
        next;
      end;
    end;
      

  3.   

    不用dbgrid都可以,在网上有多相关介绍:
    -----------------------------------------
    在SQLServer中执行(在程序中也可,用ADO连sqlserver)
    SELECT * into bmk
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk where 条件
    这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中,
    速度是最快的
    上面这个方法DBF文件必须在服务器上,如果DBF不在服务器上,就用
    连接串
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="dBase 5.0;";Persist Security Info=False
    SQL语句
    SELECT * into aaa IN [ODBC]
    [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;] 
    from aaa where 条件
    这是直接把客户端上的DBF传上服务器的最直接方法。
    -------------------------------------------------------
      

  4.   

    to Top Keiy()我没看懂,您能简单举个例子吗?
      

  5.   

    我来写个通俗点的吧,没 keiy大哥速度快2个控件query1,table1.把各个想添加的字段对齐Query1.First;
    while (Not Query1.Eof) do
            BEGIN
            
                    Table1.Insert;
                    Table1.FieldByName('a').AsString  := Query1.FieldByName('a').AsString;
                    Table1.FieldByName('b').AsString  := Query1.FieldByName('c').AsString;
                    Table1.Post;
                    Query.next;
      

  6.   

    我的已给出方法
    1.DBF文件在SQL服务器上
      一个TADOConnection连接SQLERVER服务器(可用连接向导连接到SQLSERVER服务器)
      一个TADOQuery,Connect指向上面的TADOConnection(不用TADOConnection,直接设ConnectionString也可以)
      ADOQuery1.ParameterCheck:=false;//必须
      ADOQuery1.SQL.Text:='SELECT * into dbftable FROM OpenDataSource (''Microsoft.Jet.OLEDB.4.0'',
      ''Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0'')...newtable where id>100';
      ADOQuery1->ExecSQL;
    其中dbftable为你的dbf文件名(表名),newtable为sqlserver的表名,id>100为条件
      这样就可以将dbftable.dbf的数据(id>100)的导到sqlserver的newtable 中
    2.DBF不在服务器上
      同样一个TADOConnection+TADOQuery或只用一个TADOQuery
      只用TADOQuery的:
      ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="dBase 5.0;";Persist Security Info=False';
       ADOQuery1.SQL.Text:='SELECT * into newtable IN [ODBC]
    [ODBC;Driver=SQL Server;UID=sa;PWD=ppp;Server=192.168.0.2;DataBase=Master;] from dbftable where id>100';
      ADOQuery1.ExecSQL;
    其中192.168.0.2为sqlserver服务器的IP(也可用服务器名),用户名为sa,口令为ppp,库为Master
     
      

  7.   

    另:方法1中的e:\share为dbf文件所在目录