运行 基于组合框选择的各种查询

Run various queries based on a combo box selection

我有一个表单,用户将从下拉列表中 select 一个值。基于这个 selection,我想执行一系列查询。例如,如果用户 selects 'A',则将执行查询 1、2 和 4。如果用户 selects 'B',则查询 4、2、3 和 5 将按该顺序执行。查询的数量会有所不同,它们的执行顺序也会有所不同。 我有一个 'query subscription' table,其中包含下拉列表中每个可能的值及其执行顺序要执行的所有查询。

tbl_subcription:
 RowID: autonumber     
 SubscriptionID: User selected query list identifier
 QrySequence: Query execution order, unique within each SubscriptionID
 QryName: Name of query to be run

样本:

RowID  SubscriptionID  QrySequence  QryName
 1     A               1           qry1
 2     A               2           qry2
 3     A               3           qry4
 4     B               1           qry4
 5     B               2           qry2
 6     B               3           qry3
 7     B               4           qry5

我想要这样的东西:

For each query in QryList (filtered with SubscriptionID, sorted by QrySequence)
    execute query
Next query
...Display results...       

我没有使用动态查询,也没有任何查询需要额外的参数。非常感谢任何帮助。 汤姆

在你说The number of queries will vary and so will the order in which they are executed的情况下。这听起来像一个接受 ParamArray 的函数会处理你正在寻找的东西。

像这样:

Public Function RunQueries(ParamArray QueriesToRun())

    Dim i          As Long
    Dim lngUBound  As Long


    'If the ParamArray is not empty
    If UBound(QueriesToRun) >= 0 Then
        lngUBound = UBound(QueriesToRun)

        'For each value in ParamArray
        For i = 0 To lngUBound
            `Run Query: QueriesToRun(i)
        Next

    End If
End Function

这是未经测试的代码,但我认为一切都是正确的,应该可以满足您的需求。不过,我只用过一次 ParamArray,所以语法可能略有偏差。

创建一个查询,该查询从 SubscriptionID 匹配下拉选择的行中检索 QryName 值...类似这样的查询:

SELECT QryName
FROM tbl_subcription
WHERE SubscriptionID = [dropdown]
ORDER BY QrySequence;

然后您可以根据该查询打开一个 DAO.Recordset,遍历记录集行,并执行每个 QryName:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Dim strSelect As String
strSelect = "SELECT QryName FROM tbl_subcription " & _
    "WHERE SubscriptionID = [dropdown] ORDER BY QrySequence;"
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strSelect)
qdf.Parameters("dropdown").Value = Me.YourDropdownName.Value
Set rs = qdf.OpenRecordset(dbOpenSnapshot)
With rs
    Do While Not .EOF
        db.Execute !QryName, dbFailOnError
        .MoveNext
    Loop
    .Close
End With

YourDropdownName 替换为您的下拉控件(组合或列表框)的名称。

该代码需要 YourDropdownName 包含在还包含该代码的表单中。如果代码和 YourDropdownName 没有同时包含在同一个表单中,您可以通过 Forms 集合中父表单的名称引用下拉菜单:

Forms!YourFormName!YourDropdownName