我一个程序需要将excel文件中的数据导入到access数据库中,我是用循环的方式向数据库中写数据,成功倒是成功了,但速度超慢,因为excel中数据量比较大,有约一万条,有没有什么快一点的方法啊?

解决方案 »

  1.   

    两边都用ado连接,速度会快点
      

  2.   

    两位大哥,谢谢你们的回答,第一,数据源是excell,所以两边都ADO不可能,第二是需要经常导。
      

  3.   

    Excel到Access好像都是要循环的导入,不过使用ADO循环会比循环Excel快设置2个ADOConnection,1个连接Access,1个连接Excel
    ADOQuery1.SQl.Text:='select * from [sheet1$]';
    ADOQuery2.SQl.Text:='select * from tb';ADOQuery1->ADOQuery2;
      

  4.   

    ADO可以连接Excel吗?我倒是第一次听说,我是初学者。
      

  5.   

    把Excel当数据库,使用Ado连接Excel
      

  6.   

    可以联接的,看这个.转自这里:http://520920.blog.51cto.com/126264/26539第一部分:
     
    1. 设置ADOConnection的ConnectionString属性的OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider(这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件),按 "下一步"按钮
     
    2. 选择数据库名称。注意:Excel的扩展名是*.xls,而默认文件类型是Microsoft Access 数据库(*.mdb), 我们就选择"全部文件(*.*)"吧,接着选择我们要连接的Excel文件咯!!如果在当前路径,就直接填2007.xls。  这时先别慌按 "测试连接"按钮,不然会出现错误对话框的。可以试试看,了解一下 ^_^
     
    3. 在"所有"选项卡中找到 "Extended Properties",双击它或者按"编辑值"按钮,设置Extended Properties为"Excel 8.0 "。
     
    4. 我们返回"连接"选项卡,按 "测试连接"按钮。测试连接成功!!! ^_^
     
    最后,设置完成后的ConnectionString中的各项参数为:
        Provider=Microsoft.Jet.OLEDB.4.0
        Data Source=2007.xls    //因为在当前路径
        Extended Properties=Excel 8.0
        Persist Security Info=False
     
    第二部分:
     
    接着就用ADOTable,ADODataSet和ADOQuery连接到刚才的ADOConnection,当然你可以直接设置ADOTable,ADODataSet或ADOQuery的ConnectionString属性。
     
    1. ADOTable设置:
     
      a. ADOTable的TableName属性值:系统自动生成Excel的Sheet1$,Sheet2$和Sheet3$。直接Active设置成true,系统会报告SQL语句格式错误等信息。
     
      b. 找到TableDirect属性,设置为True。因为,访问Excel文件是直接的数据文件访问,不是通过SQL语句来操作游标访问的。接着将Active设置成true。成功了!! ^_^
     
      c. 可以不使用TableDirect属性,将TableName属性中的Sheet1$,Sheet2$和Sheet3$分别改成[Sheet1$],[Sheet2$]和[Sheet3$]。   对,就是加"[]"就行了。
     
    2. ADODataSet设置:
      a. 只需要将CommandType属性设置为cmdTableDirect,选择工作表,Active设置成true就成功了。
     
      b. 也可以将CommandType属性设置为cmdTable,将CommandText属性中改成[Sheet1$],[Sheet2$]和[Sheet3$]。
     
    3. ADOQuery设置:
     
      SQL属性如下:
      
      select * from [sheet1$]
     
     
     
    总结:复习以前所学的,尝试新的连接方法,有益于加深记忆。我发现工作表名后面都要多加一个$符号,还有就是打开ADOTable,ADODataSet或者ADOQuery以后,它们的CursorType自动变成ctStatic。
       
    应用环境:Delphi7.0  + Win2003企业版
      

  7.   

    终于找到一个更好的方法,无需用专门建立adoconnection用于连接Excel,直接用sql语句导入,测试了一下,9000条数据几乎是瞬间导入。
    drop table 表名//首先将表给删除。
    SELECT * INTO 表名
    FROM [excel 8.0;database=c:\价格信息.xls].[sheet1$];
    谢谢各位的回答,给分吧。
      

  8.   

    奇怪,你把表drop了,怎么还能往里面插数据?