好的,所以我在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。有什么帮助吗?
答案 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