将参数从一个表单传递到另一个表单并添加新记录

时间:2012-06-20 08:55:42

标签: ms-access

我想:

要打开表单,请从控件框中选择一个项目,单击按钮以打开新表单,并能够输入将先前所选项目添加到其字段中的新记录。

到目前为止我做了什么:

我已经制作了两个表单,在两者中添加了控件,添加了一个命令按钮。 我使用MS Access向导添加此代码:

Private Sub CommandNext_Click()
  On Error GoTo Err_CommandNext_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "FormX"
    DoCmd.OpenForm stDocName, , , "[BatchID] = " & Me![ListBatch], acFormAdd

  Exit_CommandNext_Click:

    Exit Sub

  Err_CommandNext_Click:

    MsgBox Err.Description
    Resume Exit_CommandNext_Click

End Sub

第三行是我的。

结果:

  • 如果第二个表单不是已经打开,按第一个表单上的按钮将打开第二个表单,其中包含空数据(应该显示该参数值的文本字段为空)
  • 如果第二个表单 已经打开,按第一个表单上的按钮会将焦点更改为第二个表单,它将显示与我选择的参数匹配的旧的现有记录
  • 我想打开第二个表单,不显示任何旧记录,但所选参数出现在指定的文本字段中。

在第二种形式的两种情况下, Filter 属性都会填充我使用按钮发送的参数,但这不是我的目标。

1 个答案:

答案 0 :(得分:1)

您是否知道open form命令的第四个参数是where条件或要应用的过滤器?

如果您使用最后一个名为open arguments的参数(OpenArgs),那么您可以在第二个表单open事件中编写代码来设置相关列的默认值。

开放式表单代码如下所示:

DoCmd.OpenForm stDocName, , , , acFormAdd, , Me![ListBatch]

然后,您可以在第二个表格中打开类似以下内容的代码:

Dim defaultID as Long
defaultID = CLng(Nz(Me.OpenArgs, 0))
If defaultID = 0 Or IsNull(Me.OpenArgs) Then
    Cancel = True
    Exit Sub
End If
Me.TextBoxBatchID.DefaultValue = defaultID

或者如果您不需要为每个新记录设置ID,您只需将控件的当前值设置为defaultID变量。

 Me.TextBoxBatchID = defaultID

请注意,如果open参数为空或0,则上述代码不会打开表单。