1

所以我有一个输入表单,我想用它来更新包含某些信息字段的表格。我在文本框中自动显示了记录的 ID。我需要在单击按钮时将三个文本框添加到表中(不包括 ID)。

姓名
日期
方法

是字段名称。

As_Name
As_Date
As_Method

是文本框名称

表名是POC,ID 是POC_ID(它的自动编号)。

所以我不希望将这些对象(文本框)绑定到表格,因为这是一个单独的“弹出”表格,来自表格的表格,我只希望输入相对于 POC_ID已通过原始表单选择。

那么我该如何为此编写vba 1)检查以确保记录不存在...... 2)使用来自文本框(上面列出)的数据输入更新字段(上面列出)。我希望能够通过单击按钮来使用它......


编辑:

实际上是一张桌子而不是两张;我有两种表格,我希望能够将信息发送到同一张表(尽管信息不同)。该数据库已经由其他人建造,并且知道我已被委托接管它。

我需要添加第二个小弹出表单,以便根据新要求添加其他信息(实际上我没有将其放置在另一个上的位置)。我已经这样做了,并使用建议的对象方法来引用第一个表单(第二个“弹出”表单来自该表单)以添加相对 id 字段。现在我有了第二个小弹出表单,它只要求输入三个值(即上面列出的值)。

我只是不知道如何将文本框与一个字段链接起来,这样一旦用户输入信息,单击“保存”,它就会将信息保存到相对于那里的 TripID 的表中(上面提到的一个)。我知道如何让文本框将数据保存到表中的唯一方法是在创建新的时使用构建器/向导。

我想学习如何将表单上的对象(文本框、cmb、列表)等链接到具有“单击时”方法的表格,以便我可以使用保存按钮。基本上就是这样!

4

2 回答 2

2

DoCmd 的 OpenForm 方法允许多个参数,包括 Where 和 Openargs。你可以利用这些。

但是,您的表格设计似乎有些问题,因为您似乎在两个表格中保存了相同的信息,并且没有说明原因。你读过http://www.r937.com/relational.html吗?

我建议您需要的设计可能只包含一个数字字段 POC_ID,它是主表的外键。

于 2009-09-23T13:35:32.323 回答
1

仍然不确定我是否了解您的情况,但让我提供一个答案的大纲。如果我的大纲不够接近,请解释我误入歧途的地方。

您的父窗体 frmParent 有一个命令按钮 (cmdMoreFields),它打开子窗体 (frmChild),您将在其中输入 frmParent 中当前显示的记录中的 3 个附加字段的值。用户在 frmChild 中输入这些值后(在名为 As_Name、As_Date 和 As_Method 的文本框控件中),她将单击命令按钮 (cmdSave) 以将这些值存储到表 POC 中的字段(名称、日期和方法)中,并且关闭 frmChild。此外,frmParent 包含一个文本框 (txtPk_field),它保存当前记录的主键值(表 POC 中的字段 pk_field)。

但是,我不确定您将哪个字段/控件用于 txtPk_field,并且如果当前记录尚未保存,我怀疑该值是否可用。所以,我会为 cmdMoreFields “点击”事件推荐这段代码:

If Me.Dirty Then Me.Dirty = False
DoCmd.OpenForm "frmChild"

在 cmdSave(在 frmChild 上)的“点击”事件中,尝试类似以下的代码:

Dim strSql As String
strSQL = "UPDATE POC SET [Name] = """ & Me.As_Name & """, [Date] =#" _
    & Me.As_Date & "#, Method = """ & Me.As_Method & """ WHERE pk_field = " _
    & Forms!frmParent.txtPk_field & ";"
Debug.Print strSql
CurrentDb.Execute strSql, dbFailOnError
DoCmd.Close

如果该方法有效,请考虑使用 Openargs 将 pk_field 值传递给 frmChild,正如 Remou 建议的那样。

注意:我假设 Name 的数据类型是文本,Date 是日期/时间,Method 是文本。对于数据类型与我的猜测不同的任何字段,您都必须更改 UPDATE 语句分隔符。

于 2009-09-23T21:55:20.087 回答