Событие при нажатии кнопки команды не обновляется для разных записей в одной форме - PullRequest
0 голосов
/ 01 октября 2018

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

Некоторые пользователи будут назначать существующие контакты новой группе, а некоторые пользователи будут добавлять новые контакты в существующую группу, поэтому я хочу, чтобы форма, устанавливающая отношения между контактами и группами, существовала независимо от формы контактов илигруппы формируются.Вот почему я не просто создал подчиненную форму в форме контактов.Я не знаю, в каком направлении будут двигаться мои пользователи при редактировании отношений, и в идеале я хотел бы настроить систему, в которой форма, из которой приходит пользователь, создаст новую запись с одним из двух полей (контакт игруппа) автоматически заполняется в зависимости от «родительской» формы.То есть, если мой пользователь обращается к форме отношений из формы контакта, я увижу новую запись с заполненным ContactID и смогу выбрать группу.Точно так же, если пользователь обращается к форме отношений из формы группы, эта группа будет заполнена, и пользователь выберет контакт.

У меня есть следующая подпрограмма При щелчке моей кнопки команды в форме контактов:

Private Sub CmdAssignContactGroup_Click()
    DoCmd.OpenForm "frmContacts_Groups", , , , acFormPropertySettings
    [Forms]![frmContacts_Groups]![ContactID] = [Forms]![frmContacts]![ContactID]
End Sub

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

Как я могу сказать командной кнопке сбросить после изменения записей в форме контакта?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

В этом ответе используются DefaultValue и свойство Locked элемента управления для закрепления ContactID (если форма открывается с помощью frmContacts) или GroupID (если форма открывается с помощью frmGroups)к открывающимся значениям формы.

Я предполагаю два ComboBox в frmContacts_Groups, которые связаны с их ID s, но отображают имена клиентов / групп с именами cboContactID и cboGroupID.

Код в frmContacts_Groups:

Private Sub Form_Load()
  Dim OpeningID As Long

  Select Case Me.Openargs
    Case "frmContacts"
      OpeningID = Nz(Forms!frmContacts!ContactID,0)  ' Nz to prevent errors on empty opening form
      Me.Filter = "ContactID = " & OpeningID
      Me.cboContactID.DefaultValue = OpeningID
      Me.cboContactID.Locked = True
      Me.cboGroupID.DefaultValue = vbNullString
      Me.cboGroupID.Locked = False
    Case "frmGroups"
      OpeningID = Nz(Forms!frmGroups!GroupID,0)
      Me.Filter = "GroupID = " & OpeningID
      Me.cboContactID.DefaultValue = vbNullString
      Me.cboContactID.Locked = False 
      Me.cboGroupID.DefaultValue = OpeningID
      Me.cboGroupID.Locked =True 
    Case Else
      Me.cboContactID.DefaultValue = vbNullString
      Me.cboContactID.Locked = False 
      Me.cboGroupID.DefaultValue = vbNullString
      Me.cboGroupID.Locked =False
      Me.Filter = vbNullString
   End Select
   Me.FilterOn = Len(Me.Filter) > 0
End Sub

Код для открытия в frmContacts:

Private Sub CmdAssignContactGroup_Click()
  If Not CurrentProject.AllForms("frmContacts_Groups").IsLoaded then
    DoCmd.OpenForm FormName:="frmContacts_Groups", OpenArgs:="frmContacts"
  Else
    Msgbox "frmContacts_Groups is allready opened! What should we do?"
  End If
End Sub
0 голосов
/ 01 октября 2018

Ваше условие where относится не к открываемой форме, а к открытой в данный момент форме, так как вы ссылаетесь ContactID на [Forms]![frmContacts_Groups]![ContactID].Т.е. вы передаете результат сравнения открытых в настоящее время форм (True или False) вместо передачи условия, которое будет оцениваться открывающей формой.

Вы должны передать это условие в виде текстакак "ContactID = 10".

Dim condition As String

condition = "ContactID = " & Me!ContactID
DoCmd.OpenForm "frmContacts_Groups", WhereCondition:=condition

Поскольку ContactID находится в той же форме, вы можете получить к нему доступ с помощью Me!ContactID.Также похоже, что вы ошибочно передаете условие в качестве параметра WindowMode.

Также убедитесь, что свойства формы frmContacts_Groups

AllowEdits = Yes
AllowDeletions = No
AllowAdditions = No

и наиболее важны!

DataEntry = No

Если DataEntry равно Yes, то форма перейдет к новой записи!

Перед открытием формы вы также можете позвонить

DoCmd.Close acForm, "frmContacts_Groups"

чтобы убедиться, что предыдущие правки, возможно, все еще открытой формы не мешают новым правкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...