【发布时间】:2016-07-17 06:04:22
【问题描述】:
当我尝试从 Access 中的更新后事件执行以下存储过程时,出现“运行时错误 (13):类型不匹配”错误。我的存储过程在 SQL (MSSQL2014) 中有 @Season 作为 nvarchar(max) 和 @Year 作为 int。关于原因的任何想法?我整天都在寻找,但还没有快乐。代码如下:
Private Sub Event_Click()
Dim cnn1 As New ADODB.Connection
Dim cmd As New ADODB.Command
Set cnn1 = New ADODB.Connection
cnn1.ConnectionString = "<connection string snipped but works OK>"
cnn1.ConnectionTimeout = 30
cnn1.Open
vSeason = Me.ComboBox1.Value
vYear = Me.ComboBox2.Value
With cmd
.ActiveConnection = cnn1
.CommandText = "dbo.StoredProcedure"
.CommandType = 4
.CommandTimeout = 0
.Parameters.Append .CreateParameter("@Season", adVarChar, adParamInput, vSeason)
.Parameters.Append .CreateParameter("@Year", adInteger, adParamInput, vYear)
End With
cnn1.Close
Set cnn1 = Nothing
在此不胜感激。如果需要任何进一步的信息,请告诉我。
【问题讨论】:
-
我觉得
adVarChar应该换成adVarWChar。 -
^^ 那 -
n正在使参数 unicode,所以你需要一个 unicode 参数。另外,@Season是nvarchar(max)有什么原因吗?如果可以,请使用@SeasonId int。我会将 4000 个字符的输入(当实际需要可能 -
尝试使用
Execute而不是ADODB.Commands。cnn1.Execute ("EXEC dbo.StoredProcedure '" & vSeason & "', " & vYear & ";") -
@Mat's Mug 和 Zohar - 不幸的是,切换到 adVarWChar 对数据类型错误没有影响。关于 Mat 将 Season 参数设为 int 的建议,我可以这样做,尽管我担心 vba 无法识别以 :( 开头的字符串参数。
-
@HansUp 切换附加语句没有改变任何东西
标签: sql sql-server vba ms-access