MS Access, добавить запись, если она не в списке

У меня есть форма с полем со списком. Поле со списком связано с таблицей. Когда я добавляю элемент, которого нет в Таблице/Списке - я спрашиваю, хочу ли я добавить новый элемент - Если да, открывается другая форма с новым элементом уже в одном из ящиков.

Связанная таблица содержит больше полей. Открывающаяся форма содержит эти поля - но при открытии они пусты - данных нет. Поля не являются обязательными.

Проблема: данные не сохраняются, если я только закрываю форму. Если я ввожу данные в одно из полей, данные сохраняются.

Как я могу принудительно обновить/сохранить, даже если я только закрываю/сохраняю форму....

Существующий код:

Private Sub Form_Open(Cancel As Integer)
    Dim strFirstName As String, strLastName As String
    
    If Not IsNull(Me.OpenArgs) Then
        If Me.OpenArgs <> "New Contact" Then
            Forms("NKTPersonnelF").PersName.DefaultValue = """" & Me.OpenArgs & """"


        End If
    End If
End Sub

Private Sub cmdClose_Click()
    
    DoCmd.RunCommand acCmdSaveRecord
    On Error Resume Next
    If Me.Dirty Then Me.Dirty = False

    
    If Err.Number = 0 Then
        DoCmd.Close acForm, Me.Name
    End If
    
End Sub
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Когда вы открываете форму с новым элементом, просто установите Me.Dirty = True в событии OnOpen.

Привет! Пытался добавить: Me.Dirty = True. Но потом получаю сообщение об ошибке... «Чтобы изменить данные через эту форму, фокус должен находиться в связанном поле, которое можно изменить». Private Sub Form_Open(Cancel As Integer ) Dim strFirstName как строка, strLastName как строка Если не IsNull(Me.OpenArgs) Тогда Если Me.OpenArgs <> "Новый контакт" Тогда Forms("NKTPersonnelF").PersName.DefaultValue = """" & Me.OpenArgs & " """ Me.Dirty = True End If End If End Sub

Bobbo 10.03.2024 13:06

... а потом я посмотрел сообщение об ошибке, добавил строку «DoCmd.GoToControl «Отдел»» - и все заработало!

Bobbo 10.03.2024 13:21

В качестве альтернативы вы также могли бы использовать Department.SetFocus, который лично я считаю более чистой альтернативой DoCmd.

BobS 11.03.2024 21:49
Ответ принят как подходящий

Попробуйте использовать этот пример. Причина, по которой я использую запрос параметров, заключается в том, что он очень хорошо работает с кавычками. в то время как большинство других методов терпят неудачу.

Private Sub Combo1_NotInList(NewData As String, Response As Integer)

      Dim qdf  As DAO.QueryDef
    Dim strtmp As String, strSQL As String
        strtmp = " Add " & NewData & "  As new item in the list ? "
 
    If MsgBox(strtmp, vbYesNo + vbDefaultButton2 + vbQuestion, "Not in the list") = vbYes Then
         strSQL = "INSERT INTO tblKatzinMR ( KatzinMR, Katzin ) SELECT [KatzinMR], [Katzin]"
    Set qdf = CurrentDb.CreateQueryDef("", strSQL)
          qdf.Parameters("KatzinMR").Value = Now()
         qdf.Parameters("Katzin").Value = Trim(NewData)
           qdf.Execute
            qdf.Close
      Set qdf = Nothing
                   
        'Notify Access about the new record, so it requeries the combo.
        Response = acDataErrAdded
        
        Else
        Response = acDataErrContinue
      End If
End Sub

Это сработало! Мой вопрос был плохо сформулирован, так что это был не тот ответ, который мне был нужен. Но он поможет мне решить мою следующую проблему, так что спасибо!!

Bobbo 10.03.2024 13:35

Другие вопросы по теме

Похожие вопросы