从excel宏更新到SQL Server存储过程时,将数据类型varchar转换为int时出错

问题描述 投票:0回答:2

我有一个Excel宏用于通过存储过程更新SQL Server中的数据。

存储过程是:

ALTER PROCEDURE [dbo].[modkulfadquery] 
    @steuerID nvarchar(20) = null,
    @kulfirsz integer = null,
    @kulfvaros nvarchar(50) = null,
    @kulfutca nvarchar(50) = null,
    @lakcimbejdatum date = null,
    @kulfbankszlaszam nvarchar(50) = null,
    @nevID integer = 0
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE nevlista 
    SET steuerID = @steuerID,
        kulfirsz = @kulfirsz,
        kulfvaros = @kulfvaros,
        kulfutca = @kulfutca,
        lakcimbejdatum = CONVERT(DATE, @lakcimbejdatum),
        kulfbankszlaszam = @kulfbankszlaszam
    WHERE nevID = @nevID
END

宏是:

With Munka3
    elsosor = 3
    Do Until .Cells(elsosor, 1) = ""
        nevID = .Cells(elsosor, 1).Value
        steuerID = .Cells(elsosor, 3).Value
        kulfirsz = .Cells(elsosor, 4).Value
        kulfvaros = .Cells(elsosor, 5).Value
        kulfutca = .Cells(elsosor, 6).Value
        lakcimbejdatum = .Cells(elsosor, 7).Value
        kulfbankszlaszam = .Cells(elsosor, 8).Value

        Set cmd = New ADODB.Command
        cmd.ActiveConnection = cnn
        cmd.CommandType = adCmdStoredProc
        cmd.CommandText = "modkulfadquery"
        cmd.Parameters.Append cmd.CreateParameter("@nevID", adInteger, adParamInput, , nevID)
        cmd.Parameters.Append cmd.CreateParameter("@steuerID", adVarChar, adParamInput, 20, steuerID)
        cmd.Parameters.Append cmd.CreateParameter("@kulfirsz", adInteger, adParamInput, , kulfirsz)
        cmd.Parameters.Append cmd.CreateParameter("@kulfvaros", adVarChar, adParamInput, 50, kulfvaros)
        cmd.Parameters.Append cmd.CreateParameter("@kulfutca", adVarChar, adParamInput, 50, kulfutca)
        cmd.Parameters.Append cmd.CreateParameter("@lakcimbejdatum", adDate, adParamInput, , lakcimbejdatum)
        cmd.Parameters.Append cmd.CreateParameter("@kulfbankszlaszam", adVarChar, adParamInput, 50, kulfbankszlaszam)
        cmd.Execute

        elsosor = elsosor + 1
    Loop
End With

运行宏,我收到错误消息:

将数据类型varchar转换为int时出错。

我已经检查了存储过程,宏和Excel表中的所有参数类型,以及SQL Server中的表。他们都是一样的。

另外,我有一个类似的存储过程(做同样的)只是用更少的输入参数和nvarchar类型(除了nevID),并在那里它只是工作正常。我找不到其他类似帖子的答案..

请帮我!

sql-server excel-vba stored-procedures vba excel
2个回答
1
投票

好的,我找到了解决方案。对于处理类似问题的每个人:

存储过程中的最后一个参数是宏中的第一个参数,所以我猜输入参数的类型顺序错误。我将存储过程中的@nevID参数移到了第一个位置,从那时起它就可以了!

无论如何,谢谢你的帮助!


0
投票

错误在这里

 elsosor = elsosor + 1

elsosor声明为整数,然后初始化其值

© www.soinside.com 2019 - 2024. All rights reserved.