SET RELATION

1,156 views
Skip to first unread message

Luis Martinez

unread,
Mar 15, 2012, 3:28:08 PM3/15/12
to Comunidad de Visual Foxpro en Español
Hola, alguien me puede decir como funciona el comando set relation..
Gracias.

carlos SALCEDO

unread,
Mar 15, 2012, 3:31:01 PM3/15/12
to visual fox

Buenas tardes


SET RELATION (Comando)

Establece una relación entre dos tablas abiertas.
SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1
[, eExpression2 INTO nWorkArea2 | cTableAlias2 ...] [IN nWorkArea | cTableAlias] [ADDITIVE]]

Parámetros

eExpression1
Especifica la expresión relacional que establece una relación entre las tablas primaria y secundaria. La expresión relacional suele ser la expresión de índice del índice de control de la tabla secundaria. El índice de la tabla secundaria puede ser un índice (.IDX) de una sola entrada, un índice (.CDX) compuesto estructural de varias entradas o un índice compuesto independiente. Si se trata de un índice compuesto, especifique la etiqueta de índice adecuada para ordenar la tabla secundaria. SET ORDER se puede utilizar para especificar la etiqueta de índice que ordena la tabla secundaria.
Por ejemplo, tomemos las tablas customer y orders descritas en la sección Comentarios siguiente. Suponga que la tabla secundaria orders se ha indizado y ordenado por el número del cliente con este comando:
SET ORDER TO TAG cust_id
Para relacionar las tablas customer y orders según el número del cliente, seleccione el área de trabajo que contiene la tabla primaria customer, o incluya la cláusula IN para especificar el área de trabajo o el alias de la tabla primaria, y luego ejecute SET RELATION, especificando la expresión de índice con la siguiente expresión relacional:
SET RELATION TO cust_id INTO orders
Es necesario que la tabla secundaria esté indizada, a menos que la expresión relacional sea numérica. Visual FoxPro muestra un mensaje de error si ejecuta SET RELATION con una expresión relacional no numérica y la tabla secundaria no está ordenada con un índice.
Si eExpression1 es numérica, se evalúa cuando el puntero de registro se mueve en la tabla primaria. El puntero de registro de la tabla secundaria se mueve en este momento al número de registro eExpression1.
INTO nWorkArea1 | cTableAlias1
Especifica el número del área de trabajo (nWorkArea1) o el alias de tabla (cTableAlias1) de la tabla secundaria.
eExpression2 INTO nWorkArea2 | cTableAlias2 ...
Especifica una expresión relacional (eExpression2) y una o varias tablas secundarias para establecer una relación adicional entre la tabla primaria y las tablas secundarias. A partir de un único comando SET RELATION, puede crear varias relaciones entre una sola tabla primaria y varias tablas secundarias. Incluya una coma delante de cada relación. nWorkArea2 especifica un número de área de trabajo y cTableAlias2 especifica un alias de tabla para la tabla secundaria.
IN nWorkArea
Especifica el área de trabajo de la tabla primaria.
IN cTableAlias
Especifica el alias de la tabla primaria. La cláusula IN le permite crear una relación sin seleccionar primero el área de trabajo de la tabla primaria. Si omite nWorkArea y cTableAlias, la tabla primaria tiene que estar abierta en el área de trabajo seleccionada actualmente.
ADDITIVE
Mantiene las relaciones existentes en el área de trabajo actual y crea la relación especificada. Si omite ADDITIVE, se romperán todas las relaciones del área de trabajo actual y se creará la relación especificada.

Observaciones

Antes de que pueda establecer una relación, una tabla (la tabla primaria) debe estar abierta y la otra (la tabla secundaria) debe estar abierta en otra área de trabajo.
Las tablas relacionadas tienen normalmente un campo en común. Por ejemplo, suponga que una tabla customer contiene información de clientes. Tiene campos para el nombre, la dirección y un número de cliente único. Una segunda tabla orders contiene información sobre pedidos. También tiene un campo con el número de cliente, junto con los campos de fecha e información de envío.
SET RELATION relaciona estas dos tablas basándose en su campo común: el campo de número del cliente. Para establecer la relación, la tabla secundaria debe estar indizada por el campo común. Después de establecer la relación, cada vez que mueva el puntero de registro a un registro con un número de registro determinado de la tabla primaria customer, el puntero de registro de la tabla secundaria orders se moverá al registro que tiene el mismo número de cliente. Si no se encuentra un registro que coincida en la tabla secundaria, el puntero de registro de la tabla secundaria se colocará al final de la tabla.
Ejecute SET RELATION TO sin ningún argumento para quitar todas las relaciones del área de trabajo seleccionada actualmente. SET RELATION OFF se puede utilizar para quitar una relación primaria-secundaria específica.

Vea también

INDEX | RELATION( ) | SET ORDER | SET RELATION OFF | SET SKIP | TARGET( )


Envíe observaciones sobre este tema a Microsoft
Para soporte técnico y problemas con el producto, mire el tema "Microsoft Visual FoxPro Soporte Técnico"..
© 1992 - 2003 Microsoft Corporation. Todos los derechos reservados.
Traducido al Español por el grupo de traductores de PortalFox.
Envíe un informe sobre errores en la traducción de este tema



> Date: Thu, 15 Mar 2012 12:28:08 -0700
> Subject: [vfp] SET RELATION
> From: luismart...@gmail.com
> To: publice...@googlegroups.com

Luis Martinez

unread,
Mar 15, 2012, 3:33:39 PM3/15/12
to Comunidad de Visual Foxpro en Español
podrian poner algun ejemplo de como se utiliza y una pequeña
explicacion de ese ejemplo.

carlos SALCEDO

unread,
Mar 15, 2012, 3:35:15 PM3/15/12
to visual fox
En la ayuda de VFP debe haber, agota esa instancia

> Date: Thu, 15 Mar 2012 12:33:39 -0700
> Subject: [vfp] Re: SET RELATION
> From: luismart...@gmail.com
> To: publice...@googlegroups.com
>

Luis Martinez

unread,
Mar 15, 2012, 3:38:17 PM3/15/12
to Comunidad de Visual Foxpro en Español

set relation to str(t_ced01) into t_datper, str(t_ced02) into
t_datper_a, str(t_tipcre) into t_tipcre, str(t_juz) into t_juz,
str(t_sit)+str(t_subsit) into t_sitjud, str(t_sit)+str(t_subsit) into
t_gesjud

necesito entender este codigo, y en la ayuda de vfp no explica con
ejemplos claros

Rudolf Johann Heiner

unread,
Mar 15, 2012, 3:49:15 PM3/15/12
to publice...@googlegroups.com
saludos y bendiciones luis,
mira el set relation hace una relacion con otra tabla por un campo,
por ejemplo en tu código:

set relation to str(t_ced01) into t_datper

se relaciona str(t_ced01) el campo t_ced01 a la tabla t_datper,
por supuesto las dos tablas tienen que estar indexadas por el campo llave en
este caso t_ced01 y en la tabla t_datper debe haber un campo con semejante,

set relation to str(t_ced01) into t_datper, str(t_ced02) into t_datper_a

se relaciona str(t_ced02) el campo t_ced02 a la tabla t_datper_a
esta relacion es multimple, se estan ralacionando varios campos adiferentes
tablas.

espero te sirva,
saludos,
rudolf heiner.

Luis Martinez

unread,
Mar 15, 2012, 3:54:41 PM3/15/12
to Comunidad de Visual Foxpro en Español
Gracias por tu respuesta amigo, y como es el tema de la indexacion,
por ejemplo set index to

Rudolf Johann Heiner

unread,
Mar 15, 2012, 3:56:36 PM3/15/12
to publice...@googlegroups.com
si asi es,
utilizas set index on codigo tag codigo por ejemplo.
ó,
set index on id_Cli tag id_cli

eso es todo si tienes problemas no dudes en preguntar,
saludos,
rudolf heiner.

TheNewInquirer

unread,
Mar 15, 2012, 5:17:10 PM3/15/12
to Comunidad de Visual Foxpro en Español
Hola Luis,

Sabes Fox? (Mi pregunta tonta de siempre..)

De que lenguajes vienes?... Talvez necesites comprender algunos temas
previamente..

Deseas aprender Fox de forma seria o solo "librarla"?..

A veces no hay una forma simple de librarla en fox, sino aprender "lo
basico" pero bien..

Saludos!

Daniel Sánchez

unread,
Mar 15, 2012, 7:09:13 PM3/15/12
to publice...@googlegroups.com
Tal como dicen, sabes fox, porque así como vas terminaras preguntando todos los comandos de VFP en el foro, primero revisa bien la ayuda, y si no vas a portalfox que te sera de mucha ayuda, en todo caso tengo por acá unos manuales te los adjunto.

Saludos

--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú
cursofox.zip
guiavf1.zip

Luis Martinez

unread,
Mar 16, 2012, 6:31:53 AM3/16/12
to Comunidad de Visual Foxpro en Español

En realidad hace como 4 meses estoy trabajando en fox, pero estoy
todavia en la etapa de aprendizaje.. los comandos que hasta ahora no
manejaba bien son las del set relation y set index..

Carlos Miguel FARIAS

unread,
Mar 16, 2012, 9:54:35 AM3/16/12
to publice...@googlegroups.com
Estimado Luis:
Cuando haces un USE sobre una tabla, automaticamente te ubicas en el
primer registro de la misma.
Con los comandos SCAN...ENDSCAN, podes recorrer registro a registro
esa tabla (no hace falta nada adicional)
Con los comandos GO RECORD n ,podes saltar al registro "enesimo" de la
tabla (es como un acceso directo al número de registro)
con el comando SKIP avanzas un registro o tantos registros para
adelante (numero positivo) como para atras (número negativo).
Una tabla puede tener muchos indices, cada indice tiene un nombre.
Con SET INDEX te permite seleccionar que indice vas a utilizar.
Cuando no tenes indice seleccionado en una tabla, te moves en orden de
registro físico, si activas el indice, el orden de recorrido es el
orden del indice.
Para ir al primer registro haces GO TOP y GO BOTTOM para el último.
El comando SET RELATION lo que hace es que se sincronice el movimiento
a traves de las tablas que se relacionen.
Para que funcione bien, tienes que tener tu tabla secundaria indexada
por el campo de relacion.
Entonces cuando vas recorriendo la tabla principal, automaticamente se
va moviendo a traves de la tabla secundaria.
Si para un registro de la tabla principal, no hay registros en la
tabla secundaria, los campos de dicha tabla tendran valor null.
Sugiero consultar la ayuda para ver como se escriben los comandos,
Mas alla de que uses vfp 9, te recomiendo tener a mano la ayuda de VFP
8, que está en castellano, y para esos comandos, no hubo cambios
significativos entre una y otra.
Saludos: Miguel, Santa Rosa (LP)


El 16/03/12, Luis Martinez <luismart...@gmail.com> escribió:

Reply all
Reply to author
Forward
0 new messages