Я не могу использовать Redim Preserve в некоторых частях кода - PullRequest
0 голосов
/ 15 апреля 2019

Я использую redim preserve для хранения объектов, но возникает ошибка.В той части кода, где мне нужно ее использовать, программа ломается.

function get_info(ByRef a_array_of_objects )

'ReDim Preserve a_array_of_opbjects ( 5 )  if i put here the redim 
 'preserve it works but i don`t need here

Set conexion = Server.CreateObject("ADODB.Connection")
set comando =Server.CreateObject("ADODB.Command")
conexion.open "DSN=mydsn;server=myserver;uid=myUser;pwd=mypass"
comando.ActiveConnection=conexion       

comando.CommandText="MY_STORE_PROCEDURE"
comando.CommandType=4

comando.Parameters.Append objComm1.CreateParameter("p_parameter",3,1,100,10)

set v_local=comando.Execute

v_local_array=v_local.GetRows

 ReDim Preserve a_array_of_objects ( ubound(v_local_array,2) ) '  i need 
   'here the redim preserve code but it breaks      
   ' the index is out of range is the error
 for i=0  to  UBound(v_local_array,2)
   set o_object=new c_object

   o_object.let_property=v_local_array(0,i)
   o_object.let_property1=v_local_array(1,i)

   a_array_of_objects(i)=o_object 
next




function_that_clean_parameters(comando)
conexion.close  

    'ReDim Preserve a_array_of_objects ( 10) here the code don`t works also

 end function

Я ожидал получить исправление объектов, но получаю сообщение об ошибке, если кто-то может мне помочь.Извините за мой английский.

1 Ответ

0 голосов
/ 15 апреля 2019

Вы пытаетесь передать массив по ссылке. Вы не сможете использовать ReDim, если массив заблокирован. Вам нужно будет передать его по значению:

function get_info(ByVal a_array_of_objects)

Причина, по которой вы можете ReDim массив в начале вашей функции, заключается в том, что вы ошиблись в его написании:

a_array_of_o р bjects

Вы создавали новый массив, а не переопределяли передаваемый.

Кроме того, ваша функция фактически ничего не возвращает, в конце вашей функции обязательно укажите:

get_info = a_array_of_objects
...