3

我有一个非常千篇一律的数据库(非常相似,非常重复的查询),它进入一个模块化报告(即它们都返回具有不同标准的相同内容)。

将有大约 100 个这样的查询,所以我使用组合框来显示查询,这些查询将发送到报告(通过OpenArgs)。

我需要生成项目中的查询列表(只是名称)。我希望组合框的控制源是这个查询列表。

如果我必须做一个字符串连接Value List源或Query/Table源类型并不重要,唯一重要的是绑定列包含"qryName"

到目前为止我所拥有的:

For Each qry In CurrentDb.QueryDefs
    list = list & ";" & """" & qry.Name & """" 
    'String in the form "qryName";"qryAnotherQuery";"qryNextQuery"
Next

但显然值列表有 ~2000 个字符的限制,所以如果我有很多查询我不能使用值列表?另请注意:qry.Name也会返回类似“~sq_cTableName”的内容,而不仅仅是我的查询......这是一个问题。我只想查询。

有任何想法吗?只要我可以将查询名称发送到我的报告的 OpenArgs,我也愿意在没有组合框的情况下以其他方式显示此信息。

4

2 回答 2

7

如果您对 具有读取权限MSysObjects,则可以将此查询用作组合框的行源。

SELECT m.Name
FROM MSysObjects AS m
WHERE m.Type=5 AND m.Name Not ALike "~%"  
ORDER BY m.Name;

条件 ,m.Name Not ALike "~%"从结果集中排除临时和隐藏查询。

如果您对 没有读取权限MSysObjects,则必须创建一个回调函数,然后将其用作组合框的行源。如果您必须走这条路,请参阅 Allen Browne 的此示例,该示例列出了报告对象并将其更改为列出查询:可用报告的列表框

于 2012-06-04T14:26:24.623 回答
1

列表框允许您在Me.lstBox.AddItem qryName循环查询时使用。
然后,您可以使用 ItemsSelected 和 ItemData 的组合来查找查询的名称

For Each varItm In lstBox.ItemsSelected
    Debug.Print lstBox.ItemData(varItm)
Next varItm

或者如果您不允许多选,

lstBox.ItemData(lstbox.ItemsSelected(0))

会给你选择的单个项目

于 2012-06-04T13:56:53.523 回答