MS Access: передача параметров из одной формы доступа в другую - PullRequest
4 голосов
/ 11 сентября 2009

У меня есть форма и кнопка на ней. Я хотел бы открыть другую форму по нажатию кнопки с параметром, переданным из родительской формы в дочернюю форму (RecordSource дочерней формы имеет параметры). Как я могу это сделать?

Ответы [ 4 ]

6 голосов
/ 11 сентября 2009

Вы можете ссылаться на любое свойство вызывающей формы, ссылаясь на объект формы. Я не буду использовать! обозначение для свойств формы (я ненавижу это). так что если вы хотите наследовать:

контрольное значение формы:

forms(parentFormName).controls(controlName).value 

значение поля набора записей формы:

forms(parentFormName).recordset.fields(fieldName).value

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

 screen.activeForm.controls(myComboControlName).value

и

 screen.activeForm.recordset.fields(myComboControlName).value
3 голосов
/ 11 сентября 2009

Если родительская форма открыта, вы можете сделать следующее

Forms!MyParentForm!myPublicVariableOfParentForm

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

1 голос
/ 11 сентября 2009

Вы можете использовать «OpenArgs». При вызове формы просто передайте строку OpenArgs, а в дочерней форме прочитайте и проанализируйте. Вам предстоит подготовить собственное решение для разбора более сложных строк «OpenArgs». См: http://msdn.microsoft.com/en-us/library/bb215912.aspx

0 голосов
/ 01 февраля 2013

Ссылаясь на комментарий Дэвида выше:

.Value не требуется, так как это свойство по умолчанию. Единственный случай, когда вы можете указать это, если вы передаете управляющее значение в подпрограмму / функцию, которая передает параметр ByRef вместо ByVal. Использование .Value заставляет ByVal, даже если параметр определен как ByRef. Но, конечно, если подпрограмма / функция предполагает, что она получает контрольная ссылка, которая может его сломать ...


ByRef / ByVal :: Это то, что у меня сработало. У меня есть форма, которая содержит два объекта календаря, и хотел, чтобы значения для каждого объекта были ссылки из другого модуля модуля. Кажется, не имеет значения, использовал ли я ByRef или ByVal. В приведенном ниже примере я использовал ByRef.

public sub nameofsub(byref calendarfromdate as string, byref calendartodate as string)
 docmd.runsql("select fieldname from table where fieldname between #" & calendarfromdate & "# and #" & calendartodate & "#")
end sub

В открывшейся форме у меня была кнопка, которая вызывала этот саб при нажатии и выполняла мой необходимый код.

private sub btn_callqry_click()
 call nameofsub(calendarfromdate,calendartodate)
end sub

Нет необходимости публично объявлять значения для calendarfromdate и calendartodate в начале класса открытой формы, например:

 public calendarfromdate as string

общедоступный календарь в виде строки

ПРИМЕЧАНИЕ. При использовании приведенного выше примера строки должны быть отформатированы как мм / дд / гггг

ПРИМЕЧАНИЕ. Если ваша форма содержит объект управления календарем, обнаруженный при использовании Access в Windows XP, объект календаря не существует в Windows 7, лучше всего просто вынуть объект календаря и поместить его в два текстовых поля с надписью как FromDate и ToDate и измените их свойства, чтобы отформатировать текст как «Дата». После этого автоматически появится селектор даты рядом с полем после их ввода.

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