在 MS Access 中,表单如何提供填充有相关表单数据的下拉列表?

Cod*_*ein 1 microsoft-access

在我的 MS Access 数据库中,我想创建一个表单来填写新订单。

我有一张客户表和一张订单

**Customers** => (id, firstname, lastname, address)
                  ^
                  |
**Orders** =>   (customer, product, total)
Run Code Online (Sandbox Code Playgroud)

(注意:customer字段和id是一对多的关系)

我想创建放置产品的表单,并从某种下拉菜单中选择哪个客户正在订购此产品。

你如何在 Access 中实现这一点?根据我的研究,我所能做的就是创建一个表单,其中包含当前表中字段的占位符,但没有任何利用关系来帮助我填写客户字段的内容。

Sau*_*ysw 5

是的,你绝对可以做到这一点。有一些技巧,但不是很多。

  1. 创建一个新表单并将记录源设置为“订单”表。要查看表单属性窗口,请右键单击表单并选择“表单属性”
  2. 从“表单设计”功能区中,将一个新的组合框拖到表单上
  3. 如果出现向导,我会取消它并手动完成所有操作,但是如果您愿意,可以使用它。
  4. 确保选择了组合框并查看其属性表
  5. 将控制源设置为“客户”字段
  6. 将行源设置为“SELECT Customers.ID,Customers.Firstname,Customers.LastName FROM Customers;”或单击“...”按钮来创建这个简单的查询。请注意,第一个字段是 ID,它是表单和组合框之间的链接。
  7. 这现在可以工作了,但它只会显示 ID,这是无用的。您需要修复组合框的格式。转到属性中的格式选项卡,然后查找“列数”。将此更改为 3。
  8. 在此之下是列宽。您可以通过输入“0,3,3”来使用它来隐藏 ID 字段。您可能希望使用这些值来使它们与名称的长度完美匹配。
  9. 您可能希望“列头”打开与否 - 由您决定。
  10. 现在在“表单视图”中查看表单并享受!

我通常将查询单独保存在组合后面。然后在步骤 6 中选择查询而不是粘贴 SQL。这样做的原因是您可以潜在地将数据源重用于常见的组合框。当你的数据库增长时,命名约定是一件非常好的事情,所以你对事物的称呼要合乎逻辑。

在此说明中,我会将您的表变量的名称更改为下面的名称。对我来说,这更清楚。订单也需要一个 ID。如果 ID 具有相同的名称,则在加入表格时只需播放“匹配名称”。

**Customers** => (CustomerID, firstname, lastname, address)
                           ^
                            \
**Orders** =>   (OrderID, CustomerID, product, total)
Run Code Online (Sandbox Code Playgroud)

您还可以将 First/Last 合并为一个字段,而不是将它们分开(在查询中有一个字段 Custname: [Firstname] & " " & [Lastname])。您可以使组合框在访问方面非常强大,但要注意它们中是否有很多行 - 它们会变慢。

对于订单上的产品,您确实需要创建另一个名为“Order Lines”的表,其中包含 OrderLineID、OrderID、ProductID 和 Qty 作为字段。那么一个订单可以有多个产品。这超出了问题的范围,但我想我也会为您指出正确的方向。您还需要一个产品表。