Array de variables en VB6
Tratamiento del contenido de un array

Fecha: 11/Jun/2004 (10/Junio/2004)
Autor: Pedro Alex Taya Yactayo alextaya@hotmail.com 

.

Un array permite referirse a una serie de elementos del mismo tipo por un mismo nombre y referenciar un único elemento de la serie utilizando un índice. Visual Basic, igual que sus predecesores, permite definir arrays de variables de una o más dimensiones y de cualquier tipo de datos (tipos fundamentales y tipos definidos por el usuario), e introduce una nueva clase de arrays de controles, necesarios para escribir menús, para crear nuevos controles en tiempo de ejecución o para hacer que una serie de controles tengan asociado un mismo procedimiento para cada tipo de suceso.

Arrays de variables

    Los arrays discutidos en este apartado permiten referirse a una serie de variables por un mismo nombre y acceder individualmente a cada una de ellas utilizando un índice (variables subindicadas). Este tipo de arrays tiene que declararse en el código y pueden tener una o más dimensiones.

 Arrays estáticos

Para declarar un array estático (array con un número fijo de elementos), Visual Basic hace tres consideraciones importantes:

     A diferencia de otras versiones de Basic, Visual Basic no permite declarar implícitamente un array. Un array tiene que ser declarado explícitamente, y los índices del mismo deben estar en el rango (-2.147.483.648 a 2.147.483.647).

     A continuación se muestran algunos ejemplos:

     Dim Array_A(19) As String

     Este ejemplo declara un array de una dimensión, Array_A, con veinte elementos, Array_A(0), Array_A(1),..., Array_A(19), cada uno de los cuales permite almacenar una cadena de caracteres de longitud variable.

     Dim Array_B(3, 1 To 6) As Integer

     Este ejemplo declara un array de dos dimensiones, Array_B, con 4x6 elementos, Array_B(0,1),..., Array_B(3,6), de tipo entero.

     Static Array_C(1 To 5, 1 To 5) As Integer

     Este ejemplo declara un array de dos dimensiones, Array_C, con 5x5 elementos, Array_C(1,1),..., Array_C(5,5), de tipo entero.

     Public Array_D(1 To 12) As String *60

     Este ejemplo declara un array de una dimensión, Array_D, con doce elementos, Array_D(1),..., Array_D(12), cada uno de los cuales permite almacenar una cadena de caracteres de longitud fija (60 caracteres).

Arrays Dinámicos

Cuando las dimensiones de un array no son siempre las mismas, la mejor forma de especificarlas es mediante variables. Un array declarado de esta forma es un array dinámico. El espacio necesario para un array estático  se asigna al iniciarse el programa y permanecerá fijo. El espacio para un array dinámico será asignado en cualquier momento durante la ejecución.

Para crear un array dinámico.

    Declare el array en la sección de declaraciones de un módulo con una sentencia Public si lo quiere global con Private o Dim si lo quiere s nivel del módulo, o en un procedimiento con Static o Dim si lo quiere local. Para especificar que el array va a ser dinámico deje la lista de dimensiones vacía. Por ejemplo:

     Dim Array_A()

Asigne el número actual de elementos con la sentencia ReDim.

    ReDim Array_A(N+1)

    La sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar el número de elementos del array, no el número de dimensiones.

Por ejemplo, si declaramos el array_A a nivel de un módulo.

    Private Array_A() as Integer

Para asignarle espacio al array utilizamos:

    ReDim Array_A(5)

    Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array se pierden. Cuando le interese cambiar el tamaño del array conservando los valores del array, ejecute ReDim  con la palabra clave Preserve. Por ejemplo, supongamos un Array_A de dos dimensiones. La sentencia será:

    ReDim Preserve Array_A(8)

Ahora para poder entenderlo mejor vamos a desarrollar un ejercicio básico sobre el tratamiento del contenido de un array de variables en vb6.

TIEMPO DE DISEÑO

Crearemos la siguiente interfaz para el mantenimiento de clientes.

1.Crear arreglos para los siguientes controles

    A.Arreglo de cajas de texto para lo cual el nombre será TxtDatos:

    B.Arreglo de botones de comandos para Desplazamiento de registros, el nombre será CmdIra:

    B.Arreglo de botones de comando para Mantenimiento de registros , el nombre será CmdMantenimiento:

TIEMPO DE EJECUCIÓN

a)En declaraciones generales se digita lo siguiente:

 'Declarar el array de variables con 5 filas y 4 columnas de tipo cadena

  Dim datos(1 To 5, 1 To 4) As String
  Dim reg As Integer, sw As String * 1

b)Luego se crean lo siguientes procedimientos privados para ser utilizados como librerías:

    Procedimiento para borrar el contenido de las cajas de texto:

  Private Sub Limpiacajas()
  For i = 0 To 4
     TxtDatos(i).Text = Empty
  Next i
  End Sub

       Procedimiento para cambiar el estado de habilitado de las cajas de texto:

  Private Sub estadocajas(cajas As Boolean)
  For i = 1 To 4
      TxtDatos(i).Enabled = cajas
  Next i
  End Sub

    Procedimiento para cambiar el estado de habilitado de los botones de comando de mantenimiento:

  Private Sub estadobotones(estado As Boolean)
  cmdmantenimiento(0).Enabled = Not estado
  cmdmantenimiento(1).Enabled = estado
  cmdmantenimiento(2).Enabled = Not estado
  cmdmantenimiento(3).Enabled = estado
  cmdmantenimiento(4).Enabled = Not estado
  cmdmantenimiento(5).Enabled = Not estado
  cmdmantenimiento(6).Enabled = Not estado
  If reg = 5 Then cmdmantenimiento(0).Enabled = False
  End Sub

    Procedimiento para cambiar el estado de habilitado de los botones de comando de desplazamiento:

  Private Sub estadoira(est As Boolean)
  For i = 0 To 3
      CmdIra(i).Enabled = est
  Next i
  End Sub

c)Crear el procedimiento asociado al evento clic para el arreglo CmdIra:

  Private Sub CmdIra_Click(Index As Integer)
  Dim puntero As Integer
  If reg > 0 Then
  Select Case Index
      Case 0
              puntero = LBound(datos, 1)
              TxtDatos(0).Text = puntero
              For i = 1 To 4
                  TxtDatos(i).Text = datos(puntero, i)
              Next i
      Case 1
              puntero = Val(TxtDatos(0).Text) - 1
              If puntero >= LBound(datos, 1) Then
                  TxtDatos(0).Text = puntero
                  For i = 1 To 4
                      TxtDatos(i).Text = datos(puntero, i)
                  Next i
              End If
      Case 2
              puntero = Val(TxtDatos(0).Text) + 1
              If puntero <= reg Then
                  TxtDatos(0).Text = puntero
                  For i = 1 To 4
                      TxtDatos(i).Text = datos(puntero, i)
                  Next i
              End If
      Case 3
              puntero = reg
              TxtDatos(0).Text = puntero
              For i = 1 To 4
                  TxtDatos(i).Text = datos(puntero, i)
              Next i
  End Select
  End If
  End Sub

d)Crear el procedimiento asociado al evento clic para el arreglo CmdMantenimiento:

  Private Sub cmdmantenimiento_Click(Index As Integer)
  Dim ape As String, resp As String * 1, Control As Integer
  resp = "N"
  Select Case Index
    Case 0
      sw = "N"
      estadobotones (True)
      estadoira (False)
      estadocajas (True)
      Limpiacajas
      reg = reg + 1
      If reg >= UBound(datos, 1) Then cmdmantenimiento(0).Enabled = False
      TxtDatos(0).Text = reg
      TxtDatos(1).SetFocus
      Case 1
        For i = 1 To 4
         Control = i
         If Len(Trim(TxtDatos(i))) = 0 Then
           MsgBox TxtDatos(i).Tag + " se encuentra en blanco", vbOKOnly + vbInformation, "Aviso"
           Control = Control - 1
           TxtDatos(i).SetFocus
           Exit Sub
         End If
        Next i
        If Control = 4 Then
           For i = 1 To 4
               datos(reg, i) = TxtDatos(i).Text
           Next i
           estadobotones (False)
           estadoira (True)
           estadocajas (False)
        End If
      Case 2
        If reg > 0 Then
           sw = "M"
           estadocajas (True)
           TxtDatos(1).SetFocus
           estadobotones (True)
        Else
           MsgBox "No existen registros para realizar la modificación", vbOKOnly + vbInformation, "Aviso"
        End If
     
      Case 3
        estadobotones (False)
        estadoira (True)
        estadocajas (False)
        If sw = "N" Then
           reg = reg - 1
           Limpiacajas
           CmdIra_Click (0)
        End If
      Case 4
        If reg > 0 Then
           ape = InputBox("Ingrese el apellido a buscar:", "Búsqueda")
           If Len(Trim(ape)) > 0 Then
              For i = 1 To 5
               If Trim(ape) Like Trim(datos(i, 1)) Then
                  TxtDatos(0).Text = i
                  For X = 1 To 4
                     TxtDatos(X).Text = Empty
                     TxtDatos(X).Text = Trim(datos(i, X))
                  Next X
                  resp = "S"
               Else
                  If resp = "N" And i = 5 Then MsgBox "Cliente no localizado", vbOKOnly + vbInformation, "Aviso"
               End If
              Next i
           Else
              MsgBox "Ingrese el apellido del cliente", vbOKOnly + vbInformation, "Aviso"
           End If
         Else
           MsgBox "No existen registros para realizar la búsqueda", vbOKOnly + vbInformation, "Aviso"
         End If
      Case 5
         If reg > 0 Then
           If MsgBox("Está seguro que desea eliminar el registro" +  Chr(13) + Chr(10) + "del Cliente " + TxtDatos(1).Text + _
           " " + TxtDatos(2).Text + "?", vbYesNo + vbQuestion + vbDefaultButton2, "Confirmación") = vbYes Then
              For i = Val(TxtDatos(0).Text) + 1 To reg
                  For X = 1 To 4
                      datos(i - 1, X) = datos(i, X)
                  Next X
              Next i
              reg = reg - 1
              For Y = 1 To 4
                 datos(reg + 1, Y) = ""
              Next Y
              Limpiacajas
              CmdIra_Click (0)
              estadobotones (False)
           End If
         Else
           MsgBox "No existen registros para eliminar", vbOKOnly + vbInformation, "Aviso"
         End If
      Case 6
         End
End Select
End Sub

e)Crear el procedimiento asociado al evento load para el Formulario:

  Private Sub Form_Load()
  reg = 0
  End Sub

f)Crear el procedimiento asociado al evento keypress para el arreglo TxtDatos:

  Private Sub TxtDatos_KeyPress(Index As Integer, KeyAscii As Integer)
  Select Case Index
          Case 1
                  If KeyAscii = 13 Then
                      TxtDatos(2).SetFocus
                  End If
          Case 2
                  If KeyAscii = 13 Then
                      TxtDatos(3).SetFocus
                  End If
          Case 3
                  If KeyAscii = 13 Then
                      TxtDatos(4).SetFocus
                  End If
          Case 4
                  If KeyAscii = 13 Then
                      cmdmantenimiento(1).SetFocus
                  End If
  End Select
  End Sub

Espero que les pueda ayudar con este artículo y nos vemos en otra oportunidad.


ir al índice

El fichero con el código de ejemplo: alextaya_arrayenvb6f.zip 6.39 KB