在MS Access中传递表单之间的参数

时间:2010-08-13 06:52:50

标签: forms ms-access vba parameters

我创建了一个名为login的登录表单,其中用户名输入到txtEmployee文本框中,我需要在MS Access中以另一种形式在第二页中显示相同内容。

5 个答案:

答案 0 :(得分:26)

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

(未经测试的代码示例。)

答案 1 :(得分:6)

您可以将分隔的字符串作为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

答案 2 :(得分:4)

在打开表单时,我个人会通过open参数传递它们。例如,从表格A中你会写

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

然后在表单B的OnOpen事件中,您可以捕获您已发送的内容

Me.txtSomething=Me.OpenArgs

你只能传递一件事但是我做的很多就是在open参数中传递一个以管道分隔的字符串然后将其拆分出来。

答案 3 :(得分:0)

一些想法......

使用登录用户名字段上的AfterUpdate事件将名称写入全局变量,然后使用OnLoad事件填充第二页上的字段。

或者,如果您打算始终打开日志,您可以直接将字段的默认值设置为= [Forms]![LogInForm]![UserName]

答案 4 :(得分:0)

为什么不创建一个公共函数来存储&amp; /或检索在执行第一个表单后存储的全局变量?这样您不仅可以在一个或多个表单上使用它,还可以在查询中使用它(例如,返回与您存储的用户名匹配的记录)。

我同意这是“假的”安全性,但也有时候它足以满足您的需求。之前我已经实现了这一点,我将环境字符串用户名与用户表中的条目匹配。

顺便说一句,我将此功能称为个性化,而非安全性。

只是一个想法。