比较表和查询

时间:2019-07-08 09:58:45

标签: vba ms-access access-vba

我有一个表格,一个表(“ my_table”)和一个查询(“ my_query”)。

我想让一个函数查看表的记录的任何ID(“ my_ID”)是否与查询的ID(也“ my_ID”)匹配,以使用来自的值更新给定记录的字段(“ my_Property”)表格。

我复制并修改了this code。我的代码导致错误(必须翻译):“运行时错误'3061':预期有1个参数,但传递的参数太少。”

我认为问题是在if循环中,我没有将tbl.Fields(“ my_ID”)与一个谨慎的值进行比较,而没有将其与一个设定值进行比较。也许我也应该遍历qry.Fields(“ my_ID”)的所有值,但是我看不到如何编写代码。另外,由于my_Table包含40,000多个记录,因此这将大大减慢已经很慢的过程。有没有比较ID的更快方法?

Private Sub btn_Click()
    Dim db As Database
    Set db = CurrentDb

    Dim tbl As Recordset
    Set tbl = db.OpenRecordset("my_Table")

    Dim qry As QueryDef
    Set qry = db.OpenRecordset("my_Query")

    tbl.MoveFirst
    Do Until tbl.EOF
            If tbl.Fields("my_ID") = qry.Fields("my_ID") Then
                tbl.Edit
                tbl.Fields("my_Property") = Me!textbox1.Value
                tbl.Update
            End If
        tbl.MoveNext
    Loop
End Sub

1 个答案:

答案 0 :(得分:0)

正如@Harassed Dad和@Andre建议的那样,我只是复制了“ my_query”,并将副本更改为更新查询“ my_updatequery”,并将“ my_Property”的更新字段设置为 [表格]![我的表格]![tbx_my_Value]。然后,将按钮的代码更改为:

Private Sub btn_Click()
        DoCmd.OpenQuery "my_updatequery"
        Forms.my_Form.Subform2.Requery
End Sub

Forms.my_Form.Subform2.Requery基本上更新了一个显示“ my_query”查询的子表单。

我将进一步寻找另一种调用更新查询的方法,以避免总是出现打开更新查询的两个提示。

编辑:

为了避免这些提示,我只是简单地关闭并再次打开“警告”:

Private Sub btn_Click()
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "my_updatequery"
    DoCmd.SetWarnings True
    Forms.my_Form.Subform2.Requery
End Sub

这不是最优雅的方法,但可以完成工作。