[下面我在vba中设置参数发送到访问查询。该查询采用开始日期、结束日期、原因代码和子组。所有标准都是字符串,除了子组是一个整数。
Sub FinalDrill()
'Step 1: Declare your variables
Dim DatabasePath As String
DatabasePath = ThisWorkbook.Path & "\SpreadSheetData.accdb"
Dim MyDatabase As DAO.Database
Dim MyQueryDef As DAO.QueryDef
Dim MyRecordset As DAO.Recordset
Dim i As Integer
'Step 2: Identify the database and query
Set MyDatabase = DBEngine.OpenDatabase _
(DatabasePath)
Set MyQueryDef = MyDatabase.QueryDefs("FinalDrill")
'Step 3: Define the Parameters
With MyQueryDef
.Parameters("[Start Date]") = GetStartDate()
.Parameters("[End Date]") = GetEndDate()
.Parameters("[Reason Code]") = "C"
.Parameters("[Sub Group]") = 2
End With
'Step 4: Open the query
Set MyRecordset = MyQueryDef.OpenRecordset
最后一行抛出“运行时错误 3464” - 条件表达式中的数据类型不匹配
我不明白,因为我已经从不同的潜艇上运行了这种确切类型的查询,只有开始日期和结束日期,它很有效....即使我注释掉了
'.Parameters("[Reason Code]") = "C"
'.Parameters("[Sub Group]") = 2
并将访问查询更改为仅除开始日期和结束日期之外我得到相同的错误。
也许我累了,错过了一些明显的东西,任何帮助都会很棒。
更新
下面的查询有效,所以我猜问题出在我的访问查询中。
'Step 1: Declare your variables
Dim DatabasePath As String
DatabasePath = ThisWorkbook.Path & "\SpreadSheetData.accdb"
Dim MyDatabase As DAO.Database
Dim MyQueryDef As DAO.QueryDef
Dim MyRecordset As DAO.Recordset
Dim i As Integer
'Step 2: Identify the database and query
Set MyDatabase = DBEngine.OpenDatabase _
(DatabasePath)
Set MyQueryDef = MyDatabase.QueryDefs("levelOnePie")
'Step 3: Define the Parameters
With MyQueryDef
.Parameters("[Start Date]") = GetStartDate()
.Parameters("[End Date]") = GetEndDate()
End With
'Step 4: Open the query
Set MyRecordset = MyQueryDef.OpenRecordset
一旦我找到它们,将更新更多结果。