OpenArgs以新的形式显示记录

时间:2017-04-28 15:50:58

标签: ms-access cmd ms-access-2016 openargs

我正在使用cmd按钮打开一个弹出式(单个)表单,其中包含(2)txtbox,我想要反映上一个(连续)表单中单个记录的信息。 cmd将

cmd按钮上的代码:

Private Sub cmdReassign_Click()
On Error GoTo ErrHandler
Dim strOpenArgs As String

strOpenArgs = Me.txtToolGroupID & "," & Me.txtEmployee_Name
DoCmd.OpenForm "popfrmReassignGroupedTools", OpenArgs:=strOpenArgs '

ExitHere:
    Exit Sub

ErrHandler:
    MsgBox Err.Number & ": " & Err.Description, vbExclamation
    Resume ExitHere

End Sub

Form_Open上的代码

Private Sub Form_Open(Cancel As Integer)
On Error GoTo ErrHandler
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strOpenArgs As String

    strOpenArgs = Me.OpenArgs

    Set dbs = CurrentDb
    strSQL = "SELECT * From qryToolReassignment_Grouped Where ToolGroupID=" & Me.txtToolGroupID & ";"
    Set rst = dbs.OpenRecordset(strSQL)

    If rst.EOF Then
        GoTo ExitHere
    End If

    With Me
        .txtToolCategoryQty = rst.Fields("[Quantity]")
        .txtToolLocation = rst.Fields("[Employee Name]")
    End With

ExitHere:
    On Error Resume Next
    Set rst = Nothing
    Set dbs = Nothing
    Exit Sub

ErrHandler:
    MsgBox Err.Number & ": " & Err.Description, vbExclamation
    Resume ExitHere

End Sub

我承认我从类似的设置中借用了代码,其中信息是从cbo而不是cmd调用的。弹出窗体打开时,只显示查询中的第一条记录而不是与cmd关联的记录。有什么建议。 TIA。

1 个答案:

答案 0 :(得分:0)

我不清楚你想要什么。如果弹出窗体是BOUND并且您希望它打开现有记录,那么使用OpenForm的WHERE参数:

DoCmd.OpenForm "popfrmReassignGroupedTools", , , "ToolGroupID=" & Me.txtToolGroupID

如果txtToolGroupID在连续表单上,则弹出窗体Open事件无法使用Me别名引用它。

如果要使用OpenArgs传递多个值,则必须使用字符串操作函数来解析数据元素。

If Not IsNull(Me.OpenArgs) Then
    intID = Left(Me.OpenArgs, InStr(Me.OpenArgs, ",")-1)
    strEmp = Mid(Me.OpenArgs, InStr(Me.OpenArgs, ",")+1)
End If

而不是声明和打开记录集对象的所有代码,DLookup()可能会服务。