首页 > 解决方案 > 比较表和查询

问题描述

我有一个表单、一个表(“my_table”)和一个查询(“my_query”)。

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

我复制并修改了这段代码。我的代码导致错误(必须翻译):“运行时错误'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

标签: vbams-access

解决方案


正如@Harassed Dad 和@Andre 建议的那样,我只是复制了“my_query”并将副本更改为更新查询“my_updatequery”,其中“my_Property”的更新字段设置为[Forms]![My_Form]![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

不是最优雅的方式,但它会完成这项工作。


推荐阅读