Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Код на С++ вроде правильный... КД>Может это, для начала напишешь и заставишь работать маленький тест на VB ? КД>С массивами ADO (начиная с 2.5) работает без проблем.
Написал новую хранимую процедуру WRITE_BSTR_ARRAY
И код ее вызова на VB
Dim OraConn As Connection
Set OraConn = New Connection
OraConn.CursorLocation = adUseClient
OraConn.Open "Provider=OraOLEDB.Oracle;Data Source=second;PLSQLRSet=1;", "PUMA", "puma", 0
Dim OraCommand As Command
Set OraCommand = New Command
OraCommand.ActiveConnection = OraConn
OraCommand.CommandText = "WRITE_BSTR_ARRAY"
Dim pprmBinaryVal As Parameter
Dim arrVal(0 To 9) As String
'пробовал также Dim arrVal(1 To 10) As String
Dim x As Long
For x = LBound(arrVal) To UBound(arrVal)
arrVal(x) = CStr(x) & ":" & CStr(Time)
Next x
Set pprmBinaryVal = OraCommand.CreateParameter("mas", adArray + adBSTR, adParamInput)
И все равно получаю ту же ошибку.
Может проблема не в C++ и VB, а в Oracle?
Я с ним недавно работаю и может не знаю как там правильно с массивами работать
Но я пробовал даже самую простую хр. процедуру, где сам массив даже не используется.
Описание типа
CREATE TYPE "PUMA"."VBSTR" AS VARRAY (10) OF VARCHAR2(255)
процедура
CREATE OR REPLACE PROCEDURE "PUMA"."WRITE_BSTR_ARRAY" (mas
IN VBSTR)
IS
BEGIN
UPDATE PUMA.TEST_ARRAY SET iid = 0;
END WRITE_BSTR_ARRAY;