【问题标题】:Updating Multiple Rows using .edit in vba access 2007在 vba access 2007 中使用 .edit 更新多行
【发布时间】:2012-07-31 10:51:20
【问题描述】:

我希望我能问这个问题。 我在表单上有一个列表框(访问 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 中间查询的焦点。为我缺乏知识而道歉,我对visual basic还是很陌生。 请帮忙

【问题讨论】:

  • 我会,但我完全不明白文本框的用途。多列列表框选择不是您要在表格中更新的内容吗?据我了解,您不需要 .edit / .update,而是执行 INSERT 或 UPDATE SQL 语句...
  • 嗨,Kim,我正在使用列表框来选择表中需要更改的行。我正在使用文本框将信息放在这些行的列中。我遇到的问题是我在列表框中有 3 列指示需要在表中更改哪些记录,并且我似乎无法更改 listindex 中间查询的焦点,这就是为什么我认为它更容易使用 .edit/.update。感谢您的回复:-)
  • 所以你选择的每一行的(文本框)信息都是一样的?
  • 您好 TheRedOne,您可以使用代码按钮{} 格式化代码。
  • 是的,基本上我正在更新培训数据库,其中包含日期、培训师、评论……诸如此类的东西。我希望能够选择多个人并为所有人添加相同的信息..!

标签: vba ms-access


【解决方案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

【讨论】:

  • 我将尝试使用这个 Kim 谢谢。我需要一点时间才能完全理解它。只是为了解释。我从我的列表框中选择例如 3 行。我输入文本,并勾选我在表单中创建的复选框等。然后我单击一个按钮,文本、复选框信息等会更新我表中的相关行。列表框中的 Coulmns 1,3 和 4 是我需要更新表的组合键。它正在工作,但它只更新表中的第一行,而不是我选择的三行。你的帖子给了我很多思考:)
  • 顺便说一句,谢谢 remou,我没明白你的意思,但我看到你已经为我修好了 ;-)
  • 嗨,Kim,不高兴,我收到一条错误消息,提示更新语句不明确,如果我没有完全理解,请见谅:-/
  • 我做了所有这些,Kim 是的,我没有更改的唯一变量是“bSuccess = Update_Statement(sSQL_Update)”、“Update_Statement(sUpdate_Stmt)”、“db.Execute (sUpdate_Stmt) 和 Update_Statement =是的。抱歉,我昨天在你回复的时候下班了。我现在在想,如果我改变列表框的焦点并保存这些变量,然后在可能有效的 sql 语句中使用它们。希望..!:- ) "
  • 嗨,Kim,只是想让你知道我终于让它工作了。我需要使用 .Column 来更改列表框中的索引,就像您在上面的示例中一样。非常感谢您抽出时间伸出援助之手,阻止一个爱尔兰人崩溃:-)... Red
猜你喜欢
  • 2010-10-27
  • 2012-09-24
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 2018-06-24
  • 2011-11-22
相关资源
最近更新 更多