Serie ficheros virtuales


 
VBA. Ficheros virtuales



VBA. Ficheros virtuales.  UPDATE


1 Introducción
2 El cuerpo de código agregado para el UPDATE en la hoja de muestra
3 El código del UPDATE
4 El código núcleo de la rutina PrUPDATE
5 Fuentes



                                                                                                                            ________



1 Introducción

Dentro de los servicios del núcleo de la aplicación de ficheros virtuales integrado por el módulo M, la última función principal que se incorpora es el UPDATE. Con ella, M recoge los servicios básicos que permiten manejar un fichero individual.

Estos servicios se ampliarán con los módulos dedicados a las lecturas por clave, que constituyen el módulo N, y posteriormente con el módulo interfaz principal W.

W integrará los servicios de M y N y añadirá funciones específicas dedicadas al soporte de vías de acceso adicionales sobre el mismo fichero base, así como al uso de nombres de fichero, del mismo modo que se hizo con el desarrollo original en lenguaje C.


Con el UPDATE, nuestra hoja de cálculo se amplia como sigue


En donde se ha agregado un cuerpo final dedicado a mostrar el funcionamiento del UPDATE.

En esta zona aparecen las claves y datos de actualización, el índice resultado de su aplicación y por último, a su derecha, una zona dedicada a leer los resultados, donde se presentan los elementos actualizados.

                                                                                                                            ________


2 El cuerpo de código agregado para el UPDATE en la hoja de muestra

El código relevante añadido sigue a continuación:

. . .
  
 
' Ejecuta Updates

 For i = 1 To 5
   
    j = i + 24
   
    Range("D" & j) = M_UPDATE(Range("C13"), Range("A" & j), Range("B" & j))
 
 Next i
   
   
 ' Recupera con READ
 
 For i = 1 To 10
   
    j = i + 24
   
   
    ' Estampilla índice
   
    Range("C" & j) = i
   
   
    ' Recupera mientras encuentra datos
   
    lResul = M_READC(Range("C13"), i, sDato, sClave)
    If lResul > 0 Then
       Exit For
    End If
   
       
    ' Pasa claves y datos recuperados
     
    Range("G" & j) = lResul
    Range("H" & j) = sClave
    Range("I" & j) = sDato
   
 Next i
 
. . .

                                                                                                                           
________

3 El código del UPDATE

En cuanto al código específico del servicio de actualización, viene dado como un distribuidor según el identificador del fichero solicitado y a continuación una llamada a la rutina común PrUpdate, como sigue:

'/*-----------------------------------------------------------------*/
'/* FUNCION....: M_UPDATE                                           */
'/*                                                                 */
'/* DESCRIPCION: Actualiza un Item en memoria                       */
'/*                                                                 */
'/* PARAMETROS.:                                                    */
'/* (entrada) lNIDp: Identificador del fichero virtual              */
'/*           sClav: Clave del Item                                 */
'/*           sDato: Datos del Item que actualizan el ítem          */
'/*                                                                 */
'/* RETORNO....:                                                    */
'/*                 0: Error de Proceso (Memoria out, ya existe...) */
'/*                >0: Indice en memoria de la clave del item asoc. */
'/*                                                                 */
'/*-----------------------------------------------------------------*/
Function M_UPDATE(lNIDp As Long, sClav As String, sDato As String) As Long

 Dim Erro As Integer ' Control de errores intermedios
 Dim lResul As Long ' Control de resultados intermedios


 ' Control de solicitud erronea
 
 If (lNIDp <= 0 Or iSTAT(lNIDp) = 0 Or lNitem(lNIDp) <= 0) Then
   
    M_UPDATE = 0
    Exit Function
   
 End If
 

 ' Control solicitud actualización sobre registro no existente
 
 lResul = M_SETEQ(lNIDp, sClav)
 If lResul <= 0 Then
   
    M_UPDATE = 0
    Exit Function
   
 End If


 ' Ejecuta la rutina común de actualización PrUPDATE sobre el fichero solicitado
 
 Select Case lNIDp
  
   Case 1
     Erro = PrUPDATE(lResul, sDato, sDATOS1, lINDICES1)

   . . .
  
   Case 111
     Erro = PrUPDATE(lResul, sDato, sDATOS111, lINDICES111)

   Case Else
 
    M_UPDATE = 0
    Exit Function
   
 End Select


 ' Control de errores
 
 If Erro = 1 Then
 
    M_UPDATE = 0
    Exit Function
 
 End If
 
 
 ' Retorna índice de supresión
 
 M_UPDATE = lResul


End Function

                                                                                                                            ________

4 El código núcleo de la rutina PrUPDATE

'/*-----------------------------------------------------------------
'/* FUNCION....: PrUPDATE                                          
'/*                                                                
'/* DESCRIPCION: Común de actualización de un ítem de un fichero virtual
'/*                                                                
'/* PARAMETROS.:                                                   
'/* (entrada) lNIDp: Identificador del Conjunto de ítems asociado  
'/*           sDato: Dato a grabar                                 
'/*            sDat: Serie datos
'/*            sInd: Serie índices
'/*                                                                
'/* RETORNO....:                                                   
'/*                0/1: Error de Proceso (No encontrado,...)       
'/*                                                                
'/*-----------------------------------------------------------------
Private Function PrUPDATE(lIndPos As Long, sDato As String, sDat() As String, lInd() As Long) As Integer

 On Error GoTo EtError


 ' Pasa índice de actualización

 Dim lIndice As Long

 lIndice = lInd(lIndPos)
 
 
 ' Actualiza datos del ítem encontrado
 
 sDat(lIndice) = sDato
 
 
 ' Fin de proceso satisfactorio
 
 PrUPDATE = NO_ERRO
 
 Exit Function
 
 

' Fin de proceso erróneo
 
EtError:
 
 PrUPDATE = 1
 
End Function

                                                                                                                            ________



5 Fuentes

 

En el enlace siguiente se puede acceder al código fuente completo del módulo núcleo de los ficheros virtuales en VBA. Además, también puede utilizarse el enlace de acceso al libro W, que recoge los ejemplos asociados a los primeros capítulos del blog.

La hoja M del libro W corresponde al capítulo en curso.



                                                                                                                            ________