繁体   English   中英

Excel VBA执行MS-Access参数查询错误

[英]Excel VBA Executing MS-Access Parameter Query Error

我在访问名为“审计查询”的联合查询中,并且在此查询中有两个参数“Quarter”和“Last Name”,我使用下面的代码将参数传递给查询,然后执行查询并将记录保存在记录集变量它给我一个错误消息。

“参数对象定义不正确。提供的信息不一致或不完整。”

当我在MS-Access环境中运行时它运行正常。

Sub LC_Test_Kashif()

'For this to work, you must goto Tools->Reference and select "Microsoft 
Active X Data Objects x.xx Object Library" and "Microsoft Outlook XX.X 
Object Library", otherwise VBA won't recognize the code

'Bring up logic checks for individual user

'Step 1: Declare your variables
Dim UserName As String
Dim LastName As String
Dim Quarter As Date
Dim LastRow As Long
Dim strMyPath As String, strDBName As String, strDB As String
Dim rsRecSet As ADODB.Recordset
dim strCon as adodb.connection

LastRow = Cells(Rows.Count, 1).END(xlUp).Row

LastName = Range("D2").Value
Quarter = Range("B2").Value

Dim cmdl As ADODB.Command

Set strCon = New ADODB.Connection

#If Win64 Then
strCon.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=G:\Workflow Tools (Michael Cantor)\Tool For Fixing Bug From Michael Cantor\CDT PI Workload Report\QC Queries.mdb;Uid=Admin;Pwd="
#Else
strCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=G:\Workflow Tools (Michael Cantor)\Tool For Fixing Bug From Michael Cantor\CDT PI Workload Report\QC Queries.mdb"
#End If

'Create a new command object to process the stored proc
Set cmdl = New ADODB.Command
Set rsRecSet = New ADODB.Recordset

With cmdl
.ActiveConnection = strCon
'set COMMAND timeout property - query can time out on either the connection OR the command
.CommandTimeout = 4000
.CommandText = "Audit Query"
.CommandType = adCmdStoredProc
.Parameters.Refresh
.Parameters.Append .CreateParameter("Quarter", adVarChar, adParamInput, 100, Quarter)
.Parameters.Append .CreateParameter("Last Name", adVarChar, adParamInput, 100, LastName)
Set rsRecSet = .Execute()                                                                                              'Error Line
End With

'Step 5: Clear previous contents
Sheets("Audits").Select
ActiveSheet.Range("A5:H1000").ClearContents

'Step 6: Copy and Sort the recordset to Excel
Sheets("Audits").Select
ActiveSheet.Range("A5:H1000").CopyFromRecordset MyRecordset


'Hide Rows
Dim c As Range
Dim LastRow1 As Long

LastRow1 = Cells(Rows.Count, 1).END(xlUp).Row

For Each c In Range("H5:H" & LastRow1).Cells
If c.Value <> "" And Range("F2").Value = "N" Then
c.EntireRow.Hidden = True

Else: c.EntireRow.Hidden = False

End If

Next c

ActiveSheet.Range("4:4").EntireRow.Hidden = False

End Sub

提前致谢。

谢谢卡希夫

您将Quarter声明为Date ,但将其作为字符串传递:

.Parameters.Append .CreateParameter("Quarter", adVarChar, adParamInput, 100, Quarter)

“审计查询”可能需要一个日期值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM