我有一个MS Access表单,其中包含一个名为cboProjectID
的组合框(充当主键)。我试图以某种方式创建表单,以便在cboProjectID
组合框中进行选择后,它会触发另一个名为cboErrCod1
的组合框,以显示基于所选project_id可用的错误代码的错误代码在cboProjectID
组合框中。
某些项目ID只能使用某些错误代码,而这些代码在另一个表中定义。但是,我创建了一个名为HDR_ERRCODES
的查询,该查询将Project_ID
,Project_Code
与特定Error_Reason_Code
可用的project_Id
相关联。
例如,项目代码(从cboProjectID组合框中选择)可能如下所示:“FI-01-05”,“FI-01-01”,“SY-02-02”等) 。选择后,Project_ID
存储在表Project_DTA_REV_T
中(这是表单存储其信息的表),Project_ID
只是下一个数字(1,2,3) ,4等等)。
据我所知,在执行VBA代码时需要使用Recordset返回多个值。这是我开始使用的代码,但它似乎没有在cboProjectID组合框字段的“on change”命令中工作:
Private Sub cboProjectID_Change()
Dim VarComboKey As Integer
Dim dbs As DAO.Database
Dim Err1 As DAO.Recordset
VarComboKey = Me.cboProjectID.Value
Set dbs = CurrentDb
Set Err1 = dbs.OpenRecordset("SELECT DISTINCT [Error_Reason_Code] FROM [HDR_ErrCodes] WHERE [project_ID] = " & VarComboKey)
Do While Not Err1.EOF
Me!cboErrCod1 = Me!cboErrCod1 & Err1!Error_reason_code & " "
Err1.MoveNext
Loop
Err1.Close
Set Err1 = Nothing
End Sub
我不是VBA专家,并且一直在尝试遵循我在本网站上阅读的Recordset的编码方法。 Access正在显示Error_Reason_Code
的所有类型,而不是与Error_Reason_Code
组合框中所选项目ID相关的特定cboProjectID
。
有人能指出我正确的方向,让我们在cboErrCod1组合框中的Error_Reason_Code
上显示此代码,仅与Project_ID
组合中选择的cboProjectID
相关框??
答案 0 :(得分:2)
要更改组合框中显示的项目列表,您需要修改其Row Source
。 Row Source Type
有3个选项:Table/Query
,Value List
和Field List
。
Value list
将采用分号分隔的值列表并显示它们以供选择。例如,如果您输入Row Source
“Cat; Dog; Mouse”,则在选择下拉菜单时会得到以下信息。
cat
dog
mouse
Field List
将显示您选择作为行源的任何查询或表的字段名称。
Table Query
就是你想要的。这将使用您提供的表或查询中的值填充组合框。您现在正在使用代码执行的操作和行Me!cboErrCod1 = Me!cboErrCod1 & Err1!Error_reason_code & " "
正在更改组合框中当前显示的值,但不会影响展开时可用的值。为此,您必须使用已创建的查询更改组合框的Row Source
。
Me!cboErrCod1.RowSource = "SELECT DISTINCT [Error_Reason_Code] FROM [HDR_ErrCodes] WHERE [project_ID] = " & VarComboKey
因此,您的方法将更改为以下内容,因为您不需要修改记录集。
Private Sub cboProjectID_Change()
Dim VarComboKey As Integer
VarComboKey = Me.cboProjectID.Value
Me!cboErrCod1.RowSource = "SELECT DISTINCT [Error_Reason_Code] FROM [HDR_ErrCodes] WHERE [project_ID] = " & VarComboKey
End Sub
编辑:我试图复制您的设置以查看为什么结果不会返回任何内容。如果我在假设中犯了任何错误,请更正。
我创建了一个名为cboProjectID
的组合表单,其中包含一个从项目表中获取所有项目ID的源(从项目中选择*;)并在下拉列表中显示项目代码。我做了另一个名为cboErrCod1
。
我制作了两个名为Projects
的表格,另一个名为ErrorCodes
,根据您的描述进行了以下设置。
Projects HDR_ErrCodes
ProjectID ProjectCode(text) Error_Reason_Code(text) project_ID(integer)
1 FI-01-05 Failure 1
2 FI-01-01 Testing 1
3 SY-02-02 Manual 1
4 SY-01-01 Failure 2
5 SY-01-02
通过上面的设置和on change事件,我的组合框cboErrCod1将填充正确的错误代码。该设置有问题吗?