Требование текстовых полей сразу после того, как другое текстовое поле изменяет значение в Microsoft Access - PullRequest
0 голосов
/ 14 сентября 2018

Я создаю форму с несколькими подчиненными формами.Это работает так:

  1. пользователь выбирает BASIC вверху
  2. , что делает текстовые поля MACHINE NAME, TOOL SEQUENCE NO., TOOL NO.TOOL DESCRIPTION изменить.
  3. Текстовые поля MACHINE DESCRIPTION и MACHINE TYPE внизу зависят от MACHINE NAME, что означает, что
  4. при изменении имени машины описание и тип машины должны немедленноменять.

Я использовал запросы, чтобы описать отношения между BASIC и MACHINE NAME и между MACHINE NAME и MACHINE DESCRIPTION.

В итоге происходит то, что когда я меняю BASIC, MACHINE NAME меняется, но MACHINE DESCRIPTION не меняется сразу.MACHINE DESCRIPTION изменяется только после второго раза, когда я изменяю BASIC (и он меняется на MACHINE DESCRIPTION, соответствующий MACHINE NAME, выбранному ранее).

Я полагаю, это потому, что MACHINE DESCRIPTION ждет, пока MACHINE NAME не будет изменен для запроса данных, что объясняет, почему значение для описания машины "задерживается" одним щелчком мыши.

Как мне изменить MACHINE DESCRIPTION, как только изменится MACHINE NAME?

Я открыт для использования кода VBA, если это необходимо.

Form

Query 1

Query 2

1 Ответ

0 голосов
/ 14 сентября 2018

VBA часто называют языком триггера, так как он часто используется в ответ на события в приложении, которые для библиотеки объектов MS Access включают AfterUpdate, OnOpen, ButtonClick и т. Д. В объектах графического интерфейса, таких какформ и отчетов, и может даже распространяться на вызываемые функции в макросах и модулях.

Поскольку у вас есть подчиненные формы, отображающие наборы результатов «моментального снимка» для экрана, полученного из запросов с параметрами, указывающими на значения формы, рассмотрите фактический запрос подчиненных форм после сохраненияпользовательская запись с Form.Requery для новых «снимков».На самом деле, удивительно, любая субформа была обновлена ​​без Form.Requery!

Поместите приведенный ниже код VBA в событие AfterUpdate позади своего текстового поля BASIC .Не повторяйте Public Sub и End Sub.Это выполнит цикл по всем подчиненным формам с использованием свойства Forms.Controls вашей главной формы после обновления значений в записи BASIC .

Private Sub BASIC_AfterUpdate()
     Dim ctrl As Control

     ' SAVE CURRENT RECORD
     DoCmd.RunCommand acCmdSaveRecord 

     ' REQUERY ALL SUBFORMS
     For Each ctrl in Me.Form.Controls
          If ctrl.Type = acSubform Then
              Me.Form.Controls(ctrl.Name).Form.Requery
          End If
     Next ctrl

     Set ctrl = Nothing
End Sub
...