Буду признателен за любую помощь по этой проблеме, которая поставила меня в тупик:
Я пытаюсь выполнить хранимую процедуру SQL Server 2008 из Access 365 VBA и вывести из строя сообщение об ошибке «Ошибки, вызванные многоэтапной операцией OLE DB».
Эта ошибка началась, когда я изменил столбец в целевой таблице с типа данных int на десятичный (3,1). (Теперь мне нужно сохранить одну цифру справа от десятичной дроби).
Для устранения неполадок / тестирования я сократил хранимую процедуру, чтобы обновить только этот столбец. (OCR_Freq - столбец обновления, OcrxId - идентификатор записи).
Я подтвердил / попробовал:
1) Столбец таблицы имеет десятичное значение (3,1).
2) Тип данных в переменной хранимой процедуры является десятичным (3,1).
3) хранимая процедура выполняется без проблем с SQL Server
Студия управления.
4) Изменение типа данных столбца на десятичное (18,4) не дало эффекта.
4) приведенный ниже код VBA выполняется без проблем, если DataType
adInteger.
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 не удовлетворен моей переменной ...
но я в растерянности, как двигаться вперед. Любая помощь будет оценена.