• Miércoles 20 de Noviembre de 2024, 16:24

Autor Tema:  Arreglo Como Parametro en Procedimiento VB 6.0  (Leído 9481 veces)

MArio85

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Arreglo Como Parametro en Procedimiento VB 6.0
« en: Martes 29 de Julio de 2008, 23:38 »
0
Hola Como puedo hacer para utilizar como parametro un arreglo dinamico global dentro de un procedimiento?
Necesito un procedimiento ya que necesito modificar mas de 1 arreglo por lo que no puedo usar una funcion.
Masomenos lo que quiero hacer seria algo asi:

Código: Text
  1. Sub Modi_array(arreglo1 as type1, arreglo2 as type2)
  2. Dim temp1 as type1
  3. Dim temp2 as type2
  4.  
  5. If  "Condicion " then
  6.        redim preserve temp1(i)
  7.        i = i+1
  8. endif
  9. If  "Condicion " then
  10.        redim preserve temp2(j)
  11.        j = j+1
  12. endif
  13.  
  14. arreglo1 = temp1
  15. arreglo2 = temp2
  16.  
  17.  

Otra cosa es que no se si tenga que usar el Byval en el parametro del arreglo ya que si quiero modificar el arreglo globalmente.

Gracias
Saludos!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #1 en: Miércoles 30 de Julio de 2008, 09:31 »
0
Perdona mi poco vocaburio iberoamericano, ¿pero con arreglo te refieres a un array/vector?

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #2 en: Miércoles 30 de Julio de 2008, 18:42 »
0
Si deseas colocar un array en forma global debes de dimensionarlo en un módulo BAS por ejemplo

Código: Text
  1. Public gastrArreglo1() As String
  2. Public gastrArreglo2() As String
  3.  

En el código que colocas estás haciendo mezclas con el otro tipo de Instrucción Type, lo que hace difícil de entender tu código. Type también maneja arrays (arreglos) pero de distinta manera.

Además tienes en la línea Sub Modi_array(arreglo1 as type1, arreglo2 as type2) y en el código que sigue no usas ni arreglo1 ni arreglo2.

Lo que se usa para pasar un arreglo a una subrutina no es ByVal es ByRef, por ejemplo
Código: Text
  1. Sub SortArrayDic(ByRef sArray() As String, lngLenDic As Long)
  2.  

 :comp:

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #3 en: Miércoles 30 de Julio de 2008, 19:15 »
0
Muy bien explicado, un par de puntualizaciones:

Cita de: "cpmario"
estás haciendo mezclas con el otro tipo de Instrucción Type

No usa la instrucción Type en su código.

Cita de: "cpmario"
Lo que se usa para pasar un arreglo a una subrutina no es ByVal es ByRef

Eso no es así. El arreglo se puede pasar ByVal (que es lo mismo que si no pones nada) o ByRef. La diferencia es, como su nombre indica, que lo pasas por valor (By Value) o por referencia (By Reference). En el primer caso a la función se le pasa una copia del vector y no el original, por lo que los cambios hechos en él desaparecerán al acabar la función. En el segundo caso se pasa la dirección de memoria (puntero) del vector, con lo que los cambios hechos dentro de la función sí serán permanentes.

Cita de: "MArio85"
redim preserve temp1(i)

Además no sirve que pongas preserve puesto que el vector no tiene nada con anterioridad.  :P

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #4 en: Miércoles 30 de Julio de 2008, 20:26 »
0
Si lo que desea MArio85 es "un arreglo dinámico global"
Entonces se necesita ByRef y no ByVal

 :comp:

MArio85

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #5 en: Miércoles 30 de Julio de 2008, 21:15 »
0
Cita de: "cpmario"
Si deseas colocar un array en forma global debes de dimensionarlo en un módulo BAS por ejemplo

Además tienes en la línea Sub Modi_array(arreglo1 as type1, arreglo2 as type2) y en el código que sigue no usas ni arreglo1 ni arreglo2.

 :comp:

Los arreglos que tengo como parametros si los uso al final del procedimiento, al poner:
Arreglo1 = Temp1
Arreglo2 = Temp2

Mas bien la pregunta principal es como pasar como parametro de un procedimiento un arreglo global y dentro del procedimiento modificar el mismo.

Por lo que entiendo tendria que usar el prefijo Byref para que modifique el arreglo y no Byval ya que hace una copia del alor del arreglo y no se modifica el original, correcto?

Entonces el codigo seria : Sub Modi_Array(ByRef Arreglo1() As String, ByRef Arreglo2() As String)      ???????????????????????

Saludos

MArio85

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #6 en: Miércoles 30 de Julio de 2008, 21:18 »
0
Cita de: "cpmario"
Además tienes en la línea Sub Modi_array(arreglo1 as type1, arreglo2 as type2) y en el código que sigue no usas ni arreglo1 ni arreglo2.

 :comp:

Los arreglos que tengo como parametros si los uso al final del procedimiento, al poner:
Arreglo1 = Temp1
Arreglo2 = Temp2

Mas bien la pregunta principal es como pasar como parametro de un procedimiento un arreglo global y dentro del procedimiento modificar el mismo.

Por lo que entiendo tendria que usar el prefijo Byref para que modifique el arreglo y no Byval ya que hace una copia del alor del arreglo y no se modifica el original, correcto?

Entonces el codigo seria : Sub Modi_Array(ByRef Arreglo1() As String, ByRef Arreglo2() As String)      ???????????????????????

Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #7 en: Miércoles 30 de Julio de 2008, 21:47 »
0
Sí, eso es, si quieres modificar ambos vectores. Ten en cuenta que entonces no necesitarías ni temp1 ni temp2 sino que los cambios directamente en arreglo1 y arreglo2. Saludos

MArio85

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #8 en: Jueves 31 de Julio de 2008, 03:39 »
0
Sip, de hecho en la version pasada de mi programa lo tenia asi, pero lo que pasa es que el arreglo global que se va a modificar cambiará segun una serie de validaciones , pero creo que al tener el arreglo como parametro me voy a ahorrar mucho pero mucho codigo

Gracias!

MArio85

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #9 en: Jueves 31 de Julio de 2008, 19:33 »
0
Hola, pues vuelvo a molestarlos por que estoy teniendo problema al llamar el procedimiento mi codigo es el siguiente:

Código: Text
  1. Private Type Normal  ' Declaro el Tipo de Arreglo Que Necesito Con sus Campos
  2.  
  3.     Patente As String
  4.     Pedimento As String
  5.     Archivo As String
  6.     Firma As String
  7.     Fecha As String
  8.     Hora As String
  9.     Regimen As String
  10.     Clave As String
  11.     RFC As String
  12.     Nombre As String
  13. End Type
  14.  
  15. Dim Arreglo Global1(), ArregloGlobal2() as Normal ' Declaro Globalmente los arrays
  16.  
  17.  ' Despues hago el Codigo de mi procedimiento con varios parametros que necesito
  18. Private Sub Fact(Pat As String, ByVal ini As Long, ByVal fin As Long, ByRef IndiPat() As Normal, ByRef ConsoPat() As Normal)
  19. dim temp1(),temp2() as Normal                        
  20.                         "Serie de Validaciones"
  21.                         IndiPat = temp1
  22.                         ConsoPat = temp2
  23. end sub
  24.  
  25. Private Sub Command1_Click() ' En un boton mando llamar el procedimiento
  26.            Fact Check2.Caption, fechai, fechaf, ArregloGlobal1(), ArregloGlobal2()
  27. end Sub
  28.  
  29.  
  30.  

No me marca ningun error al escibir el codigo pero al correr el programa y dar click en el boton (para llamar al procedimineto) me aparece el error: "Error de Compilacion: Error de tipo : se esperaba una matriz o un tipo definido por el usuario", el eror me lo marca al querer llamar al procedimiento en el parametro "ArregloGlobal1()".

Que esta mal?, no entiendo que puede estar mal ( aparte por que no se mucho de esto, jeje), pueden ser los prefijos private o algo asi?

Podria parecer algo inutil si voy a modificar arreglos globales declararlos como parametros, pero es dificl y tardado explicar lo que hace el sistema pero si necesito el procedimiento con parametros mas que nada pra ahorrarme mucho codigo.

Gracias!, Saludos!

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #10 en: Jueves 31 de Julio de 2008, 21:13 »
0
A mi si me funciona el código con pequeños cambios.

En un módulo BAS

Código: Text
  1. Option Explicit
  2.  
  3. Private Type Normal  ' Declaro el Tipo de Arreglo Que Necesito Con sus Campos
  4.  
  5.         Patente As String
  6.         Pedimento As String
  7.         Archivo As String
  8.         Firma As String
  9.         Fecha As String
  10.         Hora As String
  11.         Regimen As String
  12.         Clave As String
  13.         RFC As String
  14.         Nombre As String
  15. End Type
  16.  
  17. ' hay un espacio extra en Arreglo Global1()  lo eliminé  
  18. Public ArregloGlobal1() As Normal
  19. Public ArregloGlobal2() As Normal ' Declaro Globalmente los arrays
  20.    
  21. ' La subrutina no debe de ser privada, ya que la llamarás desde una forma
  22. Sub Fact(Pat As String, ByVal ini As Long, ByVal fin As Long, ByRef IndiPat() As Normal, ByRef ConsoPat() As Normal)
  23.         Dim temp1(), temp2() As Normal
  24.        '"Serie de Validaciones"
  25.         Stop
  26.  
  27. End Sub
  28.  
  29.  

En una forma, colocando un control CheckBox
Código: Text
  1. Option Explicit
  2.  
  3. Private Sub Command1_Click()
  4.     Dim fechai, fechaf
  5.     Fact Check2.Caption, fechai, fechaf, ArregloGlobal1(), ArregloGlobal2()
  6. End Sub
  7.  
  8.  
Al ejecutar el código se detiene en el Stop

 :comp:

MArio85

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #11 en: Viernes 1 de Agosto de 2008, 01:09 »
0
Fijate que la unica diferencia que habia ( ya que el espacio vacio me equivoque aqui y no en el codigo), fue en la declaracion de los arreglos globales.
yo declaraba :  Dim Arreglo1(),Arreglo2() as string, y asi al momento de llamar el procedimiento me marcaba error, pero si lo declaraba:
Dim arreglo1() as string
Dim arreglo2() as string
La diferencia fue que se debia declarar en dos renglones separados, funciono correctamente, por que fue esto?, y esto nomas pasa caundo uso los arreglos como parametro si no utilizo parametros si me reconoce la variable correctamente.

Saludos

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Arreglo Como Parametro en Procedimiento VB 6.0
« Respuesta #12 en: Viernes 1 de Agosto de 2008, 02:32 »
0
El error es el siguiente:

Código: Text
  1. Dim Arreglo1(),Arreglo2() as string
  2.  
La primera variable Arreglo1() se dimensiona como variable tipo variante y la segunda como tipo string.


Para que funcione adecuadamente debe ser así:

Código: Text
  1. Dim Arreglo1() As String, Arreglo2() As String
  2.  

 :comp: