2017-02-16 82 views
1

我有我的.mdb文件數據庫,我想(使用獲取外部數據菜單)查詢使用選擇查詢和excel電子表格中顯示的結果的數據,但我需要查詢記錄並顯示基於用戶在特定單元格(4個字段)中輸入的輸入(在哪裏條件下)的結果。有時候我會在某些情況下使用一個或兩個字段,或者有時我會使用3個字段來選擇記錄,但其餘字段將保留爲空。獲取參數輸入Excel中查詢

我可以寫的查詢,當用戶在所有四個字段中輸入值,而不會在任何領域留白,但我需要查詢搜索的任何一種情況下。

SELECT * FROM P:\Indexing\Data\Services_Indexed_data.mdb。氣體S_CARD WHERE(S_CARD.HOUSE_NO =α)和(S_CARD.STREET_NAME =α)和(S_CARD.SUFFIX =α)和(S_CARD.FILE_NAME =α)和(S_CARD.CITY =? )

「?」當我從用戶選擇輸入單元作爲參數時將被填充。另外我需要查詢與LIKE運算符在哪裏條件。請讓我知道如何爲此編寫查詢。

+0

這是一個有效的SQL字符串嗎?你在使用數據庫連接嗎?您可以嘗試查看[this](http://datapigtechnologies.com/blog/index.php/running-an-access-parameter-query-from-excel/)並瞭解如何從Excel連接到Access,在哪裏構建原始參數查詢,並將這些參數的值從Excel傳遞到Access。 – MoondogsMaDawg

+0

是的,它是一個有效的SQL查詢。它的工作很好,當我使用兩/三在那裏與和/或運營,但我需要查詢一樣,如果我留爲空白的任何字段,則查詢應返回基於有效的參數(條件)的值,任何一種情況下,它不被從哪裏考慮空白的領域條件。不,我直接連接文件夾中的mdb文件。 – Mahi

回答

0

參考:我使用Excel的MS Query外部連接來鏈接到我的.accdb文件(我知道這與你的不一樣,但它不應該有很大的區別)。然後打開外部數據屬性菜單並單擊連接名稱右側的按鈕打開連接屬性窗口。我導航到定義選項卡,並選擇底部的參數按鈕,並使用「從下面的單元格獲取值」選項來引用輸入單元格。

不過,我也想不出如何讓Excel創建一個動態的WHERE子句根據您的參數參考細胞是否爲空。

解決方案: 我會建議在Access中建立一個參數查詢和擴大你的WHERE子句中佔的參數Null值的每個排列。這將是一個巨大的字符串,很難閱讀和格式化,但應該可以在Access的GUI中管理。例如,僅使用兩個的參數HOUSE_NO和STREET_NAME的(數據類型可能不正確):

PARAMETERS [HOUSE_NO] Text (255), [STREET_NAME] Text (255); 
SELECT * FROM S_CARD 
WHERE (([HOUSE_NO] Is Not Null) AND (S.CARD.HOUSE_NO Like [HOUSE_NO]) 
    AND ([STREET_NAME] Is Not Null) AND (S.Card.STREET_NAME Like [STREET_NAME])) 
OR (([HOUSE_NO] Is Null) AND ([STREET_NAME] Is Not Null) 
    AND (S.Card.STREET_NAME Like [STREET_NAME])) 
OR (([HOUSE_NO] Is Not Null) AND (S.Card.HOUSE_NO Like [HOUSE_NO]) 
    AND ([STREET_NAME Is Null)) 
OR (([HOUSE_NO] Is Null) AND ([STREET_NAME] Is Null)); 

您將需要爲參數的每個排列所留空的OR,以及如何查詢應返回這些結果。然後您需要編寫一個VBA過程來連接到Access,打開參數查詢,傳遞參數,執行查詢並導出到您的Excel文件。這是更多的工作。爲了獲得幫助,您可以看到部分流程here,但它處理動作查詢而不是選擇,並且不復制到excel。

因爲Excel似乎並不命名參數,似乎沒有要測試的進細胞是否是空白的,並相應地調整WHERE子句的方式。當我嘗試在定義選項卡的命令文本中使用Excel [PARAMETER 1][PARAMETER 2]中的參數菜單中的名稱時,它最終創建了新的參數(#3,#4)。

這是一個很好的問題,雖然我會建議等待另一個用戶權衡,我們可能會得到幸運。