【问题标题】:Pass parameters from one form to another and add new records将参数从一种形式传递到另一种形式并添加新记录
【发布时间】:2012-06-21 04:46:41
【问题描述】:

我想要:

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

到目前为止我做了什么:

我制作了两个表单,在两个表单中都添加了控件,还添加了一个命令按钮。 我已使用 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 属性都会填充我使用按钮发送的参数,但这不是我的目标。

【问题讨论】:

    标签: ms-access


    【解决方案1】:

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

    如果您使用称为开放参数 (OpenArgs) 的最后一个参数,那么您可以在 2nd forms open 事件中编写代码来设置相关列的默认值。

    打开的表单代码如下所示:

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

    然后您可以将类似于以下的代码放入此 2nd forms open 事件中:

    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,上述代码将不会打开表单。

    【讨论】:

    • 我会尝试一下。只是想表达我的惊讶,我第一次在 msdn.microsoft.com 上阅读有关 OpenForm 的信息时并没有发现这一点。即使在你告诉我它是什么之后,我仍然很难理解微软写的关于它的内容。附加问题 - 我可以按照fmsinc.com/free/newtips/access/accesstip13.asp 此处解释的方式传递多个参数,还是有更简单的方法?
    • 是的,技术描述至少可以说有点枯燥。我认为该链接显示了在 open arguments 参数中发送多个参数的最简单方法。您当然可以使用任何您希望的字符作为分隔符,前提是它不包含在您发送的数据值中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2021-08-06
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多