使用SQL数据库查询在VBA中date/时间转换失败

第一件事是第一件事 这是我的代码。

Dim conn As ADODB.Connection Dim rec1 As ADODB.Recordset Dim connStr As String Dim thisSql As String Dim testStr As String Sub Button3_Click() Worksheets("Sheet5").Range("N1") = Worksheets("Sheet5").Range("N1") + 1 Set conn = New ADODB.Connection connStr = "DSN=myDatabase;UID=myUsername;PWD=myPassword;APP=Microsoft Office 2013;WSID=myPCname;DATABASE=myDatabase" conn.Open connStr thisSql = "SELECT myDatabase.OrderNumber, myDatabase.CustomerName, myDatabase.ShipProd, myDatabase.Sum of Sales, myDatabase.InvoiceDate FROM myDatabaseAddress " thisSql = thisSql & "WHERE (myDatabase.ShipProd Like '" & Worksheets("Sheet5").Range("C2") & "') " thisSql = thisSql & "GROUP BY myDatabase.CustomerName, myDatabase.OrderNumber, myDatabase.InvoiceDate, myDatabase.ShipProd, myDatabase.OEELPrimarySlsCrdtWhse " thisSql = thisSql & "HAVING (myDatabase.OEELPrimarySlsCrdtWhse Like 'MI%') " thisSql = thisSql & "AND (myDatabase.InvoiceDate Between {ts '" & Worksheets("Sheet5").Range("E2") & "'} And {ts '" & Worksheets("Sheet5").Range("F2") & "'}) " thisSql = thisSql & "ORDER BY myDatabase.CustomerName ASC" Set rec1 = New ADODB.Recordset rec1.Open thisSql, conn Worksheets("Sheet5").Range("A3:F10000").Clear With Worksheets("Sheet5").QueryTables.Add(Connection:=rec1, Destination:=Worksheets("Sheet5").Range("A3")) .Name = "data" .FieldNames = True .Refresh BackgroundQuery:=False End With End Sub 

我想发送一个查询参数,并从我的SQL数据库中带回一些结果。 我想要传递的参数之一是InvoiceDate必须介于的date范围。 这些date位于单元格E2和F2中。 当我运行代码时,我收到一个错误,说

 Run-time error '-2147217913 (80040e07)': [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting date and/or time from character string. 

当我在消息框上按“debugging”时,它会突出显示代码行

 rec1.Open thisSql, conn 

我尝试过许多不同的方式来格式化电子表格中的单元格,包括yyyymmdd和m / d / yyyy h:mm和mm / dd / yyyy hh:mm:ss。

我遇到的另一个问题是其中一个字段名称是“销售总和”。 这部分产生一个错误,说“of”是一个保留关键字。

如果有任何人有任何build议,那将不胜感激。

UPDATE

我设法通过更改修复date/时间错误

 thisSql = thisSql & "AND (myDatabase.InvoiceDate Between {ts '" & Worksheets("Sheet5").Range("E2") & "'} And {ts '" & Worksheets("Sheet5").Range("F2") & "'}) " 

 thisSql = thisSql & "AND (myDatabase.InvoiceDate Between '" & Worksheets("Sheet5").Range("E2") & "' And '" & Worksheets("Sheet5").Range("F2") & "') " 

虽然,我仍在努力解决字段名称问题。 我试图把'myDatabase.Sum of Sales'放在单引号中,就像在这里一样,但是这只是在相应列中的所有单元格中返回“myDatabase.Sum of Sales”。