VBA用于从文本框中获取信息并插入表中

时间:2009-09-23 13:25:27

标签: sql forms vba ms-access ms-access-2003

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

Name
Date
Method

是字段名称。

As_Name
As_Date
As_Method

是文本框名称

表名为POC,ID为POC_ID(自动编号)。

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

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


编辑:

实际上它是一张桌子而不是两张桌子;我有两种形式,我希望能够将信息发送到同一个表(虽然不同的信息)。这个数据库已经被其他人建造了,并且知道我已经被迫去接管它。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

但是,您的表格设计似乎完全错误,因为您似乎在两个表格中保留相同的信息,并且没有明确的原因。你看过http://www.r937.com/relational.html了吗?

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

答案 1 :(得分: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“on click”事件的代码:

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

在cmdSave的“on click”事件中(在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语句分隔符。