0

lbA と lbB の 2 つのリストボックスがあります。正常に動作する SQL スクリプトを使用して lbA にデータを入力しています。今私がやりたいことは、lbA からアイテムを選択すると、SQL スクリプトから lbB が再び読み込まれることです。lbA から 1 つのアイテムのみを選択し、2 つ以上のアイテムを選択するか、アイテムの選択を解除すると機能し、繰り返しアイテムを追加するか、lbB からアイテムを削除しません。私はこれにどのようにアプローチするかについて困惑しています。誰でも助けてもらえますか?

これまでのコードは次のとおりです。

Private Sub lbA_Change() 
    Dim Num As Integer 
    Dim lngIndex As Long 

    If Me.lbA.ListIndex <> -1 Then 
        For lngIndex = 0 To lbA.ListCount - 1 
            If lbA.Selected(lngIndex) Then 


                Dim cnPubs As ADODB.Connection 
                Set cnPubs = New ADODB.Connection 
                Dim strConn As String 
                strConn = "PROVIDER=SQLOLEDB;" 
                strConn = strConn & "DATA SOURCE=MSSQLSERVER2008;INITIAL CATALOG=MyDB;" 
                strConn = strConn & " INTEGRATED SECURITY=sspi;" 
                cnPubs.Open strConn 
                Dim rsPubs As ADODB.Recordset 
                Set rsPubs = New ADODB.Recordset 
                With rsPubs 
                    .ActiveConnection = cnPubs 
                    .Open "My SQl Statement" 
                End With 
                If rsPubs.EOF Or rsPubs.BOF Then 
                    Exit Sub 
                End If 
                rsPubs.MoveFirst 
                With Me.lbB 
                    .Clear 
                    Do 
                        .AddItem rsPubs![strName] 
                        rsPubs.MoveNext 
                    Loop Until rsPubs.EOF 
                End With 
                rsPubs.Close 

            End If 
        Next 
    End If 
End Sub
4

1 に答える 1

1

このような関数を試して、SQL ステートメントを取得してください。

Function GetSQLFromListbox(lbx As MSForms.ListBox)

    Dim i As Long
    Dim sIn As String

    If lbx.ListIndex <> -1 Then
        sIn = " WHERE field IN("
        For i = 0 To lbx.ListCount - 1
            If lbx.Selected(i) Then
                sIn = sIn & "'" & lbx.List(i) & "',"
            End If
        Next i
        sIn = Left$(sIn, Len(sIn) - 1) & ")"
    End If

    GetSQLFromListbox = "SELECT * FROM table" & sIn

End Function

次のようなものを返す必要があります

SELECT * FROM table WHERE field IN('2''3')

次に、そのステートメントからレコードセットを作成し、それをループ処理して 2 番目のリスト ボックスに入力します。何も選択されていない場合は、WHERE 句なしで SQL が返されるため、すべてが取得されることに注意してください。状況に合わせて調整する必要があるかもしれません。

于 2012-10-30T21:53:17.927 に答える