MS Access DAO Connection Discard Changes On Exit

穿精又带淫゛_ 提交于 2019-12-20 07:05:35

问题


So I have this Access form where I use this VBA code with a DAO connection to a MySQL database. Everything works great but if the user closes the form without clicking save button the new record is saved anyway.

So what I'm looking for is if there's any way the on the on close event I can stop the new record being saved to the database?

The code I have,

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

I'm thinking that since I used the dbAppendOnly it won't let me just delete current record on close event?

Any ideas welcome! Thanks!


回答1:


Consider a different approach where you have users enter an unbound form and click a save button to update the MySQL table from populated fields. Exiting form without save will do nothing. This is also a more proactive approach as it allows you to check validation and other logic prior to running save action.

Below uses a parameterized append query with QueryDefs. Also, ID is assumed to be an autonumber and hence left out of query. Sub should be placed behind the OnClick trigger event of save button.

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


来源:https://stackoverflow.com/questions/55200046/ms-access-dao-connection-discard-changes-on-exit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!