从 Excel 中查询 Access 中的常规日期字段(错误 13)
Posted
技术标签:
【中文标题】从 Excel 中查询 Access 中的常规日期字段(错误 13)【英文标题】:Querying General Date field in Access from Excel (Error 13) 【发布时间】:2015-12-16 01:55:08 【问题描述】:我需要从 Excel 查询 Access 表中的一般日期字段。请建议如何正确格式化日期以使查询正常工作。这可能是我在查询中遗漏的一个小细节,我无法弄清楚。我尝试以不同的方式格式化日期,如果 Access 中的日期字段格式更改为 short date 但不是我需要使用的一般日期格式,则查询有效。以下是在 Access 中查询短日期的方法:
SQLwhere = SQLwhere & "[MDL_Table1].[UploadDate] BETWEEN " &
Format(UserForm1.txtStartDate, "\#mm\/dd\/yyyy\#") & " AND " _
& Format(UserForm1.txtEndDate, "\#mm\/dd\/yyyy\#") & " AND "
我包含了我的代码的一部分。我已使用此代码执行其他查询,并且运行良好。此外,getDate 方法确实返回日期。请参阅下面的代码:
Dim qc1 As String
Dim DateMin As String
Dim DateMax As String
'add error handling
On Error GoTo errHandler:
'Disable screen flickering.
'FastWB True, 3
DateMin = Format(frmCalendar.getDate(DateMin), "mm/dd/yyyy hh:mm:ss AM/PM")
DateMax = Format(frmCalendar.getDate(DateMax), "mm/dd/yyyy hh:mm:ss AM/PM")
Sheet1.Range("A2:AK5000").ClearContents
dbPath = "H:\DEMO\MDL_IonTorrent.accdb"
'set the search variable
qc1 = "_QC"
Set cnn = New ADODB.Connection ' Initialise the collection class variable
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
SQLwhere = "WHERE "
SQLwhere = SQLwhere & "[MDL_Table1].[UploadDate] BETWEEN #" & DateMin & "# AND #" _
& DateMax & "# AND "
SQLwhere = SQLwhere & "[MDL_Table1].[AAchange] LIKE '" & "%" & qc1 & "%" & "' AND "
strSQL = "SELECT * FROM [MDL_Table1] "
'Remove the last AND applicable
If SQLwhere = "WHERE " Then
SQLwhere = ""
Else
SQLwhere = Left(SQLwhere, Len(SQLwhere) - 5)
End If
strSQL = strSQL & SQLwhere
Set rs = New ADODB.Recordset 'assign memory to the recordset
rs.Open strSQL, cnn
【问题讨论】:
这是部分代码吗?您尚未标注所有变量的尺寸。例如Dim cnn As ADODB.Connection
。您需要标注所有变量。在 excel VBA 格式函数中,语法为 Format( expression[,format [,firstdayofweek [,firstweekofyear]]])
。我不确定它是否支持 getdate 方法。我了解到您正在使用表单日历来选择日期,因为您的代码显示 frmCalendar
。如果不支持 getdate,则可以将选择的日期写入工作表隐藏单元格,并可以从那里提取日期。错误 13 是由类型不匹配、未声明的变量或数据不匹配引起的。
顺便说一句,您使用的是哪个版本的 Access 和 Excel?
抱歉您的标签状态为 ms-access-2010
【参考方案1】:
改变
DateMin = Format(frmCalendar.getDate(DateMin), "mm/dd/yyyy hh:mm:ss AM/PM")
到
DateMin = Format(frmCalendar.getDate(DateMin), "mm-dd-yyyy hh:mm:ss")
对 datemax 做同样的事情。
【讨论】:
@asdev...我收到“找不到项目或库错误。DateMin = Format(frmCalendar.getDate(DateMin), "mm-dd-yyyy hh:mm:ss")
和 Format
突出显示。我之前在工作中没有遇到此错误电脑,但我现在正在尝试在家运行代码。
嗯...您似乎缺少参考。根据您的问题查看此 SO-Post ***.com/questions/507191/…。如果它可以在您的家用计算机上运行,请随时通知我。以上是关于从 Excel 中查询 Access 中的常规日期字段(错误 13)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Excel VBA 查询 MS Access,SQL BETWEEN 日期查询
在 MS Access SQL 查询中从普通日期转换为 unix 纪元日期