Unidad 40. Archivos secuenciales en VB (II)





40.5. Leer un registro.

El siguiente paso sería intentar leer el registro que hemos grabado anteriormente.

Para la grabación sin usar la estructura la lectura es como sigue:

 

  Input(Canal, Expediente)  ' código

  Input(Canal, Nombre)

  Input(Canal, Domicilio)

 

Para la grabación usando la estructura la lectura es como sigue:

 

  Input(Canal, Registro)  ' código 

 

40.6. Lectura de un archivo secuencial.

La lectura de un archivo secuencial se basa siempre en el uso de un bucle del tipo mientras.

La estructura de dicho bucle es la que sigue:

 

  While Not EOF(Canal)

    ' lectura de un registro

    Input(Canal, Codigo)

    Input(Canal, Denom)

    Input(Canal, Cant)

    Input(Canal, Preci)

    ' Realizar el proceso correspondiente.

  End While

40.7. Proceso de actualización.

El proceso de actualización se basa en el emparejamiento de registros, para ello los archivos han de estar grabados en secuencia, en caso contrario no es posible realizar un proceso adecuadamente correcto.

El sistema seguido es el de high value, viejo sistema utilizado en otros lenguajes de programación, pero no por ello menos efectivo.

La filosofía es la de emparejar registros como ya se explicó en el tema anterior.

Importante que el valor utilizado como High value, no sea alcanzable por los datos del archivo.

El proceso se basa en que solo puede haber proceso de actualización si los códigos coinciden, en ese caso puede darse el caso de borrado o actualización, pero nunca un alta, eso sería un error.

Si el código del archivo principal se adelanta al de los cambios, significa que los registros hasta igualarse deben ser del tipo alta, en caso contrario sería un error en la grabación del archivo de cambios.

Si el código del archivo principal se queda por detrás significa que ese código no dispone de incidencias, por lo que debe ser copiado tal como está en el archivo que se crea nuevo en el proceso, para no perder los datos que no van a sufrir cambios.

Siempre debemos disponer de una pareja de registros, por lo que al tratar un registro del archivo principal, inmediatamente hay que leer otro.

Igual con el de los cambios.

 

Por este motivo antes de entrar en el bucle de proceso, se debe cargar una pareja de registros fuera del bucle.

Al realizar la lectura en un archivo si se da la circunstancia de final de archivo, es cuando al código de ese archivo se le asigna el high value.

No sirve utilizar variables de tipo booleano, ni cualquier otra combinación, cuyo único resultado al final es maquiavélico, comparado con la sencillez de éste proceso.

A continuación exponemos el núcleo del proceso.

No está completo, se ha extraído lo esencial, y se ha realizado sin el uso de estructuras.

 

If Not EOF(CanalMalum) Then

    LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)

  Else

    ExpedM = Hv

End if

If Not EOF(CanalMoviv) Then

    LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)

  Else

    Exped = Hv

End IF

 

While Exped <> Hv Or ExpedM <> Hv

  Select Case Exped

    Case Is > ExpedM   ' copiar maestro

      Grabacion(CanalMaes, ExpedM, NombM, Ape1M, Ape2M, DomicM)

      If Not EOF(CanalMalum) Then

          LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)

        Else

          ExpedM = Hv

      End if

    Case Is < ExpedM

      Select Case Tipo

        Case "1"   ' alta

          Grabacion(CanalMaes, Exped, Nomb, Ape1, Ape2, Domic)

          If Not EOF(CanalMoviv) Then

              LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)

            Else

              Exped = Hv

          End IF

       Case Else

         ' Error

         LineaDet(Exped, Nomb, Ape1, Ape2, Domic, Tipo, "Actualiza")

         If Not EOF(CanalMoviv) Then

             LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)

           Else

             Exped = Hv

         End If

          End Select

        Case Is = ExpedM

          Select Case Tipo

            Case "1"   ' alta, error

              ' Línea de detalle

              LineaDet(Exped, Nomb, Ape1, Ape2, Domic, Tipo, "Alta")

              If Not EOF(CanalMoviv) Then

                 LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)

               Else

          Exped = Hv

        End if

      Case "2"   ' baja, no se graba

        If Not EOF(CanalMoviv) Then

            LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)

          Else

            Exped = Hv

        End if

        If Not EOF(CanalMalum) Then

            LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)

          Else

            ExpedM = Hv

        End if

      Case "3"   ' modificación, se graba el nuevo

        Grabacion(CanalMaes, Exped, Nomb, Ape1, Ape2, Domic)

        If Not EOF(CanalMoviv) Then

            LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)

          Else

            Exped = Hv

        End if

        If Not EOF(CanalMalum) Then

            LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)

          Else

            ExpedM = Hv

        End if

       End Select

    End Select

End While

 

40.8. Cierre

Para ello se utiliza la instrucción FileClose(Canal)

Y se cierra cada uno de los archivos que nos interesa.

 

 

•Ejercicios propuestos de la Unidad
Octubre-2010
Pág. 40.2

Atrás  Inicio  Adelante






Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies