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

#vba #ms-access #ms-access-2010 #openform

#vba #ms-access #ms-access-2010 #openform

Вопрос:

У меня есть форма с записями для отдельных пользователей с кнопкой для просмотра / редактирования разрешений для пользователей. Когда я закончу редактирование разрешения и нажму кнопку «Назад», я хочу, чтобы исходная форма (основная личная информация) открывалась в записи, над которой я только что работал, а не возвращалась к записи 1.

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

 DoCmd.Close
DoCmd.OpenForm ("Basic Personal Information")
  

Я попытался изменить OpenForm на

 DoCmd.OpenForm ("Basic Personal Information"), , , "S_ID=LinkRef"
  

Где S_ID — это имя поля, в котором указан уникальный идентификатор persons, а LinkRef — целое число этого идентификатора. Я попробовал несколько небольших вариаций этого и в конечном итоге заставил его вроде как работать, но он открывал основную личную информацию только с этой одной доступной записью, поэтому я не мог посмотреть на других людей в форме (т. Е. в навигации по записи внизу слева это было 1 из 1, когда должно было быть, например, 5 из 32).

Еще одна вещь, которую я попробовал, это добавить строку

 DoCmd.GoToRecord(acDataForm,"Basic Personal Information",acGoTo,"[S_ID] = " amp; LinkRef)
  

Но, очевидно, проблема здесь в том, что смещение для AcGoTo должно быть просто номером записи, поэтому в данном случае оно должно быть 5. Но я не знаю, как сообщить программе, чтобы она определила, какой номер будет у записи, по ссылке.

Я надеюсь, что это имеет смысл, если нет, не стесняйтесь задавать мне вопросы, и я постараюсь объяснить лучше, в противном случае любые предложения / методы будут оценены.

Спасибо

Комментарии:

1. DoCmd.OpenForm ("Basic Personal Information"), , , "S_ID=" amp; LinkRef

Ответ №1:

Я бы решил вашу проблему таким образом :

 DoCmd.OpenForm ("Basic Personal Information")
Forms("Basic Personal Information").Form.Recordset.FindFirst "[S_ID] = " amp; _
            Forms("PreviousForm").[LinkRef] amp; ""
  

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

Ответ №2:

возможно, это поможет вам: попробуйте открыть форму в диалоговом окне:

DoCmd.OpenForm («Основная личная информация»), , , , , , acDialog

Ответ №3:

Смотрите эту страницу:http://msdn.microsoft.com/en-us/library/bb237964 (v=office.12).aspx

Я надеялся найти какой-нибудь метод indexOf(), но я не знаю, как называется содержащий класс. Итак, вместо этого вот обходной путь, потому что я не очень хорошо знаком с VB:

Вы можете использовать GoToRecord для перехода к первой записи, передав 0 для четвертого параметра. Затем перебирайте все записи, используя acNext , пока не найдете запись с правильным S_ID значением. Затем вы можете остановиться на этом, и ваша запись будет текущей в списке.

Это далеко от совершенства или оптимальности, но это сработает, если не будут представлены другие варианты