【问题标题】:Selecting data from a table and auto-filling fields从表中选择数据并自动填充字段
【发布时间】:2016-06-30 06:01:59
【问题描述】:

我正在做一个小项目,目前只是一个更大项目的测试,但我遇到了一个我也找不到解决方案的障碍。

我有一个表中的项目列表,其中包含项目名称和价格等信息。我有另一个销售表。我有一个表单可以让您选择项目名称,但是,我希望表单的其余部分自动填充项目表中的信息。

我可以在更改商品名称字段时出现一个消息框,但是,通过我的搜索,我无法找到一种方法来搜索商品表中字段的值,然后读取价格值,然后将价格值插入此表单的字段中。

第一个表“项目”: 项目名称:文本 价格:货币

第二个表“销售额”: 项目名称:文本 价格:货币 日期:时间/日期

我希望我已经足够清楚地解释了自己,如果没有,请询​​问,我会尽力澄清。

【问题讨论】:

  • 你能发布你的两个表的表定义吗?这将帮助我们帮助你:)
  • 更新了我原来的帖子。我的目标是有一个表格,项目表的下拉菜单显示项目名称,选择项目名称将在某些字段中填写项目名称和价格,以便以后可以更改价格。谢谢:)

标签: ms-access ms-access-2010


【解决方案1】:

查看 Access 附带的 Northwind datatabase (northwind.mdb)。他们有几个示例说明如何根据组合框更改值来更新表单。

此外,您可能还想查看 Northwind 数据库中的表格设计。一般来说,将产品名称用作两个表中的关键字段是一个坏主意。将会发生的事情(最终会发生)是其中一种产品的产品名称将发生变化,您必须更新所有引用该产品名称的表。

更好的设计是在您的 products 表中使用一个关键字段(我建议使用 AutonumberField),然后在 sales 表中引用该关键字段。这样,如果产品名称发生变化,您只需在一个位置进行更改,而不是多次。

这是一个示例表格布局来说明我的观点:

表格项目:

ItemID (Autonumber - Primary Key on the table)
ItemName (Text - Name of product)
Price (Currency)

表格:销售额

ItemID (Integer - Foreign Key to Items.ItemID)
Quantity (Integer - # of units ordered)
Price (Currency)
OrderDate (Date/Time)

【讨论】:

  • 我省略了 ID 字段,它已经存在所以我只是假设 ID 字段是为所有新表设置的。我来自 PHP 并使用 MySQL。我找不到 Northwind 数据库,但是我现在对更新字段进行了排序,它只是试图连接到表以运行 SQL。
  • 我更新了我的答案,包括一个从 MS 下载 Northwind 数据库的链接。
  • 谢谢,刚刚看了一下,这将有助于探索 Access 的更深层次。我已经有一段时间没有使用它了,上一次是大约 6 年前的学校 IT 课程。
【解决方案2】:

这里的大多数答案都是发布太多代码和各种 SQL 语句。因此,这些答案正在造成世界贫困。

最简单的方法是让向导在您的表单上构建一个组合框来选择给定的项目。因此,此组合框将基于项目表。组合框的第一列将是项目表的 PK(自动编号 ID)。因此,此组合框将绑定到销售中的 ItemID 列。该向导还将“隐藏”该 ID,但您希望在此组合框中包含其他列,例如价格等。您可能应该在此组合框的第二列中包含项目表中的项目描述。如前所述,您还希望包含价格列。

因此,在您选择商品后,要自动填写价格栏,请使用以下代码:

此代码进入项目组合框的 AFTER update 事件中:

Me.Price = me.ItemComboBox.column(2)

因此,当您选择商品时,价格字段将自动为您填写。请注意您只需要编写一行代码。

因此,所有这些都可以使用内置向导和一行代码来完成。

【讨论】:

    【解决方案3】:

    将事件过程(代码生成器)添加到下拉框的 onchange 事件。右键单击设计视图中的下拉菜单并选择属性。然后在属性窗口的事件选项卡上单击 on change 行并单击“...”按钮。

    在此事件的代码中,您需要查询数据库(使用下拉框的索引或 ID 字段)以将项目详细信息提取到记录集中。查询看起来像

    "SELECT * FROM Items WHERE ItemID = " & dropdownboxname.value
    

    网上有很多这样的例子

    然后,您可以使用记录集中的必填字段更新表单中的各种文本框。网络上有很多这样的例子

    编辑:回应下面的cmets

    你需要做一些事情......

    Dim rsItems AS DAO.Recordset
    Set rsItems = CurrentDB.OpenRecordset("SELECT * FROM Items WHERE ItemID = " & dropdownboxname.value)
    If not rsItems.EOF Then
        textbox1.text = rsItems![fieldname1]
        textbox2.text = rsItems![fieldname2]
    end if
    Set rsItems = nothing
    

    如果有任何帮助,请告诉我 ;-)

    【讨论】:

    • 现在查看记录集。如果我遇到任何问题,我会更新。
    • 要运行该查询,我需要连接到我假设的表,我环顾四周,找不到连接到本地表的方法,我确实找到了例如,但它来自近 10 年前的一篇帖子,但它不起作用。不过,我已经找到了如何更新文本框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多