MS Access DAO Соединение Отменить изменения при выходе - PullRequest
0 голосов
/ 16 марта 2019

Итак, у меня есть эта форма доступа, где я использую этот код VBA с подключением DAO к базе данных MySQL.Все отлично работает, но если пользователь закрывает форму, не нажимая кнопку «Сохранить», новая запись все равно сохраняется.

Итак, что я ищу, так это если есть какое-либо событие при закрытии, я могу остановить новыйзапись сохраняется в базе данных?

Код, который у меня есть,

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 голосов
/ 17 марта 2019

Рассмотрим другой подход, при котором пользователи вводят несвязанную форму и нажимают кнопку сохранения, чтобы обновить таблицу MySQL из заполненных полей.Выход из формы без сохранения ничего не даст.Это также более упреждающий подход, поскольку он позволяет проверять валидацию и другую логику перед выполнением действия сохранения.

Ниже используется параметризованный запрос на добавление с QueryDefs.Также предполагается, что 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
...