Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vba access 2007中使用.edit更新多行_Vba_Ms Access - Fatal编程技术网

在vba access 2007中使用.edit更新多行

在vba access 2007中使用.edit更新多行,vba,ms-access,Vba,Ms Access,我希望我能问得对。 我在表单(access 2007)上有一个列表框,并将其设置为“简单”,以便我可以进行多选。 我试图根据列表框中的选择更新表中的多个列。我有几个文本框,我想用它们作为更新表的信息。 我有一个循环,它只更新表中的第一条记录,不管选择了多少项。 我想我理解为什么它只更新我循环中的第一条记录,但我不确定 Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRec

我希望我能问得对。 我在表单(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 mid查询的焦点。对于我知识的缺乏,我对VisualBasic是相当陌生的。请帮助

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

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

我会的,但我完全不明白文本框有什么用。您不想在表中更新多列列表框选择吗?据我所知,您不需要.edit/.update,只需要执行INSERT或update SQL语句……Hiya Kim,我正在使用列表框选择表中需要更改的行。我使用文本框将信息放入这些行的列中。我遇到的问题是,列表框中有3列指示表中哪些记录需要更改,而我似乎无法更改listindex mid查询的焦点,这就是为什么我认为使用.edit/.update更容易的原因。谢谢回复:-)所以你选择的每一行都有相同的(文本框)信息?您好,您可以使用代码按钮
{}
格式化代码。是的,基本上我正在用日期、培训师、评论更新培训数据库。。。诸如此类。我希望能够选择多个人,并为所有人添加相同的信息。。!我要试着利用这个,谢谢。我需要一点时间才能完全理解它。只是解释一下。我从列表框中选择例如3行。我输入文本,并勾选复选框等。。这是我在表单中创建的。然后我点击一个按钮和文本,复选框信息等。。更新我的表中的相关行。列表框中的Coulmns 1、3和4是我需要更新表的组合键。它正在工作,但它只更新表中的第一行,而不是我选择的三行。你的帖子让我思考了很多:)顺便说一句,谢谢remou,我不知道你的意思,但我知道你已经帮我修好了;-)嗨,Kim,不高兴,我收到一个错误,说update语句不明确,如果我没有正确理解,很抱歉:-/I做了Kim所做的一切是的,我没有更改的唯一变量是“bSuccess=update\u statement(sSQL\u update)”,“update\u statement(sUpdate\u Stmt)”,“db.Execute(sUpdate\u Stmt)”和Update_Statement=True。抱歉,我昨天在您回复时离开了工作。我现在在想,如果我改变列表框的焦点并保存这些变量,然后在sql语句中使用它们,这可能会起作用。这里希望…!:-“嗨,Kim,让你知道我终于让它起作用了。我需要使用上面示例中的.Column来更改列表框中的索引。非常感谢你花时间帮我一把,阻止一个爱尔兰人崩溃:-)。。。红色