2013-12-22 130 views
-3

我有一個MS訪問中有多個字段的表。這些字段具有代表時間段的字段名稱,如2011_2,2011_3,...,2013_9,2013_10,...,2015_1,2015_2 ...根據查詢中的日期動態選擇字段名稱

如何運行選擇未來12個月的查詢作爲基於今天日期的必要字段?即如果今天是2013年12月22日,則選擇字段:2013_12,2014_1,2014_2,...,2014_12?

非常感謝。

+0

也許你可以做一個嘗試? –

+0

我試圖使用SELECT(Year(Now())&「_ 9」)嘗試模擬2013_9,但返回的結果如下所示:字段名稱是expr1000,並且該字段中的值是2013_9的列該列的每個單元格 – user3126475

+2

您的數據的SQL查詢處理結構錯誤。你需要規範化它。 – Yawar

回答

1

您的問題的簡短答案是,您不能在Access查詢生成器中具有動態字段名稱。理想情況下,你應該修改你的數據,以便你有一個日期字段。通過這種方式,您可以在查詢條件中爲該字段指定日期範圍,而不需要下面的體操操作。

如果這是不可能的,但是,長的答案是您需要使用VBA代碼來構建您的查詢。下面的代碼應該在你的數據庫中創建一個新的查詢(巧妙地稱爲「YourQuery」),它將包含你需要的字段。

由於我不知道你的表是什麼,所以在這個例子中它將是「表」。如果您使用此代碼,則應該將其更改爲任何表格。

您需要將此代碼安裝在數據庫的VBA模塊中,然後設計一些調​​用該函數的方法來生成新查詢。例如,您可以使用「RunCode」操作創建一個使用「DynamicQuery()」作爲運行過程的宏。請注意,如果本月的查詢已經存在,那麼函數調用將失敗,因此如果由於某種原因需要再次運行它(如果需要添加其他代碼以實現此功能),則手動刪除它。

再一次,僅僅因爲你可以做點什麼並不意味着你應該。你真的應該重新設計你的桌子,所以你不必訴諸這樣的解決方法。

Public Function DynamicQuery() 

Dim strSQL As String 
dim datFieldDate As Date 
Dim strYearMonth As String 
Dim strThisMonth As String 
Dim dbs As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim i As Integer 

Set dbs = CurrentDb 

strThisMonth = Year(Date) & "_" & Month(Date) 

strSQL = "SELECT table." & strThisMonth 

For i = 1 to 12 

datFieldDate = DateAdd("m",i,Date) 
strYearMonth = Year(datFieldDate) & "_" & Month(DatFieldDate) 

strSQL = strSQL & ", table." & strYearMonth 

Next i 

strSQL = strSQL & " FROM table;" 

Set qdf = dbs.CreateQueryDef("YourQuery_" & strThisMonth, strSQL) 

Set qdf = Nothing 
Set dbs = Nothing 

End Function 
+0

謝謝!它設法稍作修改,結果證明我需要[2013]所有的2013_9,因爲下劃線。但很好的幫助!謝謝! – user3126475

1

如果你在上面有一個按鈕訪問,你可以在代碼中創建SQL語句作爲一個字符串形式,例如:

MyString = "SELECT " & Year(Now) & "_9" & " FROM myTable....." 

然後,您可以通過代碼來執行它。

您將無法創建一個「標準」查詢來動態構建要選擇的字段列表。

相關問題