私はこれに1日苦労しています。x 項目が入力されたリスト ボックスがあります。1 - x
リスト ボックス内のすべての項目を取得し、それらを文字列にフォーマットして、Oracle データベースに送信する必要があります。SQL 側で INLIST を使用しているため、文字列に最大 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
この関数は、送信を実行する必要がある回数を取得するためのものですが、for ループ内で使用する方法について障害が発生しました
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
どんな助けでも大歓迎です。