Sql server SQL存储过程的VBA执行失败,数据类型为adDecimal

Sql server SQL存储过程的VBA执行失败,数据类型为adDecimal,sql-server,vba,ms-access,stored-procedures,Sql Server,Vba,Ms Access,Stored Procedures,如果您能在这个问题上给予我帮助,我将不胜感激: 我试图从Access 365 VBA执行SQL Server 2008存储过程,并不断出现多步骤OLE DB操作生成的错误。 当我将目标表中的一列从int数据类型更改为decimal3,1时,这个错误就开始了。我现在需要能够存储小数点右边的一个数字 为了进行故障排除/测试,我简化了存储过程,仅更新本专栏。OCR_Freq是更新列,OcrxId是记录id 我已验证/尝试: 1表格列设置为小数3,1。 2存储过程变量中的数据类型为小数3,1。 3存储过

如果您能在这个问题上给予我帮助,我将不胜感激: 我试图从Access 365 VBA执行SQL Server 2008存储过程,并不断出现多步骤OLE DB操作生成的错误。 当我将目标表中的一列从int数据类型更改为decimal3,1时,这个错误就开始了。我现在需要能够存储小数点右边的一个数字

为了进行故障排除/测试,我简化了存储过程,仅更新本专栏。OCR_Freq是更新列,OcrxId是记录id

我已验证/尝试: 1表格列设置为小数3,1。 2存储过程变量中的数据类型为小数3,1。 3存储过程执行时没有SQL Server的问题 管理工作室。 4将列数据类型更改为小数18,4没有效果。 4如果数据类型为,则执行下面的vba代码时不会出现问题 阿迪特格。 5我使用此代码执行许多其他存储过程 毫无疑问

'VBA CODE:
Dim Comm As ADODB.Command
Dim lngRecordsAffected As Long
Dim param1 As New ADODB.Parameter
Dim param2 As New ADODB.Parameter
'************************************************
Dim ocrxid As Long
Dim OCR_Freq As Variant
Dim x As Single

'testing the formatting
x = 7.2 'doesn't work
'OCR_Freq = Round(x, 1) 'doesn't work
'OCR_Freq = CDec(x) 'doesn't work
'OCR_Freq = Round(OCR_Freq, 1) 'doesn't work
OCR_Freq = CDec(Format(x, "00.0")) 'doesn't work

'connection stuff
If con.State = adStateClosed Then
    con.ConnectionString = conConnection
    con.Open
End If

Set Comm = New ADODB.Command
With Comm
    .ActiveConnection = con
    .CommandType = adCmdStoredProc
    .CommandText = "up_EOCR_TEST"

    '--- ADD PARAMETERS --------------------------------
    'OCR_Freq decimal(3,1)
    Set param1 = Comm.CreateParameter("@OCR_Freq", adDecimal, 
        adParamInput, , OCR_Freq)
    Comm.Parameters.Append param1
    'test record id
    Set param2 = Comm.CreateParameter("@OcrxId", adInteger, 
        adParamInput, , 8053)
    Comm.Parameters.Append param2

    .Execute lngRecordsAffected
End With
'END VBA CODE

//SQL Stored Procedure:
@OCR_Freq decimal(3,1) = null, 
@OcrxId int = null
as
begin
  UPDATE dbo.OCRX SET OCR_Freq=@OCR_Freq  WHERE OCR_ID=@OcrxId;
END
我得到的错误是多步骤OLE DB操作生成的错误 以上情况使我得出结论,我没有正确地准备vba中的值以执行存储过程-adDecimal对我的变量不满意。。。
但我不知道如何前进。如果有任何帮助,我们将不胜感激。

好吧,解决方案就摆在我面前-我忘记在附加参数之前设置参数1的数值刻度和精度:

'VBA CODE CORRECTED:
Dim Comm As ADODB.Command
Dim lngRecordsAffected As Long
Dim param1 As New ADODB.Parameter
Dim param2 As New ADODB.Parameter
'************************************************
Dim ocrxid As Long
Dim OCR_Freq As Variant
Dim x As Single

'testing the formatting
x = 7.5
OCR_Freq = x

'connection stuff
If con.State = adStateClosed Then
    con.ConnectionString = conConnection
    con.Open
End If

Set Comm = New ADODB.Command
With Comm
    .ActiveConnection = con
    .CommandType = adCmdStoredProc
    .CommandText = "up_EOCR_TEST"

    '--- ADD PARAMETERS ---------------------------------------------------
    'OCR_Freq decimal(3,1)
    Set param1 = Comm.CreateParameter("@OCR_Freq", adDecimal, adParamInput, , 
OCR_Freq)
    param1.NumericScale = 1
    param1.Precision = 3
    Comm.Parameters.Append param1

    Set param2 = Comm.CreateParameter("@OcrxId", adInteger, adParamInput, , 
8053)
    Comm.Parameters.Append param2

    .Execute lngRecordsAffected
End With

该错误可能与正在传递的值8053有关。小数3,1的实际参数类型的最大值为99.9。感谢您的回复。Param2是记录id,它可以正常工作。问题肯定出在param1/OCR_Freq变量上。您使用的是哪个OLEDB提供程序版本?旧版本的OLEDB驱动程序可能存在小数问题。我使用的连接字符串是:ODBC;驱动程序={SQL Server};SERVER=serverName;数据库=dbaseName;Trusted_Connection=Yes我尝试将驱动程序从SQL Server更改为SQL Server本机客户端10.0,但也没有成功。这对我很有效。我一整天都在挣扎,找不到哪里出了问题。读了这篇文章后,我终于知道十进制类型是罪魁祸首