我有一個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?
非常感謝。
我有一個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?
非常感謝。
您的問題的簡短答案是,您不能在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
謝謝!它設法稍作修改,結果證明我需要[2013]所有的2013_9,因爲下劃線。但很好的幫助!謝謝! – user3126475
如果你在上面有一個按鈕訪問,你可以在代碼中創建SQL語句作爲一個字符串形式,例如:
MyString = "SELECT " & Year(Now) & "_9" & " FROM myTable....."
然後,您可以通過代碼來執行它。
您將無法創建一個「標準」查詢來動態構建要選擇的字段列表。
也許你可以做一個嘗試? –
我試圖使用SELECT(Year(Now())&「_ 9」)嘗試模擬2013_9,但返回的結果如下所示:字段名稱是expr1000,並且該字段中的值是2013_9的列該列的每個單元格 – user3126475
您的數據的SQL查詢處理結構錯誤。你需要規範化它。 – Yawar