尝试在访问中打开新表单时,Me.OpenArgs始终返回null

时间:2016-08-02 20:31:56

标签: database vba access-vba access openargs

好的,所以我在Access中有一个数据库,当我打开一个表单(对于一个作业应用程序),然后单击一个按钮就会运行这个代码:

Private Sub cmdAddDemo_Click()

DoCmd.OpenForm "sfrmAppDemographics", , , , , , txtApplID.Value

End Sub

其中txtApplID是一个文本框,其中填充了"应用程序ID"的数值。应用程序表中的数字。我希望将此值传递给" sfrmAppDemographics"表单,以便为前面提到的应用程序表单中显示的用户打开正确的人口统计信息。

所以,我在人口统计表格的代码中这样做了:

Private Sub Form_Open(Cancel As Integer)

Dim rs As DAO.Recordset
Set rs = Me.Recordset
If rs.RecordCount = 0 Then
    rs.AddNew
    rs!ApplID = Me.OpenArgs
    rs.Update
Else
    MsgBox Me.OpenArgs
End If
Me.Requery

End Sub

所以,这个想法是,如果没有人口统计信息,它将使用来自传递的openargs的ApplID创建一个新的,如果有该用户的人口统计数据,它会弹出一个消息框openargs(作为测试它是否正常工作)。我总是收到错误"运行时错误' 94':无效使用Null" - 在MsgBox的行上。 (因为数据库DOES有人口统计数据记录)。当我拿出Else MsgBox Me.OpenArgs时,它只显示数据库中的第一个人口统计信息,ApplID为1.奇怪。我似乎无法通过Form_Open代码中的OpenArgs功能传递或访问ApplID。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

height: calc(100% - 80px);是一个传递给表单的字符串,仅此而已。如果要过滤调用的表单,请使用OpenArgs参数:

WhereCondition

如果要创建记录(如果它不存在),则另外将ID作为OpenArgs传递是有意义的:

Private Sub cmdAddDemo_Click()

    DoCmd.OpenForm "sfrmAppDemographics", WhereCondition:="ApplID = " & txtApplID.Value

End Sub

然后

    DoCmd.OpenForm "sfrmAppDemographics", WhereCondition:="ApplID = " & txtApplID.Value, _
                   OpenArgs:=txtApplID.Value

P.S。如果您的代码中Private Sub Form_Open(Cancel As Integer) ' No need for a separate recordset here If Me.RecordsetClone.EOF Then ' We are already in a new record, just set the bound ID control to create it Me!ApplID = Me.OpenArgs ' if you want to save the new record immediately Me.Dirty = False End If End Sub 为空,则Me.OpenArgs为空。我没有别的理由。

答案 1 :(得分:0)

只需将DoCmd.GoToRecord,acNewRec添加到安德烈的代码中,它就可以顺利运行......

Private Sub Form_Open(Cancel As Integer)

    If Me.RecordsetClone.EOF Then

        DoCmd.GoToRecord , , acNewRec

        Me!ApplID.Value = Me.OpenArgs

        Me.Dirty = False

    End If

End Sub