1

Access のリスト ボックスから選択した複数のレコードを削除する必要があります。非複数選択リストボックスから選択した 1 つのレコードを削除する SQL と VBA がありますが、複数選択リストボックスから複数の選択レコードを削除するようにコードを適応させることはできません。現状のコードは次のとおりです。ボタンの On_Click イベントにアタッチされ、リストボックスは listboxname と呼ばれます。

Private Sub DeleteSelected_Click()
    Dim lngID As Long
    Dim strSQL As String

    If IsNull(ListBoxName) Then
        Exit Sub
    End If

    With Me.ListBoxName

    lngID = ListBoxName.Value

    strSQL = "DELETE * FROM [tablename] WHERE [tablefieldname] =" & lngID

    CurrentDb.Execute strSQL

    ListBoxName.Requery

    End With
End Sub

設定してみた

lngID = ListBoxName.Value

lngID = ListBoxName.ItemsSelected(0)

また

lngID = ListBoxName.Columns(0)

無駄に。SQL に問題があるようですが、修正方法がわかりません。何か案は?

編集:それはとてもクールです:)乾杯ベリアル。ここに更新されたコードがあります

    Private Sub DeleteSelected_Click()
    Dim strSQL As String
    Dim vItem As Variant
    Dim strSet As Long

    If IsNull(ListBoxName) Then
        Exit Sub
    End If

    With Me.ListBoxName
      For Each vItem In .ItemsSelected
                If Not IsNull(vItem) Then
                    strSet = strSet & "," & .ItemData(vItem)
                End If
            Next
        End With

    strSQL = "DELETE FROM Carers WHERE Carer_ID IN (" & strSet & ")"

    CurrentDb.Execute strSQL

    ListBoxName.Requery

    End Sub

私がこれを正しくしていることを願っています

4

2 に答える 2

1

クエリの 1 つの SQL エラーを次に示します。

strSQL = "DELETE FROM [tablename] WHERE [tablefieldname] =" & lngID

の必要はありません*

とにかく、ここにあなたができる別の方法があります:

選択したアイテムを,カンマ区切りの文字列に取得し、IN演算子を使用して一度にすべて削除します。

Dim vItem as Variant
Dim strSet as String
//Loop through the ItemsSelected in the list box    
    With Me.ListBoxName
        For Each vItem In .ItemsSelected
            If Not IsNull(vItem) Then
                strSet = strSet & "," & .ItemData(vItem) 
            End If
        Next
    End With
strSQL = "DELETE FROM [tablename] WHERE [tablefieldname] IN (" & strSet & ")"
于 2013-02-27T09:32:21.543 に答える
0

* を DELETE ステートメントから削除します。

strSQL = "DELETE FROM [tablename] WHERE [tablefieldname] =" & lngID

選択したアイテムを反復するには、次のようなものを使用します

For i = 0 To ListBox1.ListCount - 1
      If ListBox1.Selected(i) Then
         Msg = Msg & ListBox1.List(i) & vbNewLine
     End If
Next i

見る

反復: http://www.java2s.com/Code/VBA-Excel-Access-Word/Forms/GettheselecteditemsinaListBox.htm

削除ステートメント: http://msdn.microsoft.com/en-us/library/office/ff845201(v=office.14).aspx

それは今動作しますか?

編集

これは私の意見では常に真実であるため、何も起こらないと思います(試してみました)。

If IsNull(ListBoxName) Then
    Exit Sub
End If

これを試して

Dim strSQL As String
Dim vItem As Variant

With Me.ListBoxName
    For Each vItem In .ItemsSelected
        If Not IsNull(vItem) And Not CStr(vItem) = vbNullString Then
            strSQL = "DELETE FROM Carers WHERE Carer_ID = " & CLng(vItem)
            CurrentDb.Execute strSQL
        End If
    Next
End With

ListBoxName.Requery
于 2013-02-27T09:30:47.157 に答える