2012-11-27 53 views
1

我周圍看了一下,但無法找到該SQL語句的問題:SQL字符串在VBA在Excel 2010與日期

strSQL = "SELECT Directory.DisplayName, Department.DisplayName, Call.CallDate, Call.Extension, Call.Duration, Call.CallType, Call.SubType FROM (((Department INNER JOIN Directory ON Department.DepartmentID = Directory.DepartmentID) INNER JOIN Extension ON (Department.DepartmentID = Extension.DepartmentID) AND (Directory.ExtensionID = Extension.ExtensionID)) INNER JOIN Site ON Extension.SiteCode = Site.SiteCode) INNER JOIN Call ON Directory.DirectoryID = Call.DirectoryID WHERE (Call.CallDate)>=27/11/2012" 

不管什麼,我改變它始終返回的每一個值數據庫(至少我認爲它當我嘗試這一點,因爲Excel中完全掛起)這條SQL語句在Access工作完全正常(如果有日期周圍##)。任何想法如何解決這個問題,目前試圖創建一個允許用戶在不同日期輸入的SQL語句,但必須首先克服這個隨機障礙。

編輯:在SQL數據庫中的日期字段是DD/MM/YY HH:MM:SS格式,並且此查詢,在VBA做 - Excel 2010中
同時,爲了避免混亂已刪除TOP 10從聲明中,這是爲了阻止excel檢索數據庫中的每一行。
電流參考值I已經激活是:MicrosoftX數據對象2.8庫
數據庫是一個MSSQL,使用連接字符串:
提供商= SQLOLEDB;服務器= #######;數據庫= ###### #;用戶ID = ########;密碼= ########;

回答

1

請檢查該字段Call.CallDate是數據類型DATETIME或DATE的

如果你確實在SQL Server上運行了這個功能,請嘗試以下語法適用於初學者:

SELECT Directory.DisplayName, Department.DisplayName, Call.CallDate, 
Call.Extension, Call.Duration, Call.CallType, Call.SubType 
FROM (((Department INNER JOIN Directory 
ON Department.DepartmentID = Directory.DepartmentID) 
INNER JOIN Extension ON (Department.DepartmentID = Extension.DepartmentID) 
AND (Directory.ExtensionID = Extension.ExtensionID)) 
INNER JOIN Site ON Extension.SiteCode = Site.SiteCode) 
INNER JOIN Call ON Directory.DirectoryID = Call.DirectoryID 
WHERE (Call.CallDate)>= '2012-11-27' 

你看到的日期格式只是客戶端工具決定顯示它的任何格式。日期不以任何格式存儲,它們有效存儲爲自x以來的持續時間。

默認情況下,SQL如果你想使用文字的日期採用格式YYYY-MM-DD。

但是你好得多定義日期類型的參數在你的代碼,使您的日期數據類型「日期」爲儘可能長時間。這可能只包括允許他們使用日曆控件輸入日期以避免歧義。

+1

Call.CallDate絕對是一個DateTime,只需雙重檢查即可確認。 該查詢在SQL數據庫視圖創建器中運行得很好,但在VBA中完全失敗。 將日期更改爲YYYYMMDD,並按照您的建議將其選爲答案。 –

+0

更可靠的將取代「2012年11月27日」,使用'CONVERT(DATETIME,'20121127',112)'。這提供了一個明確的格式代碼來準確地表明你傳遞的是什麼。 –

3
WHERE (Call.CallDate) >= #27/11/2012# 

圍繞日期變量#

編輯:請日期字符串明確,如27 - 11月 - 2012

strSQL = "SELECT ........ WHERE myDate >= #" & Format(dateVar, "dd-mmm-yyyy") & "# " 

如果您正在使用ADO,你應該看看Paramaters,而不是使用動態查詢。

EDIT2:感謝@ElectricLlama的指出這是SQL服務器,而不是MS-訪問

strSQL = "SELECT ........ WHERE myDate >= '" & Format(dateVar, "mm/dd/yyyy") & "' " 
+0

我不能在SQL查詢添加#,它只是給我的運行時錯誤: 行1:附近有語法錯誤「#」。 添加額外的信息inregards到我比較的領域。 –

+0

#在MS Access中使用。這是SQL Server –