簡體   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