MS Access:将参数从一个访问表单传递到另一个表单

时间:2009-09-10 21:54:52

标签: ms-access

我上面有一个表格和一个按钮。我想在按钮单击上打开另一个表单,其中参数从父表单传递到子表单(子表单的RecordSource具有参数)。我该怎么办?

4 个答案:

答案 0 :(得分:6)

您可以通过引用表单的对象来引用调用表单的任何属性。我不会用的!表格属性的表示法(我讨厌它)。所以,如果你想继承:

表单的控件值:

forms(parentFormName).controls(controlName).value 

表单的记录集字段值:

forms(parentFormName).recordset.fields(fieldName).value

记录集周转在访问id(guid)值时特别有用。您无法通过表单的控件读取这些值,但可以通过记录集中的相应字段访问它们。如果您在包含guid字段的表单上有组合框,请比较以下内容:

 screen.activeForm.controls(myComboControlName).value

 screen.activeForm.recordset.fields(myComboControlName).value

答案 1 :(得分:3)

如果父表单已打开,您可以执行以下操作

Forms!MyParentForm!myPublicVariableOfParentForm

可以有其他方法,您可以使用父表单中的参数调用子表单上的方法。请记住,在操作之前,控件可能需要关注。

答案 2 :(得分:1)

您可以使用“OpenArgs”。调用表单时,只需传递OpenArgs字符串,然后在子表单上读取并解析。由您来准备自定义解决方案以构建解析更复杂的“OpenArgs”字符串。 参考: http://msdn.microsoft.com/en-us/library/bb215912.aspx

答案 3 :(得分:0)

参考David上面的评论:

  

.Value是不必要的,因为它是默认属性。您可以指定它的唯一情况是您传递的是控件值   到一个子程序/函数传递参数ByRef而不是   BYVAL。即使参数定义为,使用.Value也会强制使用ByVal   为ByRef。但是,当然,如果子/函数假定它正在获得   控制参考,可以打破它......


ByRef / ByVal ::这对我有用。我有一个包含两个日历对象的表单,并希望从另一个模块子引用每个对象的值。如果我使用ByRef或ByVal似乎没关系。以下示例我使用了ByRef。

public sub nameofsub(byref calendarfromdate as string, byref calendartodate as string)
 docmd.runsql("select fieldname from table where fieldname between #" & calendarfromdate & "# and #" & calendartodate & "#")
end sub

从打开的表单中,我有一个按钮,当点击并执行我需要的代码时会调用此子。

private sub btn_callqry_click()
 call nameofsub(calendarfromdate,calendartodate)
end sub

无需在打开的表单类的开头公开为calendarfromdate和calendartodate声明值,例如:

 public calendarfromdate as string

public calendartodate as string

注意:如果使用上面的示例,字符串必须格式化为mm / dd / yyyy

注意:如果您的表单包含在Windows XP中使用Access时找到的日历控件对象,则Windows 7上不存在日历对象,最佳选择是取出日历对象并放入两个标记的文本框作为FromDate和ToDate并更改其属性以将文本格式化为“日期”。这样做会在输入时自动在框旁边显示日期选择器。