|
楼主 |
发表于 2014-12-19 14:12
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 liu-aguang 于 2014-12-19 14:21 编辑
coby001 发表于 2014-12-19 12:28
Sub ace_test()
Const xlsPath$ = "D:\My Documents\SQLite_Ado.xls" ' 这个改为你自己的xls文件路径 ...
在XP系统里:
如果的确存在查询上百的或更多的工作表,或者用该代码在不退出电子表格的情况,进行不限定次数的查询.修改连接字符串为ACE方式连接,是一个好的选择.
如果不是上面的情况,事实上可以不用修改任何代码.只要内存足够大(比如:2G,:::现在看是小容量了,当时标配一般是512M).在XP系统中,jet连接的效率要比ACE好.
己以为:造成迭加的根本原因不在ADO,而是EXCEL.
当以可读写方式打开Excel时,如果操作电子表格数据,那么Excel会自动开辟(或索取)一个内存块,用来存放你可能修改的数据,它必须在你关闭excel后回答是否保存修改才会释放该内存块.所以在自连接中,即使是读取同一工作表,每读取一次都会扩展那一块内存,从而导致迭加.
同样的道理,如果用非自连接方式去查询一个已经打开的数据源工作簿,情况会与自连接完全相同,也会存在内存迭加的问题.
版主的解决办法,实际上就是让工作簿以只读方式打开工作簿,这样来避免EXCEL自动开辟内存块.
当然也可以认为是ADO的jet引擎的问题:它考虑欠周到.因为初期的ADO是为系统数据库而开发的.对EXCEL这种非规范数据源没有仔细推敲.所以后来得以纠正.
至于第一次操作以可读写方式打开的EXCEL,而开辟的内存块,无论那种方式,也无论过去还是现在,在EXCEL退出之前都不会释放,这是由EXCEL特征所决定的. |
|