【问题标题】:VBA for taking information from text boxes and inserting into tableVBA 用于从文本框中获取信息并插入表格
【发布时间】:2010-11-30 18:15:11
【问题描述】:

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

名称
日期
方法

是字段名称。

As_Name
As_Date
As_Method

是文本框的名称

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

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

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


编辑:

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

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

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

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

【问题讨论】:

  • 抱歉不清楚。这个表格有很多输入,更新了几个表,它使用的方法是在一个按钮上单击它运行 sql 以检查以确保首先分配的 ID 号没有记录,然后检查以确保所有需要输入值,它通过 sql 更新将信息输入到相应的表中。我没有创建它,但我的任务是在表单中添加一些额外的数据字段(最终用于额外的报告功能)......这里有太多的 vb 对我(新手)来说是什么来破译什么.. .
  • 所以我想出了一个绝妙的主意(我们会看到),我会在此表单的适当位置添加一个小按钮,这将打开另一个包含我需要的三件事的小表单添加。所以现在我只是想知道如何复制该 SQL 过程,以便当用户输入信息时,它会根据相应的 POC_ID 编号进入相应字段的表中。所以只是为了举例......假设我创建了一个空白表单,输入一些文本框,命名为 txt1-txt3,然后在表单中添加一个按钮。我正在寻找的是我可以使用“点击”的 vba....
  • 这将导致这些文本框中的信息转到我想要的表格中,在我想要的字段中,相对于我想要的 ID(自动编号 ID)......再次伙计们,如果我不清楚,我很抱歉。感谢您的帮助,因为这让我完全发疯了。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    您的父窗体 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
    

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

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

    【讨论】:

    • 非常感谢 HansUp!感谢您坚持我的错误解释,因为我相信这正是我想要的!我真的很感激!
    • 实际上我正在将新表单设置为 Option Explicit dim PreviousForm as frmParent(如您所说)设置 PreviousForm = forms!frmParent me.POC_ID = PreviousForm.POC_ID 并且这是携带ID号进入文本框对我来说很好。我只是不知道将下一个文本框中的信息插入到表中的 SQL,专门针对这个 ID# 迫不及待地开始工作(相对)来试试这个!欣赏它!
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多