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