0

我希望我能正确地问这个问题。我在表单上有一个列表框(访问 2007)并将其设置为“简单”,以便我可以多选。我正在尝试根据列表框中的选择更新表中的多个列。我有几个文本框,我想将它们用作更新表格的信息。我有一个循环,无论选择了多少项目,它都只更新表中的第一条记录。我想我明白为什么它只更新我循环中的第一条记录,但不确定

Dim db  As DAO.Database
Dim rs  As DAO.Recordset

Set db = CurrentDb()
Set rs = db.OpenRecordset("Table1", dbOpenDynaset)

Dim i As Variant

    For Each i In Listbox.ItemsSelected

    With rs
    .Edit

     !Col1 = Me.Textbox1
     !Col2 = Me.Textbox2
     !Col3 = Me.Textbox3

    .Update

    End With
    Next

我认为这是因为我没有在循环中指定要更新表的“位置”,但我不知道如何在这个循环中执行此操作。我将在列表框中(位于位置 1、3 和 4)中有 3 列,所有这些列都需要包含在内,以指定表中需要更新的记录。我也尝试过使用带有 DoCmd.RunSql 的 sql 查询,但似乎无法更改 ListIndex 中间查询的焦点。为我缺乏知识而道歉,我对视觉基础很陌生。请帮忙

4

1 回答 1

1

如果我理解正确,我将如何尝试的简化示例:

Sub MultiSelect_Listbox()

Dim lCnt as Long
dim lID as long     
dim sSQL_Update as string    

dim sText_1 as String
dim sText_2 as String
dim sText_3 as String

dim bSuccess as Boolean

sText_1 = me.txt_Textbox_1
sText_2 = me.txt_Textbox_2
sText_3 = me.txt_Textbox_3    

With Me.lst_Listbox
    For lCnt = 1 To .ListCount
        If .Selected(lCnt) Then
            lID = .Column(0, lCnt - 1)
            'Example update for 1 column
            sSQL_Update = "UPDATE T_TABLE SET COL_TEXT_1 = '" & sText_1 & "' WHERE ID = " & lID & ";"
            bSuccess = Update_Statement(sSQL_Update)
        End If
    Next
End With
End Sub

Public Function Update_Statement(sUpdate_Stmt) As Boolean

Dim db                          As Database

Set db = CurrentDb
db.Execute (sUpdate_Stmt)
Update_Statement = True

End Function
于 2012-07-31T13:05:44.673 回答