【VBA】使用SQL查询字符串时,长度超过255时被截断问题

最近在写一个VBA工具时,遇到一个比较怪异的问题,由于工具使用了ADODB方式查询(在VBA中使用SQL操作方式)处理数据,出现部分单元格的内容被固定的截断了。

 

经过多方查找原因,最后在一些博客中发现了可能存在的原因为Excel使用ADODB操作时,默认会以前8行数据来判断整列的数据类型及结构,包括字符串的长度。如果第9行开始出现都大于前8行中最长的单元格内容时,将会被截断。

 

解决方案是需要修改注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows 值为更大,但此参数只支持最大16(如果设置为0,则会扫描所有行,大数据时慎重)。

 

此方法暂未验证,明天到公司使用真实数据验证一下。

 

微软官方的问题解决方案:http://support.microsoft.com/kb/189897/

 

 

同时,也有其他同学遇到了插入数据库,发现字段被截断的问题,给出的解决方案是替换单元格内容中所有的单引号,因为单引号在数据库中作为关键字使用,可能内容被提前结束导致字段被截断。

Public Function FormatSql(ByVal strValue As String) As String
100 On Error GoTo errhandle
     
        Const TAG1 As String = "'"
        Const TAG2 As String = "''"
     
        '将一个单引号'替换成两人单引号''
        '如  a'b'c  --> a''b''c
        '    a''b   --> a''''b
102     FormatSql = Replace(strValue, TAG1, TAG2)
     
        Exit Function
     
errhandle:
104     Call PutLog( Erl, Err.Description)
End Function

 CSDN:http://bbs.csdn.net/topics/190013271

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值