簡體   English   中英

Excel VBA中的存儲過程引發錯誤“無參數和參數”錯誤

[英]Stored Procedure from Excel VBA throws error “no parameters and arguments” error

我有一個用SQL Server Management Studio編寫的存儲過程,需要從Excel中的VBA內置工具運行。 當我運行代碼時,它將返回此錯誤

運行時錯誤-'2147217900(80040e14):[Microsoft] [ODBC SQL Server驅動器] [SQL Server]過程uspDailyUpdateHistoricalMSL沒有提供參數和參數。

這是SQL Server中的存儲過程:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[uspDailyUpdateHistoricalMSL] 
AS
    DECLARE @location AS VARCHAR
    DECLARE @employeegroup AS VARCHAR
    DECLARE @contractagency AS VARCHAR
    DECLARE @position AS VARCHAR
    DECLARE @ftpt AS VARCHAR
    DECLARE @userid AS VARCHAR
    DECLARE @bilingual as bit
    DECLARE @59email AS VARCHAR
    DECLARE @email AS VARCHAR
    DECLARE @59extension AS VARCHAR
    DECLARE @cca2 as bit
    DECLARE @giid AS VARCHAR
    DECLARE @guid AS VARCHAR
    DECLARE @cimid AS VARCHAR
    DECLARE @adminvisit AS VARCHAR
    DECLARE @firstname AS VARCHAR
    DECLARE @lastname AS VARCHAR
    DECLARE @agentname AS VARCHAR
    DECLARE @doh AS VARCHAR
    DECLARE @team AS VARCHAR
    DECLARE @title AS VARCHAR
    DECLARE @weekdayschedule AS VARCHAR
    DECLARE @weekendschedule AS VARCHAR
    DECLARE @manager AS VARCHAR
    DECLARE @supervisor AS VARCHAR


    -- Create New Hire
    INSERT INTO [PIA].[dbo].[HistoricalMasterStaffing] ([Year], NewHire, Location, EmployeeGroup, ContractAgency, Position, FTPT, 
                                                        WeekNumber, CreatedBy, CreatedDate, Bilingual, Five9email, Email, Five9extension, 
                                                        Cca2, Gicode, Staffguid, Staffcimid, Visit, Adminvisit, Firstname, Lastname, 
                                                        Agentname, DOH, Team, Title, Weekdayschedule, Weekendschedule, Manager, Supervisor)
    VALUES (DATEPART(YEAR, GETDATE()), 'TRUE', @location, @employeegroup, @contractagency, @position, @ftpt, 
            DATEPART(ISO_WEEK, GETDATE()), @userid, GETDATE(), @bilingual, @59email, @email, @59extension, 
            @cca2, @giid, @guid, @cimid, 'Admin Visit', @adminvisit, @firstname, @lastname, 
            @agentname, @doh, @team, @title, @weekdayschedule, @weekendschedule, @manager, @supervisor) 
GO 

Here is my VBA code:
  Sub updateemployee()
  Dim Cn As ADODB.Connection
  Dim Server_Name As String
  Dim Database_Name As String
  Dim CnCmd As ADODB.Command
  Server_Name = "SDL02-VM25"
  Database_Name = "PIA"
  Set CnCmd = New ADODB.Command
  Set Cn = New ADODB.Connection
  Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & _
         Database_Name & vbNullString
  With CnCmd
 .ActiveConnection = Cn
 .CommandText = "dbo.uspDailyUpdateHistoricalMSL"
 .CommandType = adCmdStoredProc
 .CommandTimeout = 0
 .Parameters.Append .CreateParameter("@modby", adVarChar, adParamInput, 200, getWinUser)
 .Parameters.Append .CreateParameter("@location", adVarChar, adParamInput, 200, EditStaff.Location.value)
 .Parameters.Append .CreateParameter("@employeegroup", adVarChar, adParamInput, 200, EditStaff.EmployGroup.value)
 .Parameters.Append .CreateParameter("@position", adVarChar, adParamInput, 200, EditStaff.Position.value)
 .Parameters.Append .CreateParameter("@contractagency", adVarChar, adParamInput, 200, EditStaff.Agency.value)
 .Parameters.Append .CreateParameter("@ftpt", adVarChar, adParamInput, 200, EditStaff.FTPT.value)
 .Parameters.Append .CreateParameter("@bilingual", adBoolean, adParamInput, , EditStaff.bilingual.value)
 .Parameters.Append .CreateParameter("@59email", adVarChar, adParamInput, 200, EditStaff.five9email.value)
 .Parameters.Append .CreateParameter("@email", adVarChar, adParamInput, 200, EditStaff.Email.value)
 .Parameters.Append .CreateParameter("@59extension", adVarChar, adParamInput, 200, EditStaff.Five9Extension.value)
 .Parameters.Append .CreateParameter("@cca2", adBoolean, adParamInput, , EditStaff.CCA2.value)
 .Parameters.Append .CreateParameter("@guid", adVarChar, adParamInput, 200, EditStaff.GUID.value)
 .Parameters.Append .CreateParameter("@cimid", adVarChar, adParamInput, 200, EditStaff.CIMID.value)
 .Parameters.Append .CreateParameter("@adminvisit", adVarChar, adParamInput, 200, EditStaff.adminvisit.value)
 .Parameters.Append .CreateParameter("@firstname", adVarChar, adParamInput, 200, EditStaff.firstname.value)
 .Parameters.Append .CreateParameter("@lastname", adVarChar, adParamInput, 200, EditStaff.lastname.value)
 .Parameters.Append .CreateParameter("@agentname", adVarChar, adParamInput, 200, "EditStaff.firstname.value & Space(2) &            EditStaff.lastname.value")
 .Parameters.Append .CreateParameter("@doh", adVarChar, adParamInput, 200, EditStaff.DOH.value)
 .Parameters.Append .CreateParameter("@team", adVarChar, adParamInput, 200, EditStaff.Team.value)
 .Parameters.Append .CreateParameter("@title", adVarChar, adParamInput, 200, EditStaff.Title.value)
 .Parameters.Append .CreateParameter("@weekdayschedule", adVarChar, adParamInput, 200, EditStaff.weekdayschedule)
 .Parameters.Append .CreateParameter("@weekendschedule", adVarChar, adParamInput, 200, EditStaff.weekendschedule.value)
 .Parameters.Append .CreateParameter("@manager", adVarChar, adParamInput, 200, EditStaff.Manager.value)
 .Parameters.Append .CreateParameter("@supervisor", adVarChar, adParamInput, 200, EditStaff.supervisor.value)
 .Execute

  End With
  Application.StatusBar = "Updating Employee Information..."

  End Sub

您沒有在存儲過程中正確創建參數。

代替這個:

CREATE PROCEDURE [dbo].[uspDailyUpdateHistoricalMSL] AS
DECLARE @location as varchar
DECLARE @employeegroup as varchar
...

你要這個:

CREATE PROCEDURE [dbo].[uspDailyUpdateHistoricalMSL] 
 @location varchar,
 @employeegroup  varchar,
...
AS

另外,您還需要為varchar參數提供長度值,盡管這不是此特定錯誤的原因。

 @location varchar(31),  --or whatever the length of the location column is.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM