DBSETRELATION( )

 Relaciona dos áreas de trabajo

Sintaxis

     DBSETRELATION(<nArea>  <cAlias>, <bExpr>, [<cExpr>])    –> NIL

Argumentos

<nArea> es un valor numérico que especifica el número del área de trabajo hija.

<cAlias> es un valor de caracteres que especifica el alias del área de trabajo hija.

 <bExpr> es un bloque de código que contiene la expresión de la relación, en forma ejecutable.

<cExpr> es un valor opcional de caracteres que expresa la expresión relacional en forma de texto. Si se omite <cExpr>, la función DBRELATION() devuelve una cadena vacía para la relación.

Devuelve

DBSETRELATION() devuelve siempre NIL.

Descripción

DBSETRELATION() relaciona el área de trabajo especificada por <nArea> o <cAlias> (el área de trabajo hija), con el área de trabajo actual (el área de trabajo padre). Cualquier relación existente permanece activa.

Las áreas de trabajo relacionadas sincronizan las áreas de trabajo hijas con el área de trabajo padre. Esto se consigue desplazando automáticamente el área de trabajo hija cuando el área de trabajo padre se desplaza a un nuevo registro. Si existe un índice activo en el área de trabajo hija, al desplazar el área de trabajo padre se ejecuta una operación SEEK automática en el área de trabajo hija; la clave de búsqueda se basa en la expresión especificada mediante <bExpr> y/o <cExpr>. Si el área de trabajo hija no tiene un índice activo, al desplazar el área de trabajo padre se ejecuta un GOTO automático en el área de trabajo hija; el número de registro para GOTO se basa en la expresión especificada por <bExpr> y/o <cExpr>.

La expresión de relación puede ser un bloque de código (<bExpr>) o un bloque de código y un texto equivalente (<cExpr>). Si se utilizan ambas versiones, deben ser equivalentes. Si se omite la versión de texto, DBRELATION() devuelve una cadena vacía para la relación.

DBSETRELATION() realiza la misma función que un mandato SET RELATION estándar con la cláusula ADDITIVE. Si desea más información, consulte el mandato SET RELATION.

Notas

     ¦  Efectos laterales: DBSETRELATION() sólo garantiza la sincronización de las áreas de trabajo, según se describe más arriba. Si la expresión relacional se basa en información externa al área de trabajo superior o en su fichero de base de datos asociado, el efecto es impredecible. Si la expresión cambia el estado de cualquier área de trabajo (por ejemplo, desplazando el cursor a un registro diferente o cambiando el contenido de un registro), el efecto es impredecible.

     ¦  Contexto de evaluación: Al evaluar la expresión relacional, el área de trabajo padre se selecciona automáticamente como el área actual antes de proceder a la evaluación, posteriormente, el área de trabajo anterior se restablece automáticamente.

     ¦  Búsqueda aproximada: Las operaciones de búsqueda que se producen como parte del posicionamiento relacional no son nunca búsquedas aproximadas. Si el movimiento relacional no tiene éxito, el área de trabajo secundaria se sitúa en LASTREC() + 1, el estado FOUND() devuelve falso (.F.) y el estado EOF() devuelve verdadero (.T.).

 Ejemplos

     ¦  Este ejemplo muestra una de los usos más frecuentes de la función DBSETRELATION():

        USE Empleado NEW

        USE Departamento NEW INDEX Dept

        SELECT Empleado

        DBSETRELATION(“Departamento”, { Empleado->Dept},;

                        “Empleado->Dept”)

        LIST Empleado->Nombre, Departamento->Nombre

 Ficheros:  La biblioteca asociada es DPXBASE.CH.