2012-06-04 79 views
2

我有一個非常類似於Cookie的數據庫(非常相似,非常重複的查詢),它們進入一個模塊化報告(即它們都使用不同標準返回相同的東西)。獲取項目中的查詢列表 - MS Access

這些查詢將會有~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,我也可以用其他方式顯示這些信息,而無需使用組合框。

回答

5

如果您有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中列出報告對象並將其更改爲列表查詢的示例:List Box of Available Reports

+0

這正是我所需要的;顯示我想要的確切內容,並允許我快速輕鬆地添加異常(更多「不相似」「')語句,如果我有一些我自己的疑問,用戶不需要看到。效果很好。謝謝! – StuckAtWork

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)) 

會給你單項selected

+0

我會試一試,但我仍然沒有辦法「循環查看」。我不確定用什麼語法查找數據庫的所有查詢名稱。我上面的代碼找到所有表等,不應該顯示。 – StuckAtWork

+2

快速和骯髒的方法 - 你將不得不看看返回的是什麼排除:'從MSysObjects中選擇名稱,類型= 5;' - 不使用它作爲組合框的源的原因是它還包括一些TMP查詢 – SeanC

+0

在這種情況下'AddItem'方法可能沒有幫助,因爲AddItem需要「值列表」作爲行源類型(請參閱訪問幫助主題)。 OP已經告訴我們,他的查詢名稱的總長度超過了Value List的容量。它可以工作的唯一方法是如果他可以通過排除隱藏查詢的名稱而達到該限制。 – HansUp