EDGPER
  5.4 Recuperación de datos en DBTG
 

    El lenguaje de manipulación de datos de la propuesta DBTG consiste en un número de órdenes que se incorporan en un lenguaje principal.

   
La mayor parte de los comandos de manejo de datos en DBTG de CODASYL tienen dos pasos. En primer lugar, se emite un comando FIND para identificar el registro sobre el cual se va a actuar. El comando FIND no lee, procesa el registro indicado;sólo identifica un registro para que lo localice el DBMS. Una vez identificado el registro, un segundo comando DML puede emitirse para que se lleve a cabo una operación sobre él. Patrones típicos son FIND, GET, o bien, FIND, MODIFY; o bien FIND, ERASE.

    Cuando el programa emite un comando FIND, se localiza un registro y su identidad permanece almacenada en una variable especial llamada indicador de posición. Después, cuando se emite un comando GET, MODIFY, ERASE o bien otro, el DBMS hace referencia al indicador de posición para determinar cuál es el registro sobre el que ha de actuar. Los indicadores de posición también se utilizan como puntos de referencia para los comandos del procesamiento secuencial como son FIND NEXT o FIND PRIOR.

Las operaciones utilizadas para la recuperación de datos son :

    Find: Que localiza a un registro en la base de datos y da valores a los punteros de actualidad correspondientes
   
Get: Copia el registro al que apunta el actual de unidad de ejecución de la base de datos ala plantilla adecuada en el área de trabajo de programa.

La orden FIND tiene varias formas, en este caso estudiaremos 2 ordenes find diferentes para localizar los registro individuales de la base de datos; La orden más sencilla es de la forma:

    find any < tipo de registro > using < campo de registro >

  
  Esta orden localiza un registro del tipo <tipo registro> cuyo valor de < campo de registro> es el mismo que el del valor de <campo de registro> en la plantilla del <tipo de registro> en el área de trabajo del programa. Una vez que se encuentra ese registro se modifican los siguientes punteros para que apunten a ese registro:

      El puntero actual de unidad de ejecución
      El puntero de actualidad de tipo de registro que corresponde a <tipo de registro>
      Para cada conjunto en el que participe ese registro, el puntero de actualidad de conjunto apropiado.

    Para ilustrar lo anterior, construyamos una consulta en DBTG que nos muestre el número de control del alumno Luis A. (consideremos el modelo alumno-materia ).
               
         
Alumno.nombre:="Luis A.";
           find any Alumno using NombreA;
           get Alumno:
           print("Alumno.control");


   
Pueden existir varios registros con el valor especificado. La orden find localiza el primero de ellos en un orden previamente especificado. Para localizar otros registros de la base de datos que pudieran tener el mismo campo <campo de registro, utilizamos la orden

            find duplicate <tipo de registro> using <campo de registro>


    Que localiza al siguiente registro (según un orden que depende del sistema) que tiene el valor de <campo registro>.ejemplo:


            
  Alumno.NombreA:="Luis A.";
                find any Alumno using NombreA;
                while DB-Status = 0 do
                   begin
              
     get Alumno;
              
     print (Alumno.control);
                    find duplicate Alumno using NombreA;
                  end;

    Se ha encerrado parte de la consulta en un ciclo while ya que no sabemos por adelantado cuántos nombres Luis A. pueden existir. Salimos del bucle cuando DB-Status<>0, esto indica que la última operación find duplicate falló, lo que implica que ya hemos agotado todos los registros con esos datos.

 
  Hoy habia 3 visitantes (4 clics a subpáginas) ¡Aqui en esta página!  
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis