Microsoft 提供的编程示例只用于演示目的,不带任何明示或暗示担保。这包括但不限于对适销性或特定用途适用性的暗示担保。
下表对这四种方法的特点(优点和缺点)进行了比较:
方法编号: 1 2 3 4
---------------------------------------------
无需代码/宏 x x
保存在子窗体中 x x x
可以滚动到其他记录 x x x
不需要查询 x x x
可以编辑记录 x x x
注意:这些方法还可应用于文本框。
方法 1
使用“自动创建窗体:纵栏式”向导创建基于“产品”表的新窗体,然后将该窗体另存为 frmComboTest。
要在 Microsoft Office Access 2003 和更早版本的 Access 中执行上述操作,请按照下列步骤操作:
在“数据库”窗口中,单击“对象”下的“窗体”。
在“数据库”窗口工具栏上单击“新建”。
在“新建窗体”对话框中,单击“自动创建窗体: 纵栏式”,在下拉列表中选择“产品”,然后单击“确定”。
将该窗体另存为 frmComboTest。
要在 Microsoft Office Access 2007 中执行上述操作,请按照下列步骤操作:
在“创建”选项卡上,单击“窗体”组中的“其他窗体”,然后单击“窗体向导”。
在“新建窗体”对话框中,单击“窗体向导”,在下拉列表中选择“产品”,然后单击“确定”。
在“窗体向导”对话框中,选择要显示在新窗体中的字段,选择“纵栏表”选项以设置该窗体的布局,然后单击“完成”。
将该窗体另存为 frmComboTest。
使用组合框向导添加未绑定的组合框。为此,请按照下列步骤操作:
在“设计”视图中打开 frmComboTest 窗体。
在工具栏中,确保选择了“控件向导”。
注意:在 Access 2007 中,确保在“设计”选项卡上的“控件”组中选择了“控件向导”。
在工具栏中,单击“组合框”,然后单击“frmComboTest”窗体。
注意:在 Access 2007 中,单击“设计”选项卡上“控件”组中的“组合框”,然后单击“frmComboTest”窗体。在“选择生成器”对话框中,单击“组合框向导”,然后单击“确定”。
在“组合框向导”对话框中,选择“在基于组合框中选定的值而创建的窗体上查找记录”选项,然后单击“下一步”。
选择“产品 ID”和“产品名称”字段,然后单击“下一步”。
单击“完成”。
“组合框向导”将创建一个与以下过程类似的事件过程:
Private Sub Combo0_AfterUpdate()
' Find the record that matches the control.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
在“窗体”视图中查看 frmComboTest 窗体。
请注意,在组合框中选择产品名称时,会转到所选产品的相应记录。
方法 2
使用“自动创建窗体:纵栏式”向导创建一个基于“产品”表的新窗体,并将该窗体另存为 frmComboTest2。
注意:请查看方法 1 的步骤 1 中介绍的步骤。
在“frmComboTest2”窗体的属性表中,按如下所示设置“数据”选项卡上的“筛选”属性:
[产品名称] = Forms![frmComboTest2]![cboLookup]
添加一个名为 cboLookup 的未绑定组合框,然后按如下所示设置该控件的属性:
组合框
-----------------------------------------------------
控件名称:cboLookup
控件来源:<留空>
行来源类型:表/查询
行来源:从“产品”中选择 [产品名称];
绑定列: 1
列宽: 2.54
AfterUpdate:mcrLocateProduct
创建以下名为 mcrLocateProduct 的宏:
Action
--------------------------------------
SetValue
Requery
mcrLocateProduct Actions
--------------------------------------
SetValue
Item:Forms![frmComboTest2].FilterOn
Expression:True
请注意,在打开 frmComboTest2 窗体并从“cboLookup”组合框中选择某产品名时,会将筛选器设置为该值。
方法 3
新建一个不基于任何表或查询的窗体,并将其另存为 frmMain。然后添加一个组合框,并按如下所示设置其属性:
组合框
----------------------------
控件名称:cboLookup
控件来源:<留空>
行来源类型:表/查询
行来源:产品
列数: 4
列宽: 0;5.08
绑定列: 1
使用“自动创建窗体:表格式”向导创建另一个基于“产品”表的窗体,将该窗体的“默认视图”属性设置为“单个窗体”,然后将该窗体另存为 frmSub。
使用 frmSub 窗体在 frmMain 窗体上创建一个子窗体控件。
按如下所示设置该子窗体控件的属性:
子窗体
----------------------------
LinkChildFields:[产品 ID]
LinkMasterFields:cboLookup
通过更改 cboLookup 控件中的值,Access 可确保该子窗体中的记录与组合框相匹配。
罗斯文示例数据库中的“订单”窗体演示了此方法。“订单明细”子窗体由“LinkMasterFields”和“LinkChildFields”属性相关联。
方法 4
创建一个名为 tblProductSelect 的表,该表包含一个“产品 ID”字段。将该字段的“数据类型”属性设置为“数值”,并将“字段大小”属性设置为“长整型”。
注意:不需要主键。不要向该表中添加记录。
创建名为 qryProductSelect 的以下查询,该查询基于“tblProductSelect”和“产品”表的“产品 ID”字段之间的连接。查询中要包含以下属性:
查询:qryProductSelect
-----------------------------------------------
字段:产品 ID
表名称:tblProductSelect
字段:<所需的任何其他字段>
表名称:产品
使用“自动创建窗体:纵栏式”向导创建一个基于 qryProductSelect 查询的窗体,然后在“窗体”视图中查看该窗体。
右键单击“产品 ID”字段的文本框控件,指向“更改为”,单击“组合框”,然后为此组合框进行下列属性分配:
组合框
--------------------------
控件名称:产品 ID
控件来源:产品 ID
行来源类型:表/查询
行来源:产品
列数: 1
列宽: 5.08
绑定列: 1
将该窗体另存为 frmComboTest3,然后运行该窗体。