【发布时间】:2017-12-28 06:55:18
【问题描述】:
我有一个 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 除外)的工作表,我有一个类似的存储过程(做同样的事情),它在那里工作。
【问题讨论】:
-
哪一行出错了?
-
行 cmd.execute
-
尝试使用
adVariant -
我的意思是要知道,哪个参数是错误的,你1)将所有类型设为
adVariant,然后2)将类型一一更改为原始类型,即更改为adVarchar-> 运行过程;将下一个类型更改为adInteger-> 运行 proc 等。这样你会找到你的麻烦参数。 -
好的,我将宏更改为 advariant,它是 advarchar。我从 excel 表中给出了两个输入(steuerID 和 kulfirsz)。现在错误消息是:“不允许从数据类型 sql_variant 到 int 的隐式转换。使用 CONVERT 函数运行此查询”...(同时我将所有类型更改为 advariant 并得到相同的错误)
标签: sql-server excel vba stored-procedures