有一个小程序,功能如下:从Excel中读取数据,写入Access后在进行统计。写程序过程中发现如下问题,恳请高手不吝指教,如果您也想知道答案请帮忙Up,谢谢先:1.用OleObject从Excel中读取数据,第一效率太低,读15000左右条数据然后写入Access要4至5分钟,第二当Excel中的行列发生变化如I列和H列互换位置后,再导入,原本Excel.cells[i,9].value是读I列的,现在读H列了,解决办法是在互换后的I列(先为H列)前插入一空列,使其重新成为I列,第三,读个别Excel文件时,读不到Excel的sheet的前一行或几行,但我的循环的确是从1开始的。2.关于Access的问题,第一、在程序的一个过程中,先Delete空一个表再写入,当重复做这一步时,写入Access的记录会有漏记录的情况,但先手工delete却不会发生,请问何故,此情况在我把Access压缩后发现,但压缩前可能也有,第二、也就是我要压缩Access的原因,由于要多次delete大表,所以表容量会经常变化,但delete后容量没有变少,反而不断累积,请问何故,平时比较少用Access,还请指教。

解决方案 »

  1.   

    1 不知道你的代码是如何写的,不过如果是access,你可以直接用jet sql语句倒入
    INSERT INTO TABLE1
    SELECT CustomerID, CompanyName
    FROM [Customers$] 
    IN "c:\documents\xldata.xls" "EXCEL 5.0;"
    WHERE CustomerID Like "A*"
    ORDER BY CustomerID
    2 不太明白你的意思,先Delete空一个表再写入,怀疑是异步操作所致,用事务试试
    3 你压缩数据库可以真正释放不用的空间
      

  2.   

    1. 建议你使用Excel导入Access表的方法,效率高,同时不影响列与列对换问题  参考:
         Select * Into 表 From [Excel 8.0;Database=c:\abc\].电子表.xls2、未压缩前,Access中Delete数据有的像以前dBase一样,不是真正的从数据库清除,dBase需要再使用命令Pick all,而Access是通过压缩来实现。
      

  3.   

    to  firetoucher(风焱):
      试试先;
    to fs_windy(雲海飛龍):
      那有没有语句可以在程序里压缩Access啊?就像在Dbase里,用pack一样。我现在是手工做的。