Окно контактных данных в MS Access? - PullRequest
0 голосов
/ 23 января 2011

В настоящее время я использую шаблон MS Access 2010 для контактов. Я изменил его, чтобы выполнить поиск по нескольким критериям, но он все тот же. Что я хотел бы знать, так это как изменить окно контактной информации, которое открывается, когда вы нажимаете «открыть».

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

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

EDIT:

Хорошо, я только что попытался создать клон, но все, что я получаю, это ошибка "3251 - эта операция не поддерживается для этого типа объекта. Я относительно новичок в коде VBA, так что это довольно сложно чтобы найти проблемы, но я предполагаю, что это как-то связано с типом набора записей (DAO или ADO). Вот что у меня есть:

Private Sub txtOpen_Click()

DoCmd.OpenForm "Contact Details", , , , , acHidden
  With Forms![Contact Details]
    .Recordset = Me.Recordset.Clone
    .RecordsetClone.FindFirst "[ID]=" & Me!ID
    If Not .NoMatch Then
       .Bookmark = .RecordsetClone.Bookmark
    End If
  End With

End Sub

Хотя я сейчас в этом разбираюсь!

1 Ответ

0 голосов
/ 25 января 2011

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

Вероятно, эта командная кнопка имеет кодчто-то вроде этого:

  DoCmd.OpenForm "frmContactDetails", , , "[ContactID]=" & Me!ContactID

..., который открывает форму и фильтрует ее в одну запись.

Чтобы иметь навигационный набор записей, вам нужно, чтобы формабыть отфильтрованы к тому же набору записей, который отображается в списке результатов поиска, и затем вам нужно будет перемещаться среди них.Для этого вам нужно будет установить критерии для тех же критериев, которые отфильтровывали список результатов, а затем перейти к текущей выбранной записи.Я не знаю, каковы критерии, поэтому я просто собираюсь представить его с помощью переменной strCriteria, но требуется, чтобы он был отформатирован как предложение SQL WHERE без слова "WHERE":

  DoCmd.OpenForm "frmContactDetails", , , strCriteria
  With Forms!frmContactDetails
    .RecordsetClone.FindFirst "[ContactID]=" & Me!ContactID
    If Not .NoMatch Then
       .Bookmark = .RecordsetClone.Bookmark
    End If
  End WIth

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

Также возможно открыть форму сведений и назначить набор записей формы клоном.Recordset формы результатов, но я никогда не пробовал это.В этом случае это будет что-то вроде (непроверенный код, просто гадание, как это будет сделано):

  DoCmd.OpenForm "frmContactDetails", , , , , acHidden 
  With Forms!frmContactDetails
    .Recordset = Me.Recordset.Clone
    .RecordsetClone.FindFirst "[ContactID]=" & Me!ContactID
    If Not .NoMatch Then
       .Bookmark = .RecordsetClone.Bookmark
    End If
  End WIth

Еще одна вещь, которую следует учитывать, - это вообще не иметь всплывающую форму, а использовать разделенную формучто-то, что было представлено в A2007, и что у меня еще не было возможности использовать (нет клиентов, которые полностью переключились на A2007 / 2010).Он имеет вид списка и подробный вид в той же форме.

Старомодным способом реализации одной и той же вещи было использование двух подчиненных форм в несвязанной форме, верхняя форма - список результатов, иверхняя форма - это подробная форма, привязанная к текущей записи верхней формы.Никакого кода не требуется, вы просто устанавливаете свойства LinkChild и LinkMaster формы детали, как это:

  LinkMaster: ListForm.Form!ContactID
  LinkChild:  ContactID

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

Какой подход вы используете, зависит от того, как именно ваше приложение подходит друг к другу.

...