从 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 纪元日期

从 Access 导出到 Excel 时出现日期超出范围错误

在excel中日期格式如何转换成常规格式?

将 Excel 公式转换为 Access 查询

Microsoft Access 使用 Access 中的 SQL 查询合并两个 Excel 文件