#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
значением. Затем вы можете остановиться на этом, и ваша запись будет текущей в списке.
Это далеко от совершенства или оптимальности, но это сработает, если не будут представлены другие варианты