Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: 2530786302

[已解决]请教个sql取值的问题

[复制链接]
 楼主| 发表于 2013-6-25 14:28 | 显示全部楼层
wcymiss 发表于 2013-6-25 14:19
连接语句conn.Open "dsn=excel files;dbq=" & ThisWorkbook.FullName
改成:
conn.Open "Provider=Micros ...

您好,连接语句改了,读取的数据,还是不完整呢
回复

使用道具 举报

发表于 2013-6-25 14:54 | 显示全部楼层
本帖最后由 wcymiss 于 2013-6-25 15:31 编辑

我这里测试,odbc可以读取最多255个字符,在2003环境下,oledb可以读取最多911个字符,在2010(我没有2007)环境下,oledb的jet和ace读取32767个字符都没问题。excel一个单元格最多也就支持32767个字符了。

见测试附件: 超255字符串ado读写测试.rar (10.25 KB, 下载次数: 3)
回复

使用道具 举报

 楼主| 发表于 2013-6-25 15:59 | 显示全部楼层
wcymiss 发表于 2013-6-25 14:54
我这里测试,odbc可以读取最多255个字符,在2003环境下,oledb可以读取最多911个字符,在2010(我没有2007) ...

我的数据见附件,麻烦帮忙看看,谢谢!
数据提取到 《提取的场景级指标》sheet,你看下, 指标来源表4 列表有数据的时候,一般后面的 指标算法 列都比较长,这样的数据呈现就不完整,可以与 《场景指标字典数据》sheet对比;
我在现场用的是WindowsXP ,office2007环境

学习文档.zip

39.89 KB, 下载次数: 1

回复

使用道具 举报

发表于 2013-6-25 20:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wcymiss 于 2013-6-25 20:57 编辑

啊哈,原来是数据类型在作怪。

长度不超过255的字符串,在数据库里的类型是adVarWChar,超过了就是adLongVarWChar类型。

sql结果集的数据类型,根据前8行来判断,你数据的前8行都是长度不超过255的字符串,所以该字段被默认为是adVarWChar类型,所有的数据最长只能为255个字符。
如果你数据的前8行里有超过255的字符串,该字段就会默认为是adLongVarWChar类型了,数据也会显示完整了。

这个8行在注册表里可修改,修改为0的话,系统就会根据所有的数据进行判断。不过这样运行效率将会降低不少。

代码修改:
Dim RegPath As String
RegPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows"
CreateObject("WScript.shell").RegWrite RegPath, 0, "REG_DWORD"
这三句放在打开ado之前。是针对oledb的Jet连接的。别忘了ado的连接要用jet这句才有效。

ado关闭后别忘了恢复注册表的值:
CreateObject("WScript.shell").RegWrite RegPath, 8, "REG_DWORD"
回复

使用道具 举报

发表于 2013-6-25 20:59 | 显示全部楼层
顺便说下,之前测试的字符长度911的限制,应该是2003excel本身的限制,与ado无关。如果有超出911的,最好在高版本环境下运行代码。
回复

使用道具 举报

 楼主| 发表于 2013-6-26 09:04 | 显示全部楼层
wcymiss 发表于 2013-6-25 20:59
顺便说下,之前测试的字符长度911的限制,应该是2003excel本身的限制,与ado无关。如果有超出911的,最好在 ...

非常感谢啊,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 05:01 , Processed in 0.300766 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表