1

我对 Access 完全陌生,但我已经完成了教程,并且对 Excel 有一些 VBA 经验,所以我不应该绝望。

我还没有进入表单,现在我专注于定义和填充表格以及定义关系。

我已经更改了此处示例中的实际表,但上下文和问题仍然存在。

表 1 是食物。除了 autofield 键之外,它还有两个字段

FoodCat  FoodType  
Fruit    banana    
Fruit    apple     
Fruit    pear     
Meat     lamb
Meat     beef
Meet     Chicken
Vegetable Broccoli

ETC....

此表由另一个表在查找和关系设置中使用。设置起来很容易,因此另一个表有一个字段,该字段仅限于包含 FoodCat 字段中项目的条目(尽管它是重复的)。我还可以将下一个字段限制为具有 FoodType 字段的条目,但这给了我所有的选择。

在新表中,我想做的是将 FoodType 选项限制为具有匹配 FoodCat 选项的条目。

因此,如果在 FoodCat 下的新表中选择的项目是肉类,我只希望 FoodType 选择是羊肉、牛肉或鸡肉。

这甚至可能在表中吗?我需要使用表格来完成这项工作吗?

4

2 回答 2

3

回复您的评论:

当您使用“查找”字段时,您将在表之间强制建立新的关系。

避免访问的十诫中列出的问题(特别是:表中查找字段的弊端)的最佳方法是手动创建关系,然后使用它们在表单或报告中创建足够的“查找”控件.

假设您有以下表格:

tblCategories

id | catName
---+-----------
1  | Fruit
2  | Meat
3  | Vegetable

tblFood

id | idCat | foodName
---+-------+-------------
1  | 1     | Apple
2  | 1     | Banana
3  | 2     | Lamb
4  | 2     | Beef
5  | 3     | Broccoli

在此示例中,很明显这两个表之间存在一对多关系,并且idCatin 字段tblFood是外键。您可以在“关系”窗口中手动创建此关系。

通过以下查询,您可以正确获取foodNamecatName字段(构建报告的好方法):

select f.*, c.catName
from tblFood as f
    inner join tblCategories as c on f.idCat = c.id;

这会抛出这样的东西:

id | idCat | foodName | catName
---+-------+----------+------------
1  | 1     | Apple    | Fruit
2  | 1     | Banana   | Fruit
3  | 2     | Lamb     | Meat
4  | 2     | Beef     | Meat
5  | 3     | Broccoli | Vegetable

这是一个很好且有用的查询,您可以在报告中使用它......而无需在报告中使用组合框。

那么:究竟如何构建一个控件,例如 a ComboBox,它仅根据foodName值过滤catName值?

第一:创建表格

然后:创建一个组合框并将其放入RowSource属性中:

select id, catName from tblCategories

将控件设置为具有两列和列宽:0, 10. 这将使id下拉列表中的列“不可见”。一定要知道这个组合框的名称(假设它是命名的comboBox01)。

现在,创建第二个组合框,保持RowSource属性为空,并将列宽设置为0, 10。还要确保知道第二个组合框的名称(假设它是命名的comboBox02)。

现在让我们让 VBA 执行您需要的操作:在comboBox01控件的属性表上,查找afterUpdate事件,单击省略号按钮,选择“VBA 代码”并编写以下内容

Sub comboBox01_afterUpdate() ' This is added automatically by the VBA editor
    strSQL = "select id, foodName from tblFood where idCat=" & comboBox01.Value
    comboBox02.rowSource = strSQL
    comboBox02.Requery
End Sub ' This is added automatically by the VBA editor

“查找控件”(没有“查找字段”)在表单中使用时非常有用。它们可以为您的数据库用户(包括您)省去很多麻烦。但我强烈建议您避免直接在表中创建它们

希望这可以帮助。

于 2013-08-22T19:39:37.490 回答
2

是的,可以在表内进行。但是,通过表格更容易,通过表格更实用。您永远不会希望您的用户直接与表交互。

于 2013-08-22T01:16:36.277 回答