У меня был некоторый существующий код VBA, который строил запросы с использованием конкатенации строк. Я обновил код, чтобы вместо него использовать объект команды с параметром, но затем начал время от времени получать сообщение об ошибке «1001 *». Изучив его, я обнаружил, что если моя коллекция строк начинается со строки, меньшей, чем остальные, то произойдет сбой, когда она достигнет более длинной строки. Чтобы это работало, я просто добавил немного кода, чтобы отсортировать коллекцию от самой большой до самой маленькой. Это достаточно просто для этого примера, поскольку я знаю, что у меня будет не более нескольких строк, но если у меня когда-либо будет большая коллекция строк, это может быть проблемой.
Есть ли другой способ, кроме сортировки коллекции? Ниже приведен раздел кода, который вызывает проблему.
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