1

我有一个 MS Access 表单,它有一个名为cboProjectID. 我正在尝试以某种方式创建表单,以便在cboProjectID组合框中进行选择后,它会触发另一个组合框cboErrCod1,以根据组合框中选择的 project_id 可用的错误代码来显示错误代码cboProjectID

只有某些错误代码可用于某些项目 ID,并且这些代码在另一个表中定义。但是,我创建了一个名为 associate 的查询HDR_ERRCODESProject_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

有人可以指出我正确的方向,让此代码显示在Error_Reason_CodecboErrCod1 组合框中的 's 上,仅与组合框中的Project_ID选定内容有关cboProjectID吗?

4

1 回答 1

2

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

于 2013-05-21T20:20:59.163 回答