【发布时间】:2019-10-02 13:34:33
【问题描述】:
对于这个让我很困惑的问题,如果能提供任何帮助,我将不胜感激: 我正在尝试从 Access 365 VBA 执行 SQL Server 2008 存储过程,并不断出现“多步 OLE DB 操作生成错误”。 当我将目标表中的列从 int 数据类型更改为 decimal(3,1) 时,此错误开始。 (我现在需要能够在小数点右侧存储一个数字)。
为了进行故障排除/测试,我剥离了存储过程以仅更新此列。 (OCR_Freq 为更新列,OcrxId 为记录id)。
我已经验证/尝试过: 1)表格列设置为十进制(3,1)。 2) 存储过程变量中的数据类型为十进制(3,1)。 3) 存储过程从 SQL Server 执行没有问题 管理工作室。 4) 将列数据类型更改为 decimal(18,4) 无效。 4) 如果 DataType 是,下面的 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 对我的变量不满意...... 但我不知道如何前进。任何帮助将不胜感激。
【问题讨论】:
-
该错误可能与您传递的值有关 (8053)。
decimal(3,1)的实际参数类型最大值为99.9。 -
感谢您的回复。 Param2 是记录 ID,它可以正常运行。问题肯定出在 param1/ OCR_Freq 变量上。
-
您使用的是哪个 OLEDB 提供商(版本)?旧版本的 OLEDB 驱动程序可能存在小数问题。
-
我使用的连接字符串是:ODBC;DRIVER={SQL Server};SERVER=serverName;DATABASE=dbaseName;Trusted_Connection=Yes
-
我尝试将驱动程序从 SQL Server 更改为 SQL Server Native Client 10.0,但也没有成功。
标签: sql-server vba ms-access stored-procedures