MS Access DAO连接在退出时放弃更改

时间:2019-03-16 18:17:43

标签: mysql vba ms-access dao

因此,我具有此访问表单,在其中使用此VBA代码以及与MySQL数据库的DAO连接。一切都很好,但是如果用户在不单击“保存”按钮的情况下关闭表单,则无论如何都会保存新记录。

所以我要寻找的是,是否有某种方法可以在on close事件中停止将新记录保存到数据库中?

我拥有的代码

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以来,它不会让我仅在关闭事件时删除当前记录吗?

欢迎任何想法! 谢谢!

1 个答案:

答案 0 :(得分:0)

考虑另一种方法,您可以让用户输入一个未绑定的表单,然后单击“保存”按钮以从填充字段中更新MySQL表。不保存就退出表格将无济于事。这也是一种更主动的方法,因为它允许您在运行保存操作之前检查验证和其他逻辑。

以下在QueryDefs中使用parameterized append query。同样,ID被认为是一个自动编号,因此不在查询之列。子应该放在保存按钮的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