用ado连接一个200m的excel文件,速度奇慢!!

nofree 2006-04-10 05:17:07
要用vb将一个200m以上的excel文件转为特定格式的文件,程序已经做好,在转几m,几十m的excel时都没什么问题,但文件上百兆时,程序运行到

adoCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"

就会非常慢,基本死机,很长时间没反应。

我觉得假如能连接成功,在查询数据时可以做优化,速度不会太慢,但连接这么慢就没办法了,ado没提供其他有用的方式了。
...全文
559 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lnhsgj 2006-04-12
  • 打赏
  • 举报
回复
会不是这个excel文件自身的问题呀.

用excel程序试试能不能打开它.
vbman2003 2006-04-12
  • 打赏
  • 举报
回复
of123() 兄说的有道理
或者直接做成系统DSN试试
of123 2006-04-12
  • 打赏
  • 举报
回复
问题出在进程的虚拟内存需要大量磁盘交换。试试:

1 不要用客户端游标。这样就不需要再开辟一个客户端缓冲区。

2 换用 ODBC 接口:
adoCnn.Open "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;
Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath;"
nofree 2006-04-11
  • 打赏
  • 举报
回复
可以肯定是excel文件,因为用excel打开过,程序也还没运行到打开记录集的地方,在打开连接的时候就停住了,小点的文件一下就过了。
vbman2003 2006-04-11
  • 打赏
  • 举报
回复
sqlserver导入200m的excel也打不开?
是SQL连接不上这个文件?
确定这个文件是EXCEL文件吗?会不会是改了后缀的其它文件

绝缘 2006-04-11
  • 打赏
  • 举报
回复
把Excel转换成SQL数据库或ACCESS数据库,如果客户想更改数据库的内容,那就再加入修改等功能
haipingma 2006-04-11
  • 打赏
  • 举报
回复
不要一次打开那么多记录
nofree 2006-04-11
  • 打赏
  • 举报
回复
好像是没什么办法了,我用access,sqlserver导入200m的excel也打不开,看来只能提高机器配置了,谢谢各位了,再等等放分。
zpsinz 2006-04-11
  • 打赏
  • 举报
回复
这是个非常郁闷的问题。
好像目前只有提高硬件配置了。
帮楼主顶一下。
hzybc 2006-04-11
  • 打赏
  • 举报
回复

将EXCEL的数据放到SQL 中去
jackcaixia 2006-04-11
  • 打赏
  • 举报
回复
没办法了~~扔了你那台“拖拉机”,改用英特的双CPU3.0G以上,电脑的内存扩充到1G以上,硬盘采用SCIS。
nofree 2006-04-11
  • 打赏
  • 举报
回复
2.连接其它数据库都不会出现楼主所说的问题,连接excel就不同了,可能是由于ado要先分析excel的文件结构造成的. excel文件最多只有65536行,搞不懂为什么为200M的容量! 难道有大量的图片?
=======================

有多个sheet
lzheng2001 2006-04-11
  • 打赏
  • 举报
回复
1.主要的问题应该是内存问题,内存太小,程序要申请虚拟内存,就是进行硬盘操作,所以慢, 楼主换台大内存的电脑可能就不会慢了.

2.连接其它数据库都不会出现楼主所说的问题,连接excel就不同了,可能是由于ado要先分析excel的文件结构造成的. excel文件最多只有65536行,搞不懂为什么为200M的容量! 难道有大量的图片?

nofree 2006-04-10
  • 打赏
  • 举报
回复
文件大没关系,用记录集取数据的时候,可以用异步方式,不会慢,但连接为什么这么慢,以前文件小的时候,没注意,难道connection.open的时候需要读取整个文件吗?但这个时候还没有生成记录集啊,应该不需要把整个文件读入内存吧(因为我用单步调试,发现运行打开连接的时候,程序突然占用了200多兆内存,还在不断往上涨),但ado连接大数据库的时候,也不会这样慢啊,ado在连接大型文件的时候就不会作相应的优化吗。

哪位了解ado连接原理的来解释下吧。
laidon 2006-04-10
  • 打赏
  • 举报
回复
200M的excel文件?太不合理了
建议楼主从200M的Excel下手,找个高配置的机器打开看看是什么样的结构,写段代码转换到数据库里去再回那台“拖拉机”上去用你的程序处理。
nofree 2006-04-10
  • 打赏
  • 举报
回复
但客户给的文件就是这种格式,他们原始数据都是这样的。他们怎么弄来的,我也不知道。要是把大文件转成小文件,也是很麻烦的,200m的excel文件我的机器几乎都不能直接打开。
northwolves 2006-04-10
  • 打赏
  • 举报
回复
200m? 还是建议换成其他数据库,或者将EXCEL表按某规律如时间,人物,事件等分成若干小表
nofree 2006-04-10
  • 打赏
  • 举报
回复
主要程序是让客户用的,让客户换机器不大现实,就算换机器,估计速度也很慢。

难道vb就没有什么好的办法来处理大excel文件了吗?
ask999 2006-04-10
  • 打赏
  • 举报
回复
看看CPU的占用率。
ask999 2006-04-10
  • 打赏
  • 举报
回复
是不是电脑配置太低。
建议采用英特的双核处理器3.0G以上,电脑的内存扩充到1G以上,硬盘采用SCIS的。

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧