MSAccess 2003 - VBA для передачи значения от одной формы до другого

Двухэтапная аутентификация не поддерживается с режимом IIS7 Integrated. Аутентификация теперь построена из модулей, так а не аутентификация выполнения IIS, сопровождаемая asp.net, выполняющим аутентификацию, все это происходит одновременно.

Вы можете также:

  1. Изменение домен приложения, чтобы быть в классическом режиме IIS6...
  2. Следуют этот пример ( старая ссылка ) того, как фальсифицировать двухэтапную аутентификацию с интегрированным режимом IIS7.
  3. Использование Обезьяна Геликона и mod_auth для обеспечения стандартной аутентификации

9
задан Joel Coehoorn 17 May 2012 в 03:42
поделиться

3 ответа

Наилучший подход в этих случаях - не пытаться передать кучу переменных. Это слишком много кода и негибкость. Например, если вам нужно передать два значения, что произойдет с годами, когда это требование вырастет до 5 значений? Попытка сохранить и передать целый набор значений - это слишком много работы по кодированию.

Имейте в виду, что каждая форма в ms-access на самом деле является объектом класса, которым вы можете управлять в коде. Итак, используйте здесь объектный подход, и вы обнаружите, что не только пишете меньше кода, но и ваш код будет более чистым, более модульным, нет необходимости в глобальных переменных, и код, который вы пишете, часто можно повторно использовать в разных формах.

Вот как:

В общем, когда одна форма запускает другую форму во второй форме в событиях открытия форм (фактически, вы можете даже использовать до события загрузки) вы можете выбрать ссылку на ПРЕДЫДУЩИЙ объект формы. Другими словами, здесь вы можете использовать объектный подход.

На уровне модуля форм для формы я объявляю объект формы как:

Option Compare Database
Option Explicit 
dim frmPrevious       as form 

Затем, в событии загрузки формы, мы идем:

Set frmPrevious = Screen.ActiveForm

Теперь , любой код в нашей форме может СВОБОДНО использовать код, события и даже переменные, объявленные как общедоступные из этой предыдущей формы в коде.

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

frmPrevious.Refresh

Если вы хотите установить значение идентификатора, выполните:

frmPrevious!ID = some value

И обратите внимание, что вы даже можете объявить предыдущую форму как ПУБЛИЧНУЮ переменную для этой формы, и, таким образом, если у вас две глубокие формы, вы можете пойти:

frmPrevious.frmPrevious!ID = some value

Итак, просто объявите объект формы в КАЖДОМ модуле кода форм (или, по крайней мере, в тех, где вам нужно использовать значения в коде). Вышеупомянутое означает, что любой код имеет готовую ссылку на предыдущий объект формы. Функции, объявленные как общедоступные в форме, станут МЕТОДОМ формы, и их можно будет запускать как:

frmPrevious.MyCustomRefresh

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

frmPrevous.SetInvoice

или

frmPrevious.SetProjectStatusOn

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

Фактически, в качестве стандарта кодирования БОЛЬШИНСТВО моих форм имеет общедоступную функцию, называемую MyRefresh .

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

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

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

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

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

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

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

16
ответ дан 4 December 2019 в 09:13
поделиться

Обычный способ - ссылаться на текстовые поля в исходной форме из всплывающей формы, например:

Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID

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

Лучше использовать OpenArgs:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID

Это помещает ваши два значения в строку, которая передается во всплывающую форму. Затем вы можете проанализировать два значения из OpenArgs с помощью функции Split.

Для получения дополнительной информации о передаче параметров с помощью OpenArgs см .: http://www.fmsinc.com/free/NewTips/Access/accesstip13.asp

6
ответ дан 4 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: