|
在如下的程序取值时, 指标算法 字段值过长,取出后的单元格,只能看到部分(我看了下,只有256个字符),其他的部分就缺失了,麻烦帮忙看看,怎么修改能完整的取出数据,谢谢!- Set conn = CreateObject("ADODB.Connection")
- conn.Open "dsn=excel files;dbq=" & ThisWorkbook.FullName
- Sql = "select 所在场景,'" & scene_name & "'," & data_h & ",指标ID, 指标名称,指标类型,'','','',指标来源表1,指标来源表2,指标来源表3,指标来源表4, 指标算法 from [场景指标字典数据$a:m] where 所在场景='" & scene_type & "' "
- Sheets("提取的场景级指标").[A3].CopyFromRecordset conn.Execute(Sql)
- conn.Close: Set conn = Nothing
复制代码
本帖最后由 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"
|
|