我有一些现有的VBA代码正在使用字符串连接构建查询。我更新了代码以使用带有参数的命令对象,但之后每隔一段时间就开始收到一个错误String data, right truncation
。在调查之后,我发现如果我的字符串集合以小于其余字符串的字符串开头,那么当它到达更长的字符串时它将失败。为了使它工作,我只是添加了一些代码来从最大到最小的排序集合。这个例子很容易,因为我知道我不会有多个字符串,但如果我有更多的字符串集合,那可能是个问题。
除了整理收藏品之外还有其他方法吗?以下是导致问题的代码部分。
Dim lineNumbers As New Collection
Dim cnDb as new ADODB.Connection
Dim cmd as new ADODB.Command
Dim rs as new ADODB.RecordSet
lineNumbers.Add "001-3""-5116323-ABA"
lineNumbers.Add "001-1""-5116327-ABA-1 1/2""C" ' If not sorted, it fails when it tries this one
lineNumbers.Add "001-1""-5116327-ABA"
lineNumbers.Add "001-1""-5116327-ABA-1""C"
sQry = "SELECT COUNT(commondatalink) FROM commondata WHERE reportedlineno = ?"
cmd.ActiveConnection = cnDb
cmd.CommandText = sQry
cmd.CommandType = adCmdText
For i = 1 To lineNumbers.Count
Set rs = cmd.Execute(, Array(lineNumbers(i))) ' Error thrown here on unsorted list
If rs(0) > 1 Then
' do something...
End If
Next i
答案 0 :(得分:0)
似乎你无法重复使用这样的命令对象:第一次运行它可能会推断参数类型/长度,如果后续调用使用更长的值来触发错误。
您可以尝试使用cmd.CreateParameter()显式创建参数,并将大小设置为要查询的字段的大小(或稍大)