MS Access:表单如何相互传递价值?

时间:2010-12-29 15:29:49

标签: ms-access

我有一张表格(FORM-A),要求用户选择车辆。 用户应该点击表格中选择车辆的FORM-A上的按钮。 选择表格(FORM-B)应该打开,用户可以选择车辆。 所选值应传达回FORM-A。

您将如何在MS Access 2010中实现此目标?

FORM-B是一个连续的表格,其中包含车辆的图片和其他一些信息。

4 个答案:

答案 0 :(得分:12)

根据我对你的问题的理解,你希望formB打开一种弹出窗口。当弹出窗口关闭时,其结果将放在调用表单中 解决方案提案:
a)使用语法docmd.openform "formB", windowmode:=acDialog打开FormB 这将阻止执行下一行,直到formB被关闭或隐藏 b)在FormB的OK按钮中,只需隐藏表格,不要将其关闭 c)当代码在formA中恢复时,您现在可以

  1. 检查formB是否仍处于打开状态。如果没有,它已被取消
  2. 读取隐藏形式B中的值(仍然打开),然后关闭formB
  3. 否则,您还可以使用formB在关闭之前更新formA中的控件。但我不喜欢这种方法,因为formB不可重复使用,并且它在formB和formA之间创建了不必要的依赖。

答案 1 :(得分:0)

我不确定为什么你需要一个单独的表格 - 只需让第一个文本框列出数据库中车辆的所有记录,你可以在那里选择一个,其余的车辆信息是自动的 - 从车辆表中填充,但不会复制到您的父表中。当然,我也不确定你的表结构,所以这个方法可能有理由对我来说不明显。

上述方法的好处是,如果您添加更多车辆,您的选择框会自动更新 - 并且您必须将表格必须加载到最低程度(始终是良好的性能移动)

答案 2 :(得分:0)

您可以在formA中创建formB的实例并对其进行控制。下面是formA的VBA代码。单击formA上的按钮时,您将创建一个新的formB实例并为其提供焦点。同时,您可以为其控件设置属性。你可以使用这种方法在表格B的控件中设置正确的图片。希望这会有所帮助。

示例:

Option Compare Database

Dim fB As Form_FormB

Private Sub btnA_Click()
    Set fB = New Form_FormB
    fB.SetFocus
    fB.tbxB.Text = "Some text sent from A to B!"
End Sub

如果您希望两个表单始终可见,我建议使用包含所有车辆列表的子表单或仅包含用户选择的表单的详细信息。

答案 3 :(得分:0)

您可以通过这种形式引用表单!formName!controlName。 一旦你看到它是如何工作的,你就可以愚弄它以使它与你现有的设置一起工作。让我们在Form-A上使用3个控件,在Form-B上使用一个图像,在Form-B上使用一个文本框。 Form-A上的文本框将命名为txtVehicle,Form-B上的图像将命名为imgVehicle,Form-B上的文本框将命名为txtVehicleName。 您可以在属性中设置控件的名称。单击imgVehicle时,它会将txtVehicleName中的值放入txtVehicle。

你必须做一些编码 - 如果你以前没有做过,那很容易。在图像的属性下,您将看到事件。如果单击“On Click”事件,您将看到一个下拉列表。其中一个选择是[事件程序] - 选择它。一个带有3个点的小按钮也会出现在行的末尾。单击它,您应该进入一个代码窗口,其中包含一些代码。

Private Sub imgVehicle_Click()

End Sub

这是您放置代码的位置。这样的事情应该有效。这是最简单的形式。

Private Sub imgVehicle_Click()
    Forms!Form-A!txtVehicle=forms!Form-B!txtVehicleName
End Sub

现在虽然这样可行,但我们应该在这个方法中做一些我们不应该做的事情。我们应该直接引用Form-B,因为我们在其中,我们应该验证Form-A实际上是开放的。

Private Sub imgVehicle_Click()
    If currentproject.allforms(“Form-A”).isloaded then
            Forms!Form-A!txtVehicle=me!txtVehicleName
    End if
End Sub

希望有所帮助