在两个组合框之间建立依赖关系_第1页
在两个组合框之间建立依赖关系_第2页
在两个组合框之间建立依赖关系_第3页
在两个组合框之间建立依赖关系_第4页
在两个组合框之间建立依赖关系_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在两个组合框之间建立依赖关系适用于: Microsoft Office Access 2003 全部显示2005 年 1 月 31 日作者 Sal Ricciardi进行选择是组合框的用途,但是有时选择之间存在依赖关系。在本部分中,将学习如何创建一个组合框,以使其列表依赖于在另一个组合框中所做的选择。我们在示例数据库中提供了一个示例,可供您下载。适用于Microsoft Office Access 2003Microsoft Access 2000 和 2002问题:如何创建一个组合框,并且限制其列表基于在另一组合框中所做的选择?    使第二

2、个组合框 (组合框:窗体上用来提供列表框和文本框的组合功能的一种控件。用户既可以在组合框中键入一个值,也可以单击该控件以显示一个列表,然后从列表中选择一项。)基于一个查询,该查询要与包含第一个组合框中的所选值的行相匹配。还需要在特定窗体和控件事件 (事件:由对象识别的操作,如鼠标单击或按键,可为这些操作定义响应。事件可能由用户操作或 Visual Basic 语句引发,或者由系统触发。)中输入一些 Microsoft Visual Basic for Applications (VBA) 代码。该代码可确保发生特定操作(如在第一个组合框中做出选择,或者第一次打开窗体)时,组合框显示正确的值。首

3、先,请查看“行源”和“行源类型”属性 (属性:控件、字段或对象的命名属性,可以通过设置属性来定义对象的某种特征(如大小、颜色或屏幕位置)或对象行为的某个方面(如对象是否隐藏)。)。 “行源”和“行源类型”简介使用“行源”属性,可以定义组合框中显示的项目的源。将该属性与“行源类型”属性一起使用可指示 Access 如何填充组合框。例如,可以将“行源类型”属性设置为表/查询,然后将“行源”属性设置为某个查询的名称。然后,Access 会运行该查询,并使用结果填充该组合框。不必使用已经保存的查询。通过将“行源类型”属性设置为表/查询,可以创建一个查询,该查询在组合框的“行源”属性中以 SQ

4、L SELECT 语句形式存在。在本文示例数据库的示例窗体中使用了该方法。下表中列出了“行源类型”属性的可能设置。设置说明表/查询从“行源”属性指定的表、查询或 SQL 语句中获取数据。这是默认设置。值列表从“行源”属性指定的项目列表中获取数据。字段列表从“行源”属性指定的表、查询或 SQL 语句的字段名称列表中获取数据。在大多数情况下,将使用默认的表/查询设置。创建示例窗体可以下载本专栏的示例数据库(英文)。该数据库中提供了演示此处介绍的方法的示例窗体。要自己创建示例窗体,请启动 Access 并按照下面的扩展部分中的步骤操作,然后继续进行专栏的剩余部分。分步说明:如何创建示例窗体请执行下列

5、操作之一:创建新窗体1. 在“数据库”窗口中的“对象”下,单击“窗体”。2. 在“数据库”窗口的工具栏上,单击“新建”。3. 在“新建窗体”对话框中,单击“设计视图”,然后单击“确定”。在“设计”视图中打开现有的窗体1. 在“数据库”窗口中的“对象”下,单击“窗体”。2. 单击某个窗体,然后单击“数据库”窗口中的“设计”。添加 Category 组合框    1. 在工具箱中,单击“控件向导”按钮,以便使其显示为处于选中状态。 注释   如果工具箱不可见,请在“视图”菜单中,单击“工具箱”。2. 在工具箱中,单击“

6、组合框”工具。3. 在窗体的设计网格内单击并拖动以创建组合框。4. 在“组合框向导”中,单击“使用组合框查阅表或查询中的值”旁边的按钮,然后单击“下一步”。5. 在“视图”部分中,单击“表”。6. 单击列表中的“表: 类别”,然后单击“下一步”。7. 在“可用字段”中,双击“类别 ID”和“类别名称”,以便二者同时出现在“选定字段”中,然后单击“下一步”。8. 在“请确定列表使用的排序次序:”页中,在第一个列表中单击“类别名称”,然后单击“下一步”。9. 在下一页上,确保选中“隐藏键列(建议)”复选框,然后单击“下一步”。10. 为组合框键入标签。根据该列的目的,我使用了类别名称:。11. 单

7、击“完成”。12. 保存该窗体。指定“名称”属性    1. 当窗体在“设计”视图中依然处于打开状态时,单击新组合框。2. 在“视图”菜单上,单击“属性”。3. 在“名称”框中,键入 Category。4. 关闭查询属性表。添加 Product 组合框    1. 在工具箱中,确保选中了“控件向导”按钮。 注释   如果工具箱不可见,请在“视图”菜单中,单击“工具箱”。2. 在工具箱中,单击“组合框”工具。3. 在窗体的设计网格内单击并拖动以创建组合框。4. 在“组合框向导”

8、中,单击“使用组合框查阅表或查询中的值”旁边的按钮,然后单击“下一步”。5. 在“视图”部分中,单击“表”。6. 单击列表中的“表: 产品”,然后单击“下一步”。7. 在“可用字段”中,双击“产品 ID”、“产品名称”和“类别 ID”,以便三者同时出现在“选定字段”中,然后单击“下一步”。8. 在“请确定列表使用的排序次序:”页中,在第一个列表中单击“产品名称”,然后单击“下一步”。9. 确保选中“隐藏键列(建议)”复选框,然后单击并拖动“类别”列的右边框以缩小该列,直到该列消失。单击“下一步”。10. 为组合框键入标签。根据该列的目的,我使用了产品名称:。11. 单击“完成”。12. 保存该

9、窗体。指定“名称”属性    1. 单击“Product”组合框。2. 在“视图”菜单上,单击“属性”。3. 在“名称”框中,键入 Product。4. 关闭属性表。添加状态文本框    1. 在工具箱中,单击“文本框”工具。 注释   如果工具箱不可见,请在“视图”菜单中,单击“工具箱”。2. 在窗体的设计网格内的两个组合框下方单击并拖动,以创建文本框。3. 在“视图”菜单上,单击“属性”。4. 在“控件来源”框中,准确地键入="您选择了“& Catego

10、ry.Column(1) &”类别中的“& Product.Column(1) &”产品!"5. 关闭属性表。6. 删除与刚刚创建的文本框相关联的标签。添加可选的说明性文本框    1. 在工具箱中,单击“文本框”工具。 注释   如果工具箱不可见,请在“视图”菜单中,单击“工具箱”。2. 在窗体的设计网格内的两个组合框下方单击并拖动,以创建文本框。在示例窗体中,我将该文本框放在两个组合框之间:Product 组合框上方,Category 组合框下方。 3. 在“视图”菜

11、单上,单击“属性”。4. 在“控件来源”框中,准确地键入="在选择类别后,产品列表将更改,从而只提供属于该类别的产品。"5. 关闭属性表。6. 删除与刚刚创建的文本框相关联的标签。7. 保存该窗体。设置文本框的格式(可选)    1. 增加字体大小,并更改字体颜色。2. 调整每个文本框大小并移动它们,以适应文本。3. 将“背景样式”属性设置为透明,以便文本框的背景色与窗体的背景色相匹配。确保按照本专栏中其余的步骤操作,以向 Product 组合框添加条件并在合适的位置包含代码,以及不断更新组合框。如何向产品查询添加条件因为您可以通过

12、Access 使用查询的结果填充组合框,所以可以向该查询添加条件,以限制组合框中的显示内容。在示例中,我们希望第二个组合框的条件将结果限制为只有那些与第一个组合框中的值相匹配的行。例如,假设要创建名为 Category 的类别组合框和名为 Product 的产品组合框。单击“Category”组合框时,您希望 Product 组合框仅列出该类别中的产品。通过在查询中为与 Category 组合框中的当前值相匹配的 Product 组合框添加条件,可以实现该任务。向查询添加条件    1. 打开 Product 组合框的属性表。2. 单击“行源”框,然后单

13、击出现的省略号按钮 (.)。3. 在“查询生成器”中,确保字段网格列出了需要在 Product 组合框中显示的产品表中的列,如“产品ID”、“产品名称”等等。请确保包含“类别 ID”字段。4. 在“查询生成器”网格的“类别 ID”列中的“条件”行中,键入 窗体!组合窗体!类别,使用您的窗体的名称替换“组合窗体”。该条件指示 Access 将查询结果限制为只有那些与 Category 组合框中当前所选的值相匹配的那些行。“查询生成器”网格可能如下图之一所示。5. 最后,关闭“查询生成器”,然后关闭该查询属性表,在 Access 提示保存更改时,单击“是”。Access 在关闭“查询生成器”时将

14、SQL 语句插入到“行源”属性中。SQL 语句包含如下所示的 WHERE 子句。WHERE (产品.类别 ID)=窗体!组合窗体!类别)WHERE 子句将行限制为只包含那些与 Category 组合框中的值相匹配的行。6. 保存该窗体。了解“绑定列”属性和“列数”属性使用组合框向导的优势之一是它自动填充所需的属性。这些属性中有两个需要做进一步的解释。· “绑定列”属性指示 Access 组合框中哪一列包含将与该控件相关联的值。该属性使用表示行源中的列的数字,从 1 开始,并从左到右继续到 2、3 等。通常,选择包含主键的列,如“类别 ID”或“产品 ID”。这样,如果引用该控件的值,

15、则可以得到所选行的“类别 ID”或“产品 ID”字段的值。例如,表达式 窗体!组合窗体!类别(在上图所示的“查询生成器”网格中输入)返回 Category 组合框控件中所选行的“绑定列”属性中存储的值。因为 Category 组合框的“绑定列”属性设置为 1,代表“类别 ID”列,所以返回“类别 ID”字段中的值。然后,该查询使用类别 ID 值与 Product 组合框的行匹配。· “列数”属性指示 Access 在组合框中有多少列。例如,对于 Category 组合框,因为在行源中有两列:“类别 ID”和“类别名称”,所以要将该属性的值设置为 2。对于 Product 组合框,因为

16、行源包括“产品 ID”、“产品名称”和“类别 ID”列,所以要将“列数”属性设置为 3。请注意,在计算“列数”的值时,必须计算其值在 Access 中设置为可用的所有列,不管该列在组合框中是否实际可见。可以使用“列宽”属性隐藏列。有关详细信息,请参阅隐藏列部分。如何随时更新组合框每当 Category 组合框中的值更改时,必须更新 Product 组合框。为此,可以添加 VBA 代码,以便每当 Category 组合框更新时,重新查询 Product 组合框的行源。Access 为实现该目的提供了 AfterUpdate 事件。 我们来看一下 AfterUpdate 事件的代码。首先,将 Pr

17、oduct 组合框的值设置为 Null,这样可以确保最初在该框中不显示任何内容。这种做法很好,因为一旦选择了某种类别,Product 组合框中当前选中的值就会由于当前显示的产品属于上一个类别而无效。 接下来,通过调用 Requery 方法根据当前类别重新填充 Product 组合框。最后使用“项目数据”属性将 Product 组合框预设为列表中的第一项。“项目数据”属性返回组合框或列表框中指定行的值。因为该列表是基于零的,所以请记住要选择 0 作为第一行的索引,而不是 1。Private Sub CategoryAfterUpdate() Me.Product = Null Me.P

18、roduct.Requery Me.Product = Me.Product.ItemData(0)End Sub有关如何在 Category 组合框的 AfterUpdate 事件中编写代码的详细分步说明,请参阅下面的扩展部分。分步说明:如何在第一个组合框中编写代码,以自动更新第二个组合框要创建代码,请执行下列操作:在“设计”视图中打开窗体    1. 在“数据库”窗口中的“对象”下,单击“窗体”。2. 单击某个窗体,然后单击“数据库”窗口中的“设计”。编辑 Category_AfterUpdate 过程    

19、1. 单击“Category”组合框以将其选中。2. 在“视图”菜单上,单击“属性”,然后单击“事件”选项卡。3. 单击“更新后”框,然后单击出现的省略号按钮 (.)。4. 当“选择生成器”对话框出现时,单击“代码生成器”,然后单击“确定”。5. 在 Visual Basic 编辑器 (Visual Basic 编辑器:一种环境,用于编写新的 Visual Basic for Applications 代码和过程,并编辑已有的代码和过程。Visual Basic 编辑器包括完整的调试工具集,用于查找代码中的语法、运行时和逻辑问题。)中输入代码,以便 Category_AfterUpdate 过

20、程与上一个示例所示完全相同。6. 完成后,在“文件”菜单上,单击“保存”。然后,在“文件”菜单上,单击“关闭并返回到 Microsoft Office Access”。 7. 关闭属性表。8. 关闭该窗体。打开窗体时需要执行的操作第一次打开窗体时,您可能会发现组合框不显示值,这是由于您尚未进行选择。对于示例窗体,我认为最好显示类别列表中的第一个值和该类别的第一个产品,因此我在窗体的 Load 事件中输入了以下 VBA 代码。在第一次打开窗体时调用该代码。它将类别设置为列表中的第一个值,然后调用 Category_AfterUpdate 过程,以更新 Product 组合框。Private Su

21、b Form_Load(Cancel As Integer) Me.Category = Me.Category.ItemData(0) Call Category_AfterUpdateEnd Sub示例窗体使用未绑定 (未绑定控件:未与基础表、查询中的字段或 SQL 语句连接的控件。未绑定控件通常用于显示信息性文本或装饰性图片。)组合框。未绑定组合框是未与表或查询中的字段链接的一种组合框。如果使用绑定 (绑定列:列表框、组合框或下拉列表框中的列,该列绑定到控件的 控件来源 属性所指定的字段。)组合框,则您可能不希望使用上面所示的 Form_Load 过程,因为每次加载窗体,它都将重新设置

22、Category。您可以删除该代码或使用如下所示的过程: Private Sub Form_Load(Cancel As Integer) If IsNull(Category) Then Me.Category = Me.Category.ItemData(0) Call Category_AfterUpdate End IfEnd Sub该版本仅在类别为空时才重新设置类别。有关如何在窗体的 Load 事件中输入代码的详细分步说明,请参阅下面的扩展部分。分步说明:如何在打开窗体时运行的 Load 事件中输入代码要创建代码,请执行下列步骤:在“设计”视图中打开窗体  

23、60; 1. 在“数据库”窗口中的“对象”下,单击“窗体”。2. 单击某个窗体,然后单击“数据库”窗口中的“设计”。编辑 Form_Load 过程    1. 在“编辑”菜单上,单击“选择窗体”。2. 在“视图”菜单上,单击“属性”,然后单击“事件”选项卡。3. 单击“加载”框,然后单击出现的省略号按钮 (.)。4. 当“选择生成器”对话框出现时,单击“代码生成器”,然后单击“确定”。5. 在 Visual Basic 编辑器 (Visual Basic 编辑器:一种环境,用于编写新的 Visual Basic for Applications

24、 代码和过程,并编辑已有的代码和过程。Visual Basic 编辑器包括完整的调试工具集,用于查找代码中的语法、运行时和逻辑问题。)中输入代码,以便 Form_Load 过程与上一个示例所示完全相同。6. 完成后,在“文件”菜单上,单击“保存”。然后,在“文件”菜单上,单击“关闭并返回到 Microsoft Office Access”。7. 关闭属性表。8. 关闭该窗体。如何处理记录导航 如果使用绑定组合框,则仍可以使用此处所示的方法,但是需要考虑由于用户在记录之间导航而导致当前记录更改时,您希望出现什么情况。在这种情况下,每当在记录之间导航时,可能需要重新查询第二个组合框。实现该操作的合适位置是在窗体的 Current 事件中,使用如以下示例所示的代码。Private Sub Form_Current() Me.Product.RequeryEnd Sub有关如何在窗体的 Current 事件中输入代码的详细分步说明,请参阅下面的扩展部分。分步说明:如何在当您在记录之间导航时运行的窗体的 Current 事件中输入代码要创建代码,请执行下列步骤:在“设计”视图中打开窗体    1. 在“数据库”窗口中的“对象”下,单击“窗体”。2. 单击某个窗体,然后单击“数据库”窗口中的“设计”。编辑 Form_Current 过程&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论