vba - 比较表和查询
问题描述
我有一个表单、一个表(“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
解决方案
正如@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
不是最优雅的方式,但它会完成这项工作。
推荐阅读
- node.js - 传递一个 Button 值并更新数据库
- java - 从 Springboot Websocket Java Client 增加输出缓冲区
- django - Raspberry 启动 django 应用程序,同时通过 eth0 直接连接到 PC
- binding - 如何在 Vue 3 中访问 binding.expression?
- python - CUML:无法在多 GPU Dask 集群上训练随机森林模型
- python - 更改 kivy.label 的 selected 属性
- maven - 如何将项目的发布版本存储在特定属性中?
- java - 为时间戳添加 5 秒的 JUnit 测试:没有为参数 [object] 注册 ParameterResolver
- gradle - Gradle 任务将远程项目目录下载为 zip 文件并解压缩
- cron - 如何在 Prestashop 中进行 cron 工作?