Попытка ввести параметр nvarchar для выполнения сохраненного процесса.Получение ошибки VBA: Ошибка времени выполнения '3708' Объект параметра неправильно определен - PullRequest
0 голосов
/ 04 июня 2019

При работе над проектом VBA данные извлекаются из базы данных sql. Запрос работает с другим хранимым процессом, который работает только с числами. Я изменил val на вариант, и он правильно вытягивает значение F2. Когда я пытаюсь сгенерировать вывод, возникает ошибка. Любая помощь будет оценена.

Изменено несколько типов, таких как adParamInput, но ничего не получилось так хорошо.

Sub SQLDatabase_StoredProc1()

Dim rs As ADODB.Recordset
Dim cnSQL As ADODB.Connection
Dim sqlCommand As ADODB.Command, prm As Object
Dim colOffset As Integer
colOffset = 1
Dim qf As Object, numOfRecordsAffected As Long

Dim val As Variant
val = Range("F2").Value
'Dim val As String
'val = Range("F2").Value

Sheets("database").Select
Cells.Range("A1:D100").ClearContents

Set cnSQL = New ADODB.Connection
cnSQL.Open "Provider=SQLOLEDB; Integrated Security = sspi; Initial Catalog = [database]; Data Source = [server]"


Set sqlCommand = New ADODB.Command
sqlCommand.ActiveConnection = cnSQL
sqlCommand.CommandType = adCmdStoredProc
sqlCommand.CommandText = "OwnershipTestProc"
Set prm = sqlCommand.CreateParameter("ID", adVarChar, adParamInput)
sqlCommand.Parameters.Append prm
sqlCommand.Parameters("ID") = val


Set rs = New ADODB.Recordset
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Open sqlCommand

If rs.EOF Then
MsgBox ("There is no data for the Tax ID. rs.eof = " & rs.EOF)
Else
MsgBox ("# of records = " & rs.RecordCount)
ActiveSheet.Cells(2, 2).CopyFromRecordset rs
For Each qf In rs.Fields
    Range("A1").Offset(0, colOffset).Value = qf.name
    colOffset = colOffset + 1
Next qf
End If
rs.Close
Set rs = Nothing
End Sub

Цель состоит в том, чтобы сохраненный процесс выполнялся и выводил данные. Параметр, передаваемый в («ID»), не должен быть ограничен только числами.

1 Ответ

1 голос
/ 04 июня 2019

Я думаю, вам нужно установить размер для параметра строки (adVarChar).

Set prm = sqlCommand.CreateParameter("ID", adVarChar, adParamInput)
prm.Value = val
prm.Size = len(val)
sqlCommand.Parameters.Append prm

или, короче

Set prm = sqlCommand.CreateParameter("ID", adVarChar, adParamInput, len(val), val)
sqlCommand.Parameters.Append prm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...