2013-11-25 59 views
2

我一直在尋找天的解決方案,但在任何地方都找不到任何東西。我有Excel與Access數據庫交互。以下查詢在Access中可用:使用DateDiff()轉換訪問查詢從VBA運行

SELECT DISTINCT A.Timestamp, A.Identifier, A.Remarks, A.ActiveIndicator, 
    A.S4PDate, B.Timestamp, B.Identifier, B.Remarks, B.ActiveIndicator, B.S4PDate 
FROM AAEPData AS A INNER JOIN AAEPData AS B ON A.Identifier = B.Identifier 
WHERE (((A.Timestamp = '20131028' AND B.Timestamp = '20131014')) 
    AND ((datediff('d', A.S4PDate, B.S4PDate)) <> 0)) 
    ORDER BY A.Identifier; 

問題是如何將其轉換爲「VBA-SQL」。它應該看起來像這樣,但是我對於它的那部分有點麻煩。如何正確切換時間間隔?這裏是我的VBA代碼:

sql = "SELECT DISTINCT A.Identifier, A.Remarks, A.ActiveIndicator, A.S4PDate," 
sql = sql & " B.Identifier, B.Remarks, B.ActiveIndicator, B.S4PDate " 
sql = sql & "FROM AAEPData AS A " 
sql = sql & "INNER JOIN AAEPData AS B ON ((A.Identifier = B.Identifier))" 
sql = sql & "WHERE (((A.Timestamp = '20131028' AND B.Timestamp = '20131014')) " 
sql = sql & "AND (Datediff('d', A.S4PDate, B.S4PDate) <> 0))) " 
sql = sql & "ORDER BY B.Identifier ASC;" 

當我這樣做它不會返回值,但也不會給出錯誤。我確定確實有我正在查詢的日期值S4PDate的變化。有任何想法嗎?非常感謝您的幫助。謝謝。 SQL變量是完全性右後

+0

單引號計爲VBA中的評論指標。將它們改爲雙引號(DateDiff(「d」,...),並讓我們知道發生了什麼。 –

+0

@ craig.white - 更改這些引號將肯定會導致錯誤 - 它會將字符串放在一行中,沒有語法支持。 – Smandoli

回答

2

,加入這一行:

Debug.Print sql 

完整的SQL將出現在立即窗口。將它作爲Access中普通查詢(而不是VBA)的基礎粘貼。查看查詢是否運行。

我看到一個缺陷 - 你一個行的結束需要一個空間,在這裏看到:

"FROM AAEPData AS A INNER JOIN AAEPData AS B ON ((A.Identifier = B.Identifier)) " 

如果修復您的測試查詢仍然失敗後,簡化您的查詢。省略使用DateDiff()。把它放到運行的東西上。然後重新建立備份,根據需要進行更正。這是normal trouble shooting procedure