【问题标题】:msacces vba call procedure fails when parameter added添加参数时,ms access vba调用过程失败
【发布时间】:2022-01-26 15:33:27
【问题描述】:

我正在尝试自学创建和调用存储过程。搜索了 2 天后,我没有进一步解决以下问题。

我在 SQL Express 中有如下基本存储过程:

GO
/****** Object:  StoredProcedure [dbo].[spTestCustomers]    Script Date: 26/01/2022 15:17:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
[dbo].[spTestCustomers]

AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM [tblCustomers]

END

我可以在 MS Access 中使用以下 VB 正确调用它:

Private Sub cmdTest_Click()
'define query for ptSHCustomers
    Dim SQL As String, qdf As DAO.QueryDef
        
    Set qdf = CurrentDb.QueryDefs("ptSHCustomers")

    qdf.SQL = "EXEC spTestCustomers"
    
    Me.lstTest.Requery
  
End Sub

但是当我添加一个参数失败时,SQL Server 代码:

USE [WPSDb]
GO
/****** Object:  StoredProcedure [dbo].[spTestCustomers]    Script Date: 26/01/2022 15:25:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
[dbo].[spTestCustomers]
@Surname nvarchar(25)
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM [tblCustomers]
WHERE Surname like @Surname
END

我试图从 MS Access 调用的代码:

Private Sub cmdTest_Click()
'define query for ptSHCustomers
    Dim SQL As String, qdf As DAO.QueryDef
    Dim VarCustSurname As String
  
    VarCustSurname = "%"
        
    Set qdf = CurrentDb.QueryDefs("ptSHCustomers")

    qdf.SQL = "EXEC spTestCustomers ('" & VarCustName & "');"
    
    Me.lstTest.Requery
  
End Sub

我已经尝试了许多在线指导中的代码更改,但都无济于事。谁能指出我正确的方向?

【问题讨论】:

  • 它在第二个cmdTest_Click() 的大部分代码中显示VarCustSurname,直到到达qdf.SQL = "EXEC spTestCustomers ('" & VarCustName & "');" 行。这是故意的吗?

标签: vba ms-access stored-procedures parameter-passing


【解决方案1】:

EXECUTE 不使用括号。

EXEC myProc @varParam, 'literal param';

在 VBA 中

qdf.SQL = "EXEC spTestCustomers '" & VarCustName & "';"

【讨论】:

  • 非常感谢就像做梦一样。感觉挺厚的!
猜你喜欢
  • 2023-03-27
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多