MS Access DAO 连接在退出时放弃更改
Posted
技术标签:
【中文标题】MS Access DAO 连接在退出时放弃更改【英文标题】:MS Access DAO Connection Discard Changes On Exit 【发布时间】:2019-08-07 13:30:42 【问题描述】:所以我有这个访问表单,我在其中使用这个 VBA 代码和一个到 mysql 数据库的 DAO 连接。一切正常,但如果用户在没有点击保存按钮的情况下关闭表单,则无论如何都会保存新记录。
那么我正在寻找的是,是否有任何方法可以在关闭事件时阻止将新记录保存到数据库中?
我的代码,
Private Sub Form_Load()
'Set Form Recordset
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim SQL As String
Set db = OpenDatabase("", False, False, Globales.ConnString)
SQL = "SELECT tbl6Suplidores.ID, tbl6Suplidores.NombreSuplidor, tbl6Suplidores.NumeroComerciante, tbl6Suplidores.DescripcionBienes, tbl6Suplidores.NombreContacto, tbl6Suplidores.NumeroTelefono, tbl6Suplidores.Email " _
& "FROM tbl6Suplidores;"
Set rs = db.OpenRecordset(SQL, dbOpenDynaset, dbAppendOnly)
Set Me.Form.Recordset = rs
End Sub
我在想,既然我使用了dbAppendOnly
,它不会让我在关闭事件时删除当前记录?
欢迎任何想法! 谢谢!
【问题讨论】:
为什么要使用代码来填充表单?考虑到 MySQL 的链接表,然后将表单绑定到链接表并使用内置表单功能处理任何添加/编辑/删除。 好吧,我尝试了链接表,但这并不是我真正想要的方法。通过这种方式,可以只分发 Access 文件,而无需在每台计算机上设置 odbc 连接。用户也无权访问这些表。一切都很好,除了这个小东西。 您可以使用代码动态链接表格。见DoCmd.TransferDatabase。 【参考方案1】:考虑一种不同的方法,让用户输入未绑定的表单并单击保存按钮以从填充字段更新 MySQL 表。不保存就退出表单将无济于事。这也是一种更主动的方法,因为它允许您在运行保存操作之前检查验证和其他逻辑。
下面使用带有 QueryDefs 的 parameterized append query。此外,ID 被假定为自动编号,因此被排除在查询之外。 Sub 应该放在保存按钮的 OnClick 触发事件后面。
Private Sub SaveButton_Click()
Dim db As DAO.Database, qdef As DAO.QueryDef
Dim SQL As String
Set db = OpenDatabase("", False, False, Globales.ConnString)
' PREPARED STATEMENT WITH NAMED PARAMETERS
SQL = "PARAMETERS ns_param VARCHAR(255), ncom_param INTEGER, db_param VARCHAR(255), " _
& " ncnt_param INTEGER, nt_param INTEGER, e_param VARCHAR(255);" _
& " INSERT INTO (NombreSuplidor, NumeroComerciante, DescripcionBienes, " _
& " NombreContacto, NumeroTelefono, Email) " _
& " VALUES (ns_param, ncom_param, db_param, ncnt_param, nt_param, e_param);"
' INITIALIZE QUERYDEF
Set qdef = db.CreateQueryDef("", SQL)
' BIND PARAMETERS TO FORM FIELDS
qdef!ns_param = Forms!MyFormName!NombreSuplidor
qdef!ncom_param = Forms!MyFormName!NumeroComerciante
qdef!db_param = Forms!MyFormName!DescripcionBienes
qdef!ncnt_param = Forms!MyFormName!NombreContacto
qdef!nt_biens_param = Forms!MyFormName!NumeroTelefono
qdef!e_param = Forms!MyFormName!Email
' RUN ACTION QUERY
qdef.Execute dbFailOnError
Set qdef = Nothing
End Sub
【讨论】:
以上是关于MS Access DAO 连接在退出时放弃更改的主要内容,如果未能解决你的问题,请参考以下文章
使用 DAO 在 Ms Access 中打开记录集时使用 With...End
DAO.DBEngine 类不再使用 Windows 10 在 MS Access 2016 中注册
使用 ODBC 链接到 MySql 时,MS Access 表单不刷新