Excel 2010中VBA中的SQLstring与date

我已经看了一下,但无法find这个SQL语句的问题:

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" 

无论我更改WHERE它总是返回数据库中的每一个值(至less我假设这样做,因为excel完全挂起,当我尝试这样做)这个SQL语句在Access(如果date有##围绕他们)完全正常工作。 任何想法如何解决这个问题,目前正试图创build一个允许用户在不同dateinput的SQL语句,但必须首先克服这个随机障碍。

编辑 :SQL数据库中的date字段是一个DD / MM / YY HH:MM:SS格式,这个查询是在VBA – EXCEL 2010中完成的。
另外为了避免混淆,从语句中删除了TOP 10,这是为了阻止Excel检索数据库中的每一行。
我已经激活的当前参考是:MicrosoftX Data Objects 2.8库
数据库是一个MSSQL,使用连接string:
Provider = SQLOLEDB; Server = #######; Database = #######; User ID = ########; Password = ########;

请确认Call.CallDate字段的数据types是DATETIME或DATE

如果你真的在SQL Server上运行这个function,请尝试以下语法:

 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' 

您看到的date格式只是客户端工具决定显示的格式。date不以任何格式存储,它们有效地存储为自x以来的持续时间。

默认情况下,SQL使用格式YYYY-MM-DD如果你想使用date文字。

但是,在代码中定义datetypes的参数并尽可能保持date为数据types“date”要好得多。 这可能包括只允许他们使用日历控件inputdate以避免歧义。

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

使用#围绕datevariables。

编辑 :请使datestring明确,如2012年11月27日

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

如果您使用的是ado,则应该查看Paramaters而不是使用dynamic查询。

编辑2 :感谢@ElectricLlama指出它是SQL Server,而不是MS-Access

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