如何解决将2个参数从子表单传递到另一表单
我有一个名为frmGeneralinformation的主窗体,其子窗体为frmRetroVerso。
表格frmRetroVerso具有2个字段:SurveyID和FolioNo,以及2个按钮:Retro和Verso。
“复古”按钮打开frmFolioRetro的形式。
我希望frmFolioRetro从frmRetroVerso获取参数SurveyID和FolioNo,并显示记录或让我输入新记录的详细信息。某种程度上,SurveyID和FolioNo不会根据发送的参数进行更新。有人可以帮忙吗?
这是我在子窗体frmRetroVerso中的代码:
Private Sub Verso_Click()
Const FORMNAME = "frmFolioVerso"
Const MESSAGETEXT = "No current folio number."
' be sure a record has been entered
If Not IsNull(Me.FolioNo) And Not IsNull(Me.SurveyID) Then
' save current client record
Me.Dirty = False
' open linked form in dialogue mode
DoCmd.OpenForm FORMNAME,_
WhereCondition:=Me.FolioNo & " AND " & Me.SurveyID,_
OpenArgs:=(Me.FolioNo & ";" & Me.SurveyID)
Else
MsgBox MESSAGETEXT,vbExclamation,"Invalid Operation"
End If
End Sub
Private Sub Retro_Click()
Const FORMNAME = "frmFolioRetro"
Const MESSAGETEXT = "No current folio number."
' be sure a record has been entered
If Not IsNull(Me.FolioNo) And Not IsNull(Me.SurveyID) Then
' save current client record
Me.Dirty = False
' open linked form in dialogue mode
DoCmd.OpenForm FORMNAME,"Invalid Operation"
End If
End Sub
这是我在frmFolioRetro中拥有的代码,应该与frmFolioVerso几乎相同:
Private Sub SurveyID_GotFocus()
On Error Resume Next
Forms("frmRetroVerso").Dirty = False
Me.SurveyID.DefaultValue = """" & Forms("frmRetroVerso").SurveyID & """"
End Sub
Private Sub FolioNo_GotFocus()
On Error Resume Next
Forms("frmRetroVerso").Dirty = False
Me.FolioNo.DefaultValue = """" & Forms("frmRetroVerso").FolioNo & """"
End Sub
Private Sub Form_Current()
If IsNull(Forms("frmGeneralinformation").SurveyID) Then
Me.AllowAdditions = False
Else
Forms("frmGeneralinformation").Dirty = False
Me.AllowAdditions = True
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
Dim value1 As String
Dim value2 As String
value1 = Split(Me.OpenArgs,";")(0)
value2 = Split(Me.OpenArgs,";")(1)
Me.SurveyID.DefaultValue = """" & value2 & """"
Me.FolioNo.DefaultValue = """" & value1 & """"
MsgBox (Me.SurveyID.DefaultValue)
MsgBox (Me.FolioNo.DefaultValue)
End If
End Sub
解决方法
“条件”不完整。需要引用参数应应用于的表单上的字段。如果这些字段分别命名为FolioNo和SurveyID且为数字类型:
WhereCondition:="FolioNo=" & Me.FolioNo & " AND SurveyID=" & Me.SurveyID,
如果您的where子句正确,那么将仅显示与where子句匹配的记录,并且我认为不需要将值“传递”给表单-它会过滤到您要求的记录。
现在,可能该记录不存在。但是然后,我将编写代码进行检查,并在启动该表单之前添加记录。因此,这两个值现在再次以该目标形式作为带有值的文本框可用。
如果出于某种奇怪的原因,您除了需要已经满足您要求的过滤器之外,还需要传递两个值?
然后在目标表单中简单地在表单的代码模块级别声明两个变量(在任何代码这样的开头开始:
Option Compare Database
Option Explicit
Public MyFoioNum As Long
Public MySurvayID As Long
因此,现在您可以在代码中进行操作了:
code to open the form with filter as you have
dim strF as string
strF = "name of form to open"
DoCmd.OpenForm strF,_
WhereCondition:=Me.FolioNo & " AND " & Me.SurveyID,_
OpenArgs:=(Me.FolioNo & ";" & Me.SurveyID)
forms(strF).MyFoioNum = me.FoiliNo
forms(strF).MySurvayID = me.SurveyID
因此,以上内容现在允许该格式的任何VBA代码自由使用MyFoioNo和MySurvaryID。但是请注意,由于您用这两个数字过滤了表单,因此我几乎没有理由传递两个值。
如前所述,目标表格记录MIGHT是否不存在?然后编写代码以检查目标记录是否存在,如果没有,则在其中添加代码,然后运行您现在要使用过滤器打开表单的相同代码。 (因此,它将始终有效,因为它(您是开发人员)总是假设目标记录将基于过滤器而存在)。
因此,在启动该表单之前,如果没有添加它,则检查记录是否容易一些,然后再启动该表单。
我想您可以尝试将代码放置在目标表单启动中以检查记录,如果没有添加,则该记录将被添加(但是该表单已经设置了过滤器)。因此,在启动表单之前,这样做比较容易。 因此,您必须权衡设置传递两个值并从调用代码中设置它们的能力,或者简单地让调用代码添加reocrd。这样,调用表单无需关心也不需要传递两个值-只是一个过滤器,因此系统中的任何代码都可以自由调用该表单而不必传递值。 您采用的代码规则是,发送给ALSO的过滤器还假定目标表单和记录已经存在。
请注意,是否按照上述建议在表单加载后“设置”值?当然,这仅适用于模型表单或弹出表单(您的情况!)。对于以对话框形式打开的表单,调用代码将停止,并等待,直到用户关闭该表单,调用代码才能继续。
因此,您可以使用以上在目标表单中创建公共变量的想法传递1、2或5个值,然后通过调用代码将其打开,因此,调用代码可以在表单之后自由设置这些公共值打开。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。