我正在使用鏈接到SQL Server 2012數據庫後端的Access 2010前端。使用傳遞參數訪問調用存儲過程
在Access前端中,我有一個通用搜索屏幕,由一個文本框組成,其結果顯示在列表框中。我希望文本框能夠搜索多個也需要通配符的字段。
所以,我的存儲過程是這樣的:
ALTER PROCEDURE [dbo].[SalesGeneralSearch]
@Search nvarchar(50) = ''
AS
BEGIN
SET NOCOUNT ON;
SELECT
tblJobHead.JobNum,
tblCustomer.LastName,
tblCustomer.M3DealerCode,
tblCustomer.TradeRef,
tblCustomer.Postcode,
tblJobHead.[Item Number],
tblJobHead.Description,
tblStatus.[Desc] AS Status
FROM
tblCustomer
INNER JOIN
(tblJobHead
INNER JOIN
tblStatus ON tblJobHead.Status = tblStatus.StatusID) ON tblCustomer.RepNum = tblJobHead.[Rep Num]
WHERE
(((tblJobHead.JobNum) Like '%'+ @Search + '%'))
OR (((tblCustomer.LastName) Like '%' + @Search + '%'))
OR (((tblCustomer.M3DealerCode) Like '%' + @Search + '%'))
OR (((tblCustomer.TradeRef) Like '%' + @Search + '%'))
OR (((tblCustomer.Postcode) Like '%' + @Search + '%'))
ORDER BY
tblJobHead.JobNum DESC;
END
好了,現在回訪問。在搜索屏幕上,我有用戶輸入的文本框,點擊搜索按鈕和結果列表框。按鈕我有下面的代碼的Click事件:
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Dim adString As Variant
Set cn = New ADODB.Connection
cn.ConnectionString = "DRIVER=SQL Server;SERVER=XXX;Database=XXX;Trusted_Connection=YES;"
cn.Open
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = cn
.CommandText = "dbo.SalesGeneralSearch"
.CommandType = adCmdStoredProc
Set prm = .CreateParameter("@Search", adString, adParamInput)
.Parameters.Append prm
cmd.Execute
prm.Value = Me.Search.Text
End With
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open cmd
End With
Set Me!lstJobQuickSearch.Recordset = rs
Me.lstJobQuickSearch.Requery
Set prm = Nothing
Set cmd = Nothing
然而,當我點擊搜索按鈕,我不斷收到以下錯誤:
運行時錯誤3708參數對象定義不正確
和它突出
.Parameters.Append prm
的lstJobQuickSearch的行源是穿過查詢作爲使用以下公:
SELECT tblJobHead.JobNum, tblCustomer.LastName, tblCustomer.M3DealerCode, tblCustomer.TradeRef, tblCustomer.Postcode, tblJobHead.[Item Number], tblJobHead.Description, tblJobHead.FN, tblStatus.[Desc] AS Status
FROM tblCustomer INNER JOIN (tblJobHead INNER JOIN tblStatus ON tblJobHead.Status = tblStatus.StatusID) ON tblCustomer.RepNum = tblJobHead.[Rep Num]
ORDER BY tblJobHead.JobNum DESC;
我哪裏出錯了?任何幫助將不勝感激。
因爲我只是想返回值,使用傳遞查詢和代碼參數更有效嗎?我不知道,我一直工作在這天: - (
問候,
邁克爾
嘗試'設置prm = .CreateParameter(「@ Search」,adVarWChar,adParamInput,50)' – 2014-10-03 10:32:52
已經工作了!非常感謝。出於興趣 - 究竟是什麼導致了這個問題? – Michael 2014-10-03 11:42:55