Я борется с этим в течение дня. У меня есть список, заполненный элементами x. Может быть 1 - xVBA - Зацикливание через x элементов в блоках по 100 раз
Мне нужно взять все элементы в списке и форматировать их в строку , которую я отправляю в базу данных оракула. Я использую INLIST на стороне SQL, и из-за этого в моей строке может содержаться не более 100 элементов.
Так, например, если бы у меня было 547 элементов в списке, я бы перебирал все 547 элементов, но каждые 100 я отправлял в базу данных, возвращая свой результат в мой класс коллекции, заканчивая последними 47
вот что у меня есть. Есть некоторые попытки решить мою проблему в коде, поэтому, если это смущает, я попытаюсь объяснить.
Public Function SearchBMS()
On Error GoTo HandleError
Dim rst As ADODB.Recordset
Dim sESN As String
Dim i As Integer
Dim x As Integer
Dim maxrec As Integer
Dim itemcnt As Integer
Dim iBlockCount As Integer
With frmEngineCampaignSearch.lstbxESNNumbers
itemcnt = .ListCount - 2
'iBlockCount = GetBlockCount(itemcnt)
x = 0
maxrec = 100
Debug.Assert itemcnt = 200
For i = 0 To itemcnt
For x = i To maxrec
MsgBox "test", vbOKOnly
i = i + 100
Next x
If i = itemcnt Then ' if I = last item than we put the closing parenthesis on our string
sESN = sESN & "'" & .list(i) & "'"
Else
sESN = sESN & "'" & .list(i) & "' , " ' otherwise there are more items so we seperate by comma
End If
If itemcnt <= 100 Then
Set rst = Nothing
'Set rst = rstGetCustomerInfo(sESN)
'LoadRSTToCollection rst
elseif
While x = maxrec
MsgBox "submit first 100", vbOKOnly
'Set rst = Nothing
'Set rst = rstGetCustomerInfo(sESN)
'LoadRSTToCollection rst
sESN = gC_sEMPTY_STRING
maxrec = maxrec + 100
Wend
x = x + 1
Next i
End With
HandleError:
If Err.Number > 0 Then
MsgBox Err.Number & ": " & Err.Description
End If
Эта функция, чтобы получить число раз я должен был бы выполнить представление, но я ударил дорожный блок, как использовать его в цикл
Public Function GetBlockCount(ByRef lItemCnt As Long) As Integer
Dim x As Double
If lItemCnt <= 100 Then
GetBlockCount = 1
Exit Function
ElseIf lItemCnt > 100 Then
x = Round(lItemCnt/100)
If lItemCnt Mod 100 > 0 Then
x = x + 1
Else
GetBlockCount = x
Exit Function
End If
End If
End Function
Любая помощь будет много оценили.
не ответ на ваш вопрос, но это может помочь вам: в Oracle, вы можете сделать несколько ВХОДОВ, чтобы обойти ограничение 100 элемента , Например: 'x in (....) или x in (....) или x in (...)'. – Joe
Разве вы не можете разделить свой счет на 100 и определить, является ли результат целым? Это будет только целое число, когда ваш счет равен 100, 200, 300 и т. Д. Затем обработайте код, если результат является целым числом, иначе продолжите добавление. –