【问题标题】:Pass values from one table to another将值从一个表传递到另一个表
【发布时间】:2013-12-03 00:15:47
【问题描述】:

我有 2 个表(表 1 和表 2),这两个表都包含一个字符串字段名称“theName”。 而且我还有 2 个表单(表单 1 和表单 2)表单 1 的记录源是表 1,表单 2 的记录源是表 2。我想在表单 1 上输入“theName”的值,然后单击打开表单 2 的按钮一条新记录,然后将“theName”字段设置为在表单 1 中输入的值。例如,如果我在表单 1 的“theName”字段中输入值“John”,然后单击一个按钮,该按钮将打开表单 2 到新记录,然后将“theName”字段设置为“John”。我有一些代码要开始,但它对我不起作用。

是否可以打开并形成新记录,然后自动设置字段值?

Dim theName As String
theName = Me.theName

DoCmd.openForm "form2", , , "theName=" & Me.theName

【问题讨论】:

  • 如果您在两个地方存储相同的数据,则您的数据库不是第三范式。我建议您考虑创建仅包含名称和自动编号作为主键的第三个表,以及仅接受名称的第三种形式。通过这样做,您可以消除冗余数据。

标签: ms-access vba


【解决方案1】:

您可以在打开表单后立即为第二个表单中的控件赋值。

' open form2 in add mode
DoCmd.OpenForm "form2", DataMode:=acFormAdd
' assign value to text box named theName
Forms!form2!theName = Me.theName

【讨论】:

  • 嗨,谢谢您的回复,我在哪里放“Forms!form2!theName = Me.theName”?我把它放在表格 2 的过滤框中,但它不起作用,表格 2 只是打开到空白表格,并且没有设置“theName”
  • 我以为你是从 form1 上的 VBA 代码调用 DoCmd.OpenForm,所以我打算在该过程代码的下一行包含 Forms!form2!theName = Me.theName
  • 太好了,谢谢。还有一个问题,我怎样才能确保没有重复输入到表格中。例如,如果输入了“john”,则无法再次输入
  • 我正在寻找的是使用 if 语句来检查输入的名称是否已经存在,例如:如果 theName 存在打开 form2 到变量名称 theName 否则如果 theName 不存在打开 form2 到一条新记录并将 theName 设置为在 form1 上为 theName 输入的值。
  • 使用DCount 作为If 条件。如果名称的计数为零,请使用我的答案中的方法为该名称添加记录。否则,当名称存在于表中时,使用带有DoCmd.OpenFormWhereCondition 选项打开过滤到该名称的表单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
相关资源
最近更新 更多