我有一个表格,一个表(“ 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
答案 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
这不是最优雅的方法,但可以完成工作。