excel - 访问查询不会在工作簿关闭时运行
问题描述
我在关闭 Excel 工作簿时尝试运行 Access 删除查询。我希望 DELETE 查询删除“ResDate”字段中今天日期之前的任何记录。下面是我写的代码。工作簿关闭,但记录仍保留在数据库(TR 表)中。
我认为这会奏效,但到目前为止我还是很成功。任何有关使其正常工作的建议将不胜感激。谢谢您的帮助...……。
Const ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:\MyDatabase\TRC.mdb;Persist Security Info=False"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set Connection = New ADODB.Connection
Connection.ConnectionString = ConnectionString
Connection.Open
VSQL = "DELETE * FROM [TR] WHERE [TR].ResDate < " & Date
Set RecSet1 = Connection.Execute(VSQL, dbrows, adCmdText)
Connection.Close
Set RecSet1 = Nothing
End Sub
解决方案
始终使用参数!
当您这样做时VSQL = "DELETE * FROM [TR] WHERE [TR].ResDate < " & Date
,根据您的语言环境,这可能会导致几个问题。
例如DELETE * FROM [TR] WHERE [TR].ResDate < 2019-11-08
,, 和 2019 减去 11 减去 08 等于 2000 并且CDate(2000)
是 1905-06-22,所以这是一个有效的查询,但可能不会删除您要删除的内容。
在备用语言环境中,它可能是 2019 年 8 月 11 日,而 11 除以 8 除以 2019 大约是 0 并且CDATE(0)
是 1899-12-30。
相反,选择如何在 Microsoft Access 的不同上下文中使用 VBA 中的参数?, 例如:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set Connection = New ADODB.Connection
Connection.ConnectionString = ConnectionString
Connection.Open
VSQL = "DELETE * FROM [TR] WHERE [TR].ResDate < " & Date
With CreateObject("ADODB.Command")
Set .ActiveConnection = Connection
.CommandText = "DELETE * FROM [TR] WHERE [TR].ResDate < ?"
Set RecSet1 = .Execute(, Array(Date))
End With
Connection.Close
Set RecSet1 = Nothing
End Sub
推荐阅读
- c# - Unity AR Camera 定格和解冻
- sql-server - SQL 脚本 - 查找最高 + 1
- python - BigQuery 中数据中的少量拼写错误
- string - meson: ::1 生成 DEPRECATION: ":" is not allowed in test name, 它已被替换为 "_"
- python - python pytube urllib.error.HTTPError:HTTP 错误 404:未找到
- keras - Keras 张量整形问题(切片) add_loss 零抑制损失
- android - 无法使用 Flutter local_auth 插件进行身份验证
- java - Java 日期格式:字符串到 XMLGregorianCalendar
- typescript - 直接传入对象和在 TS 函数中作为引用之间的区别
- apache-kafka - KTable和KStream Space注意事项理解