使用Recordset MS Access返回多个记录

时间:2013-05-21 19:21:32

标签: vba ms-access recordset

我有一个MS Access表单,其中包含一个名为cboProjectID的组合框(充当主键)。我试图以某种方式创建表单,以便在cboProjectID组合框中进行选择后,它会触发另一个名为cboErrCod1的组合框,以显示基于所选project_id可用的错误代码的错误代码在cboProjectID组合框中。

某些项目ID只能使用某些错误代码,而这些代码在另一个表中定义。但是,我创建了一个名为HDR_ERRCODES的查询,该查询将Project_IDProject_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相关框??

1 个答案:

答案 0 :(得分:2)

要更改组合框中显示的项目列表,您需要修改其Row SourceRow Source Type有3个选项:Table/QueryValue ListField 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将填充正确的错误代码。该设置有问题吗?