web-dev-qa-db-ja.com

MS Accessのフォーム間でパラメーターを渡す

Loginという名前のログインフォームを作成し、ユーザー名をtxtEmployeeテキストボックスに入力しました。MSAccessの別のフォームの2ページ目に同じものを表示する必要があります。

16
user419263

DoCmd.OpenForm を使用すると、最後のパラメーターとして任意の値を渡すことができます。この値は、新しいフォームで Me.OpenArgs

' Invoked by some Button on the first form '
Sub GoToSecondPage()
    DoCmd.OpenForm "MySecondPage", acNormal, , , , , txtEmployee.Value
End Sub

' Second form '
Sub Form_Open(Cancel As Integer)
    If Not IsNull(Me.OpenArgs) Then
        lblShowEmployeeName.Value = Me.OpenArgs
    End If
End Sub

(コード例はテストされていません。)

27
Heinzi

区切り文字列をOpenArgsパラメーターとして渡すことができます。

DoCmd.OpenForm FormName:="miscForm", OpenArgs:=paramstring

DoCmd.OpenFormにパラメーターとして渡されたパイプ区切り文字列を処理するためのルーチンは次のとおりです。

Dim Pstring As Variant

If Len(Me.OpenArgs) > 0 Then
   Pstring = Split(Me.OpenArgs, "|")
   var1 = Pstring(0)
   <etc..>
End If
7
Lance Roberts

個人的には、フォームを開くときに公開引数を渡します。たとえば、フォームAから次のように記述します

DoCmd.OpenForm "frmB", , , , , acDialog,”Badger”

そして、フォームBのOnOpenイベントで、このように送信したものをキャプチャできます。

Me.txtSomething=Me.OpenArgs

ただし、渡すことができるのは1つだけです。開いている引数にパイプ区切り文字列を渡してから、それを分割します。

4
Kevin Ross

いくつかのアイデア...

ログインユーザー名フィールドでAfterUpdateイベントを使用してグローバル変数に名前を書き込み、2番目のページのフィールドにOnLoadイベントを入力します。

または、フォームのログを常に開いたままにする場合は、フィールドのデフォルト値を= [Forms]![LogInForm]![UserName]に直接設定できます。

最初のフォームの実行後に保存するグローバル変数を保存および/または取得するパブリック関数を作成してみませんか?これにより、1つ以上のフォームで使用できるだけでなく、クエリ内の条件としても使用できます(たとえば、保存したユーザー名に一致するレコードを返すため)。

これは「偽の」セキュリティであることに同意しますが、ニーズに応じて十分な場合もあります。環境文字列usernameをユーザーテーブルのエントリに一致させる前に、これを実装しました。

ところで、私はこの機能をセキュリティではなくパーソナライズと呼んでいます。

ちょっとした考え。

0
Jim Parker