0

この権利を求めることができれば幸いです。フォーム (access 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

これは、テーブルを更新するループで「where」を指定していないためだと思いますが、このループでこれを行う方法がわかりません。テーブル内のどのレコードを更新する必要があるかを指定するために、リストボックスに 3 つの列 (位置 1、3、および 4) を含める必要があります。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 に答える