通过传递参数访问呼叫存储过程

麦可

我正在使用链接到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

好的,现在回到Access。在搜索屏幕上,我有一个供用户输入的文本框,一个单击以进行搜索的按钮以及一个结果列表框。在按钮的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;

我哪里出问题了?任何帮助将不胜感激。

正如我只想返回值一样,仅使用传递查询并对参数进行编码会更有效吗?我不确定,我已经为此工作了好几天:-(

问候,

麦可

戈德·汤普森

问题在于存储过程将输入参数声明为,nvarchar(50)但是在VBA中ADODB.Parameter使用定义了输入参数adString,没有长度。问题:

  1. nvarchar在SQL Server上映adVarWChar射到ADO中
  2. 字符串参数几乎总是需要具有定义的(最大)长度

所以解决方法是将参数声明更改为

Set prm = .CreateParameter("@Search", adVarWChar, adParamInput, 50)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用传递参数访问呼叫存储过程

来自分类Dev

从VBA中的访问模块传递参数时调用存储过程

来自分类Dev

存储过程期望传递的参数

来自分类Dev

在sequalize中调用存储过程以传递参数

来自分类Dev

SQL Server存储过程传递日期参数

来自分类Dev

pymysql如何为存储过程传递参数

来自分类Dev

如何通过c#mvc函数传递两个参数以调用存储过程

来自分类Dev

存储过程:通过将两个数字作为参数传递来相加

来自分类Dev

通过ADO检索存储过程输出参数

来自分类Dev

从Crystal Reports中的不同存储过程调用传递存储过程参数的存储过程

来自分类Dev

ADO命令参数未传递给存储过程或存储过程“忽略”参数

来自分类Dev

通过一个参数将复选框列表中多个选定的值传递给存储过程

来自分类Dev

如何通过参数将大于200个字符的字符串传递给存储过程

来自分类Dev

Oracle Apex:访问通过URL传递的参数

来自分类Dev

用单引号将参数传递给存储过程

来自分类Dev

如何将输出参数传递给存储过程?

来自分类Dev

将多值参数传递给存储过程

来自分类Dev

如何用希伯来语传递SQL存储过程NVARCHAR参数?

来自分类Dev

使用ASP将参数传递给存储过程

来自分类Dev

使用DbContext将参数传递给存储过程

来自分类Dev

将参数传递给SQL Server存储过程

来自分类Dev

C#TSQL存储过程不传递参数?

来自分类Dev

将参数传递给存储过程时出错

来自分类Dev

PDO OCI PHP将数组参数传递给存储过程

来自分类Dev

Dapper存储过程传递IEnumerable时指定了太多参数

来自分类Dev

从程序到存储过程的ASP.NET参数传递

来自分类Dev

日期传递给存储过程的参数无法正常工作

来自分类Dev

将参数传递给存储过程-特殊情况

来自分类Dev

如何用希伯来语传递SQL存储过程NVARCHAR参数?

Related 相关文章

  1. 1

    使用传递参数访问呼叫存储过程

  2. 2

    从VBA中的访问模块传递参数时调用存储过程

  3. 3

    存储过程期望传递的参数

  4. 4

    在sequalize中调用存储过程以传递参数

  5. 5

    SQL Server存储过程传递日期参数

  6. 6

    pymysql如何为存储过程传递参数

  7. 7

    如何通过c#mvc函数传递两个参数以调用存储过程

  8. 8

    存储过程:通过将两个数字作为参数传递来相加

  9. 9

    通过ADO检索存储过程输出参数

  10. 10

    从Crystal Reports中的不同存储过程调用传递存储过程参数的存储过程

  11. 11

    ADO命令参数未传递给存储过程或存储过程“忽略”参数

  12. 12

    通过一个参数将复选框列表中多个选定的值传递给存储过程

  13. 13

    如何通过参数将大于200个字符的字符串传递给存储过程

  14. 14

    Oracle Apex:访问通过URL传递的参数

  15. 15

    用单引号将参数传递给存储过程

  16. 16

    如何将输出参数传递给存储过程?

  17. 17

    将多值参数传递给存储过程

  18. 18

    如何用希伯来语传递SQL存储过程NVARCHAR参数?

  19. 19

    使用ASP将参数传递给存储过程

  20. 20

    使用DbContext将参数传递给存储过程

  21. 21

    将参数传递给SQL Server存储过程

  22. 22

    C#TSQL存储过程不传递参数?

  23. 23

    将参数传递给存储过程时出错

  24. 24

    PDO OCI PHP将数组参数传递给存储过程

  25. 25

    Dapper存储过程传递IEnumerable时指定了太多参数

  26. 26

    从程序到存储过程的ASP.NET参数传递

  27. 27

    日期传递给存储过程的参数无法正常工作

  28. 28

    将参数传递给存储过程-特殊情况

  29. 29

    如何用希伯来语传递SQL存储过程NVARCHAR参数?

热门标签

归档