Usando dos LISTBOX con Relation

210 views
Skip to first unread message

Novato

unread,
Jul 18, 2012, 12:58:38 AM7/18/12
to publice...@googlegroups.com
Hola, tengo dos archivos:
Maestro, Detalles

Select 1
Abro Archivos ALIAS MAESTRA
set order to 1

Select 2
Abro Archivo2 ALIAS DETALLES
set order to 1

Set Relation alltrim(codigo) into Detalles

Si miro los archivos con un brow, logro ver como la relación funciona bien y va actualizando el archivo detalles,
en los List, he colocado en List1,  RowSource = Maestra  y RowSource Type = Alias y funciona bien, en el
List2 he colocado RowSource = Detalles  y RowSource Type = Alias, no hay error, todo bien, cuando ejecuto
la forma, el LIST2 no me despliega los datos del RELATION, ya le di por todos lados REFRESH, y no me
funciona, vi por separado (con brow) el comportamiento del archivo Detalles y si funciona.

¿Que hago?

Gracias por anticipado !!



Fox Learner

unread,
Jul 18, 2012, 1:21:06 AM7/18/12
to publice...@googlegroups.com
Novato (Igual que yo jeje)
Me dicen aquí en el foro que el set relación se incluye por compatibilidad con las anteriores versiones de Visual Foxpro.

Es decir, funciona bien, pero no es una técnica innovadora.

En su lugar puedes usar la clausula join del comando select.

Revisa por favor el ejemplo de este enlace:


https://groups.google.com/forum/?hl=es&fromgroups#!searchin/publicesvfoxpro/inner$20join/publicesvfoxpro/QyvokDQr3_4/oIYI-3n79noJ 

También el usar numeros de áreas es una técnica que está ahi por compatibilidad con versiones anteriores.

En vez de:
Select 1
Abro Archivos ALIAS MAESTRA
set order to 1

Puedes hacer esto:

Evento Load
Close databases (Para que no te marque que el archivo ya está en uso)

O usa

IF ! USED("Tutabla") (Si no está en uso, la pones en uso..)

En el evento donde abras tus tablas:
USE maestra IN 0 (El nombre alias es el mismo de tu tabla)
select maestra
set order to mi campoetiqueta

Para eso, debes crear una etiqueta de indice a tu tabla asi:

Use maestra exclusive
INDEX ON micampoetiqueta TAG micampoetiqueta

Eso lo haces solo una vez en la vida. Luego solo eliges el campo que sirve como etiqueta para hacer tus busquedas o presentar los datos.

Por cierto, para hacer busquedas usarás el comando Seek, con IF Found().

Solo recuerda que el dato que busques en el indice debe ser del mismo tipo de dato que el del campo de la base de datos.

Es decir, no podrás buscar un dato numerico en un campo tipo caracter o viceversa.

Saludos!




Walter R. Ojeda Valiente

unread,
Jul 18, 2012, 1:46:46 AM7/18/12
to publice...@googlegroups.com
Tu relación está mal, debes relacionar los detalles con el maestro. Lo correcto sería.

SELECT DETALLES
SET RELATION TO AllTrim(CODIGO) into MAESTRA

Para verificarlo, escribe:

BROWSE MAESTRA.MiCampo1, MAESTRA.MiCampo2, MiCampoDetalles1, MiCampoDetalles2

Donde MiCampo1, MiCampo2, etc., son campos de tus tablas.

Saludos.

Walter.






Date: Tue, 17 Jul 2012 21:58:38 -0700
From: iv...@varas2.com
To: publice...@googlegroups.com
Subject: [vfp] Usando dos LISTBOX con Relation
--
 
 
 

Novato

unread,
Jul 18, 2012, 2:05:52 AM7/18/12
to publice...@googlegroups.com
No me funcionó Walter, bueno sí lo hizo de forma inversa, yo necesito que cuando el cursor se mueva en la MAESTRA,  "filtre" en los DETALLES.
Cuando entro a detalles me filtra en maestra y es al revés.
Ya lo cambié y se supone que funciona, pero en los List NO, deje un botón para ver el archivo detalles, el cursor se posiciona correctamente, pero no "filtra" solo los registros deseados, aparecen todos !!

¿Qué hago?



El miércoles, 18 de julio de 2012 07:46:46 UTC+2, Walter R. Ojeda Valiente escribió:
Tu relación está mal, debes relacionar los detalles con el maestro. Lo correcto sería.

SELECT DETALLES
SET RELATION TO AllTrim(CODIGO) into MAESTRA

Para verificarlo, escribe:

BROWSE MAESTRA.MiCampo1, MAESTRA.MiCampo2, MiCampoDetalles1, MiCampoDetalles2

Donde MiCampo1, MiCampo2, etc., son campos de tus tablas.

Saludos.

Walter.






Date: Tue, 17 Jul 2012 21:58:38 -0700
From: iv...@varas2.com

Novato

unread,
Jul 18, 2012, 2:07:42 AM7/18/12
to publice...@googlegroups.com
Gracias Fox,  pero si a penas entiendo el Relation to .... eso de Join ... se me hizo complicado ... Sorry !!!

Si no hay algo más fácil y práctico, creo que tendré que entender el Join ..... jejeje, pero de momento tengo la esperanza que exista otra solución que pueda comprender ...

Saludos.

Riago

unread,
Jul 18, 2012, 3:57:54 AM7/18/12
to publice...@googlegroups.com
Crea un cursor de detalles
Genera un filtro de detalles en un cursor relacionado con cada registro maestra, y ese resultado lo despliegas en tu LIST
Así siempre tendrás los registros que cumplan tu condición de igualdad al maestra.codigo y selecciona solo los campos que desees desplegar en el LIST.
Espero te sirva
Un abrazo.

      Saludos 
Ricardo González


Novato

unread,
Jul 18, 2012, 4:11:20 AM7/18/12
to publice...@googlegroups.com
Gracias Riago .... cambié la forma en que lo estaba haciendo, filtre datos y funcionó.

Saludos.

Walter R. Ojeda Valiente

unread,
Jul 18, 2012, 4:14:04 AM7/18/12
to publice...@googlegroups.com
Es que tienes un error de concepto, el SET RELATION no funciona de la manera que quieres.

Para conseguir que cuando te muevas en la tabla MAESTRA te muestre los registros de la tabla DETALLES lo que necesitas es utilizar un SELECT o un SET FILTER.

En el evento InterActiveChange() del control LIST que muestra a tu tabla MAESTRA escribes el SELECT o el SET FILTER correspondiente.

Saludos.

Walter.




Date: Tue, 17 Jul 2012 23:05:52 -0700
From: iv...@varas2.com
To: publice...@googlegroups.com
Subject: Re: [vfp] Usando dos LISTBOX con Relation
--
 
 
 

Claudio Rivadera

unread,
Jul 18, 2012, 7:57:30 AM7/18/12
to publice...@googlegroups.com
Hola!
Y si usas dos GRID en vez de los LISTBOX ??

Fox Learner

unread,
Jul 18, 2012, 9:55:31 AM7/18/12
to publice...@googlegroups.com
Reply all
Reply to author
Forward
Message has been deleted
Message has been deleted
0 new messages