In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

SetRelation con dos DbBrowser

Foro público de Xailer en español
Responder
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

SetRelation con dos DbBrowser

Mensaje por jrcpoli »

Saludos
En la pantalla que ajunto se aprecian dos Browser que tienen
relacionados dos campos que se llaman N_Zona, lo que necesito y no he
conseguido por falta de experiencia es que cuando en el primer Bbrowse se
seleccione un registro en la otra solo se muestren los registros cuya Zona
sea la seleccionada en el primero no que se vean todos.
Este es el codigo que tengo implementado de momento.
CLASS TFormZonas FROM TForm
COMPONENT oDataSourceZonas
COMPONENT oDataSetZonas
COMPONENT oDataSourceClub
COMPONENT oDataSetClub
COMPONENT oDBClub
COMPONENT oDBZonas
COMPONENT oLabel1
COMPONENT oLabel2
COMPONENT oN_Zona
COMPONENT oNombre
METHOD CreateForm()
METHOD FormInitialize( oSender )
METHOD DBZonasChange( oSender, lBookMarkChanged )
ENDCLASS
#include "FormZonas.xfm"
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TFormZonas
*
** Inicializa la base de datos de Zonas
WITH OBJECT ::oDataSetZonas
:cName := 'BasesZONAS.dbf'
:lOpen := .T.
END
** Inicializa la base de datos de Club
WITH OBJECT ::oDataSetClub
** Inicializa la base de datos de Club
:cName := 'BasesCLUB.dbf'
:lOpen := .T.
END
** Relación de las DataSet de Zonas con Club
IF ::oDataSetZonas:lOpen
WITH OBJECT ::oDataSetZonas
:OrdSetFocus( "ZONAS" )
END
ENDIF
** Relacion de las DataSet de Club
IF ::oDataSetClub:lOpen
WITH OBJECT ::oDataSetClub
:OrdSetFocus( "CLUB3" )
END
ENDIF
** Unir el Browser a la DataSet
WITH OBJECT ::oDBZonas
:oDataSet := ::oDataSetZonas
//:Refresh()
END
** Unir el Browser a la DataSet
WITH OBJECT ::oDBClub
:oDataSet := ::oDataSetClub
//:Refresh()
END
** Unir el Campo a la DataSet
WITH OBJECT ::oN_Zona
:oDataSet := ::oDataSetZonas
END
** Unir el Campo a la DataSet
WITH OBJECT ::oNombre
:oDataSet := ::oDataSetZonas
END
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
WITH OBJECT ::oDBClub
:oDataSet := ::oDataSetClub
END
RETURN Nil


Attached files Zonas.zip (5.3 KB)Â
José Ramón Castro.
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

SetRelation con dos DbBrowser

Mensaje por jrcpoli »

Por favor Ignacio seguro que puede haber algo que me falta para que la
relación se realice, me puedes contestar.
Ramón.
"José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
news:[email=430c698f@ozsrvnegro.ozlan.local...]430c698f@ozsrvnegro.ozlan.local...[/email]
> Saludos
>
> En la pantalla que ajunto se aprecian dos Browser que tienen
> relacionados dos campos que se llaman N_Zona, lo que necesito y no he
> conseguido por falta de experiencia es que cuando en el primer Bbrowse se
> seleccione un registro en la otra solo se muestren los registros cuya Zona
> sea la seleccionada en el primero no que se vean todos.
>
> Este es el codigo que tengo implementado de momento.
>
> CLASS TFormZonas FROM TForm
> COMPONENT oDataSourceZonas
> COMPONENT oDataSetZonas
> COMPONENT oDataSourceClub
> COMPONENT oDataSetClub
> COMPONENT oDBClub
> COMPONENT oDBZonas
> COMPONENT oLabel1
> COMPONENT oLabel2
> COMPONENT oN_Zona
> COMPONENT oNombre
>
> METHOD CreateForm()
> METHOD FormInitialize( oSender )
> METHOD DBZonasChange( oSender, lBookMarkChanged )
> ENDCLASS
> #include "FormZonas.xfm"
> //---------------------------------------------------------- --------------------
> METHOD FormInitialize( oSender ) CLASS TFormZonas
> *
> ** Inicializa la base de datos de Zonas
> WITH OBJECT ::oDataSetZonas
> :cName := 'BasesZONAS.dbf'
> :lOpen := .T.
> END
> ** Inicializa la base de datos de Club
> WITH OBJECT ::oDataSetClub
> ** Inicializa la base de datos de Club
> :cName := 'BasesCLUB.dbf'
> :lOpen := .T.
> END
> ** Relación de las DataSet de Zonas con Club
> IF ::oDataSetZonas:lOpen
> WITH OBJECT ::oDataSetZonas
> :OrdSetFocus( "ZONAS" )
> END
> ENDIF
> ** Relacion de las DataSet de Club
> IF ::oDataSetClub:lOpen
> WITH OBJECT ::oDataSetClub
> :OrdSetFocus( "CLUB3" )
> END
> ENDIF
> ** Unir el Browser a la DataSet
> WITH OBJECT ::oDBZonas
> :oDataSet := ::oDataSetZonas
> //:Refresh()
> END
> ** Unir el Browser a la DataSet
> WITH OBJECT ::oDBClub
> :oDataSet := ::oDataSetClub
> //:Refresh()
> END
> ** Unir el Campo a la DataSet
> WITH OBJECT ::oN_Zona
> :oDataSet := ::oDataSetZonas
> END
> ** Unir el Campo a la DataSet
> WITH OBJECT ::oNombre
> :oDataSet := ::oDataSetZonas
> END
> RETURN Nil
> //---------------------------------------------------------- --------------------
> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
> WITH OBJECT ::oDBClub
> :oDataSet := ::oDataSetClub
> END
> RETURN Nil
>
>
>
>
José Ramón Castro.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9447
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

SetRelation con dos DbBrowser

Mensaje por ignacio »

José,
La forma más sencilla sería:
- No establezcas relaciones, no hace falta
- Establece el TAG correctamente en la relacionada
- En el evento ONCHANGE del primer Browse, simplemente establece un
oDataSet:SetScope( xx ) en el segundo browse. En principio ni siquiera es
necesario refrescar el segundo browse.
Un saludo,
"José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
news:[email=430e4257@ozsrvnegro.ozlan.local...]430e4257@ozsrvnegro.ozlan.local...[/email]
> Por favor Ignacio seguro que puede haber algo que me falta para que la
> relación se realice, me puedes contestar.
>
> Ramón.
>
> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> news:[email=430c698f@ozsrvnegro.ozlan.local...]430c698f@ozsrvnegro.ozlan.local...[/email]
>> Saludos
>>
>> En la pantalla que ajunto se aprecian dos Browser que tienen
>> relacionados dos campos que se llaman N_Zona, lo que necesito y no he
>> conseguido por falta de experiencia es que cuando en el primer Bbrowse se
>> seleccione un registro en la otra solo se muestren los registros cuya
>> Zona
>> sea la seleccionada en el primero no que se vean todos.
>>
>> Este es el codigo que tengo implementado de momento.
>>
>> CLASS TFormZonas FROM TForm
>> COMPONENT oDataSourceZonas
>> COMPONENT oDataSetZonas
>> COMPONENT oDataSourceClub
>> COMPONENT oDataSetClub
>> COMPONENT oDBClub
>> COMPONENT oDBZonas
>> COMPONENT oLabel1
>> COMPONENT oLabel2
>> COMPONENT oN_Zona
>> COMPONENT oNombre
>>
>> METHOD CreateForm()
>> METHOD FormInitialize( oSender )
>> METHOD DBZonasChange( oSender, lBookMarkChanged )
>> ENDCLASS
>> #include "FormZonas.xfm"
>> //---------------------------------------------------------- --------------------
>> METHOD FormInitialize( oSender ) CLASS TFormZonas
>> *
>> ** Inicializa la base de datos de Zonas
>> WITH OBJECT ::oDataSetZonas
>> :cName := 'BasesZONAS.dbf'
>> :lOpen := .T.
>> END
>> ** Inicializa la base de datos de Club
>> WITH OBJECT ::oDataSetClub
>> ** Inicializa la base de datos de Club
>> :cName := 'BasesCLUB.dbf'
>> :lOpen := .T.
>> END
>> ** Relación de las DataSet de Zonas con Club
>> IF ::oDataSetZonas:lOpen
>> WITH OBJECT ::oDataSetZonas
>> :OrdSetFocus( "ZONAS" )
>> END
>> ENDIF
>> ** Relacion de las DataSet de Club
>> IF ::oDataSetClub:lOpen
>> WITH OBJECT ::oDataSetClub
>> :OrdSetFocus( "CLUB3" )
>> END
>> ENDIF
>> ** Unir el Browser a la DataSet
>> WITH OBJECT ::oDBZonas
>> :oDataSet := ::oDataSetZonas
>> //:Refresh()
>> END
>> ** Unir el Browser a la DataSet
>> WITH OBJECT ::oDBClub
>> :oDataSet := ::oDataSetClub
>> //:Refresh()
>> END
>> ** Unir el Campo a la DataSet
>> WITH OBJECT ::oN_Zona
>> :oDataSet := ::oDataSetZonas
>> END
>> ** Unir el Campo a la DataSet
>> WITH OBJECT ::oNombre
>> :oDataSet := ::oDataSetZonas
>> END
>> RETURN Nil
>> //---------------------------------------------------------- --------------------
>> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
>> WITH OBJECT ::oDBClub
>> :oDataSet := ::oDataSetClub
>> END
>> RETURN Nil
>>
>>
>>
>>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

SetRelation con dos DbBrowser

Mensaje por jrcpoli »

Ignacio:
He realizado lo que me has dicho y funciona perfecto, gracias.
Ramón.
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje
news:[email=430ecffa@ozsrvnegro.ozlan.local...]430ecffa@ozsrvnegro.ozlan.local...[/email]
> José,
>
> La forma más sencilla sería:
>
> - No establezcas relaciones, no hace falta
> - Establece el TAG correctamente en la relacionada
> - En el evento ONCHANGE del primer Browse, simplemente establece un
> oDataSet:SetScope( xx ) en el segundo browse. En principio ni siquiera es
> necesario refrescar el segundo browse.
>
> Un saludo,
>
> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> news:[email=430e4257@ozsrvnegro.ozlan.local...]430e4257@ozsrvnegro.ozlan.local...[/email]
>> Por favor Ignacio seguro que puede haber algo que me falta para que la
>> relación se realice, me puedes contestar.
>>
>> Ramón.
>>
>> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
>> news:[email=430c698f@ozsrvnegro.ozlan.local...]430c698f@ozsrvnegro.ozlan.local...[/email]
>>> Saludos
>>>
>>> En la pantalla que ajunto se aprecian dos Browser que tienen
>>> relacionados dos campos que se llaman N_Zona, lo que necesito y no he
>>> conseguido por falta de experiencia es que cuando en el primer Bbrowse
>>> se
>>> seleccione un registro en la otra solo se muestren los registros cuya
>>> Zona
>>> sea la seleccionada en el primero no que se vean todos.
>>>
>>> Este es el codigo que tengo implementado de momento.
>>>
>>> CLASS TFormZonas FROM TForm
>>> COMPONENT oDataSourceZonas
>>> COMPONENT oDataSetZonas
>>> COMPONENT oDataSourceClub
>>> COMPONENT oDataSetClub
>>> COMPONENT oDBClub
>>> COMPONENT oDBZonas
>>> COMPONENT oLabel1
>>> COMPONENT oLabel2
>>> COMPONENT oN_Zona
>>> COMPONENT oNombre
>>>
>>> METHOD CreateForm()
>>> METHOD FormInitialize( oSender )
>>> METHOD DBZonasChange( oSender, lBookMarkChanged )
>>> ENDCLASS
>>> #include "FormZonas.xfm"
>>> //---------------------------------------------------------- --------------------
>>> METHOD FormInitialize( oSender ) CLASS TFormZonas
>>> *
>>> ** Inicializa la base de datos de Zonas
>>> WITH OBJECT ::oDataSetZonas
>>> :cName := 'BasesZONAS.dbf'
>>> :lOpen := .T.
>>> END
>>> ** Inicializa la base de datos de Club
>>> WITH OBJECT ::oDataSetClub
>>> ** Inicializa la base de datos de Club
>>> :cName := 'BasesCLUB.dbf'
>>> :lOpen := .T.
>>> END
>>> ** Relación de las DataSet de Zonas con Club
>>> IF ::oDataSetZonas:lOpen
>>> WITH OBJECT ::oDataSetZonas
>>> :OrdSetFocus( "ZONAS" )
>>> END
>>> ENDIF
>>> ** Relacion de las DataSet de Club
>>> IF ::oDataSetClub:lOpen
>>> WITH OBJECT ::oDataSetClub
>>> :OrdSetFocus( "CLUB3" )
>>> END
>>> ENDIF
>>> ** Unir el Browser a la DataSet
>>> WITH OBJECT ::oDBZonas
>>> :oDataSet := ::oDataSetZonas
>>> //:Refresh()
>>> END
>>> ** Unir el Browser a la DataSet
>>> WITH OBJECT ::oDBClub
>>> :oDataSet := ::oDataSetClub
>>> //:Refresh()
>>> END
>>> ** Unir el Campo a la DataSet
>>> WITH OBJECT ::oN_Zona
>>> :oDataSet := ::oDataSetZonas
>>> END
>>> ** Unir el Campo a la DataSet
>>> WITH OBJECT ::oNombre
>>> :oDataSet := ::oDataSetZonas
>>> END
>>> RETURN Nil
>>> //---------------------------------------------------------- --------------------
>>> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
>>> WITH OBJECT ::oDBClub
>>> :oDataSet := ::oDataSetClub
>>> END
>>> RETURN Nil
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
José Ramón Castro.
PILO
Mensajes: 583
Registrado: Vie Jul 06, 2007 5:18 pm

SetRelation con dos DbBrowser

Mensaje por PILO »

Ignacion puede escribir la programación necesito lo mismo y no tengo ni
idea de ellos
gracias de antemano
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje
news:[email=430ecffa@ozsrvnegro.ozlan.local...]430ecffa@ozsrvnegro.ozlan.local...[/email]
> José,
>
> La forma más sencilla sería:
>
> - No establezcas relaciones, no hace falta
> - Establece el TAG correctamente en la relacionada
> - En el evento ONCHANGE del primer Browse, simplemente establece un
> oDataSet:SetScope( xx ) en el segundo browse. En principio ni siquiera es
> necesario refrescar el segundo browse.
>
> Un saludo,
>
> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> news:[email=430e4257@ozsrvnegro.ozlan.local...]430e4257@ozsrvnegro.ozlan.local...[/email]
> > Por favor Ignacio seguro que puede haber algo que me falta para que la
> > relación se realice, me puedes contestar.
> >
> > Ramón.
> >
> > "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> > news:[email=430c698f@ozsrvnegro.ozlan.local...]430c698f@ozsrvnegro.ozlan.local...[/email]
> >> Saludos
> >>
> >> En la pantalla que ajunto se aprecian dos Browser que tienen
> >> relacionados dos campos que se llaman N_Zona, lo que necesito y no he
> >> conseguido por falta de experiencia es que cuando en el primer Bbrowse
se
> >> seleccione un registro en la otra solo se muestren los registros cuya
> >> Zona
> >> sea la seleccionada en el primero no que se vean todos.
> >>
> >> Este es el codigo que tengo implementado de momento.
> >>
> >> CLASS TFormZonas FROM TForm
> >> COMPONENT oDataSourceZonas
> >> COMPONENT oDataSetZonas
> >> COMPONENT oDataSourceClub
> >> COMPONENT oDataSetClub
> >> COMPONENT oDBClub
> >> COMPONENT oDBZonas
> >> COMPONENT oLabel1
> >> COMPONENT oLabel2
> >> COMPONENT oN_Zona
> >> COMPONENT oNombre
> >>
> >> METHOD CreateForm()
> >> METHOD FormInitialize( oSender )
> >> METHOD DBZonasChange( oSender, lBookMarkChanged )
> >> ENDCLASS
> >> #include "FormZonas.xfm"
> >>
//---------------------------------------------------------- ----------------
----
> >> METHOD FormInitialize( oSender ) CLASS TFormZonas
> >> *
> >> ** Inicializa la base de datos de Zonas
> >> WITH OBJECT ::oDataSetZonas
> >> :cName := 'BasesZONAS.dbf'
> >> :lOpen := .T.
> >> END
> >> ** Inicializa la base de datos de Club
> >> WITH OBJECT ::oDataSetClub
> >> ** Inicializa la base de datos de Club
> >> :cName := 'BasesCLUB.dbf'
> >> :lOpen := .T.
> >> END
> >> ** Relación de las DataSet de Zonas con Club
> >> IF ::oDataSetZonas:lOpen
> >> WITH OBJECT ::oDataSetZonas
> >> :OrdSetFocus( "ZONAS" )
> >> END
> >> ENDIF
> >> ** Relacion de las DataSet de Club
> >> IF ::oDataSetClub:lOpen
> >> WITH OBJECT ::oDataSetClub
> >> :OrdSetFocus( "CLUB3" )
> >> END
> >> ENDIF
> >> ** Unir el Browser a la DataSet
> >> WITH OBJECT ::oDBZonas
> >> :oDataSet := ::oDataSetZonas
> >> //:Refresh()
> >> END
> >> ** Unir el Browser a la DataSet
> >> WITH OBJECT ::oDBClub
> >> :oDataSet := ::oDataSetClub
> >> //:Refresh()
> >> END
> >> ** Unir el Campo a la DataSet
> >> WITH OBJECT ::oN_Zona
> >> :oDataSet := ::oDataSetZonas
> >> END
> >> ** Unir el Campo a la DataSet
> >> WITH OBJECT ::oNombre
> >> :oDataSet := ::oDataSetZonas
> >> END
> >> RETURN Nil
> >>
//---------------------------------------------------------- ----------------
----
> >> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
> >> WITH OBJECT ::oDBClub
> >> :oDataSet := ::oDataSetClub
> >> END
> >> RETURN Nil
> >>
> >>
> >>
> >>
> >
> >
> >
>
>
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

SetRelation con dos DbBrowser

Mensaje por jrcpoli »

No soy Ignacio, soy el hizo la pregunta:
El codigo anterior no lo voy a voner porque ya está en los anteriores
solo voy a poner la parte en la que se vea el código que implica la unión de
los dos browser.
En el Initialize:
** Relacion de las DataSet de Club
IF ::oDataSetClub:lOpen
WITH OBJECT ::oDataSetClub
:OrdSetFocus( "CLUB3" ) // Indice de Zonas en fichero Club
:SetScope( ::oDataSetZonas:N_Zona, ::oDataSetZonas:N_Zona, .T. )
END
ENDIF
En el OnChange del Browse sobre el que se quiere que el otro realice la
relación cuando pulsemos en este.
Para que se entienda OnChange sobre Zonas para que solo me salgan en
Club los que estan en esa zona.
METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
** SetScope de Club dependiendo del registro seleccionado
** en el Browse de Zonas por el campo N_Zona que es el por
** el que está indexado el fichero de Club, en el Inizialice, Club3
::oDataSetClub:SetScope( ::oDataSetZonas:N_Zona, ::oDataSetZonas:N_Zona,
..T. )
RETURN Nil
Otros ejemplos:
LOCAL cBusqueda
cBusqueda := Alltrim(oTEdit:Value)
::oDataSet:SetScope( cBusqueda, cBusqueda, .T. )
Lo más importante es que el indice de la base de datos sobre el que se
va a trabajar el Scope sea el mismo que el valor de busqueda.
Si estoy equivocado siempre Ignacio me corregirá.
José Ramón Castro Polinio.
"PILO" <srmpilo@hotmail.com> escribió en el mensaje
news:[email=4314d023@ozsrvnegro.ozlan.local...]4314d023@ozsrvnegro.ozlan.local...[/email]
> Ignacion puede escribir la programación necesito lo mismo y no tengo ni
> idea de ellos
> gracias de antemano
> "Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje
> news:[email=430ecffa@ozsrvnegro.ozlan.local...]430ecffa@ozsrvnegro.ozlan.local...[/email]
>> José,
>>
>> La forma más sencilla sería:
>>
>> - No establezcas relaciones, no hace falta
>> - Establece el TAG correctamente en la relacionada
>> - En el evento ONCHANGE del primer Browse, simplemente establece un
>> oDataSet:SetScope( xx ) en el segundo browse. En principio ni siquiera es
>> necesario refrescar el segundo browse.
>>
>> Un saludo,
>>
>> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
>> news:[email=430e4257@ozsrvnegro.ozlan.local...]430e4257@ozsrvnegro.ozlan.local...[/email]
>> > Por favor Ignacio seguro que puede haber algo que me falta para que la
>> > relación se realice, me puedes contestar.
>> >
>> > Ramón.
>> >
>> > "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
>> > news:[email=430c698f@ozsrvnegro.ozlan.local...]430c698f@ozsrvnegro.ozlan.local...[/email]
>> >> Saludos
>> >>
>> >> En la pantalla que ajunto se aprecian dos Browser que tienen
>> >> relacionados dos campos que se llaman N_Zona, lo que necesito y no he
>> >> conseguido por falta de experiencia es que cuando en el primer Bbrowse
> se
>> >> seleccione un registro en la otra solo se muestren los registros cuya
>> >> Zona
>> >> sea la seleccionada en el primero no que se vean todos.
>> >>
>> >> Este es el codigo que tengo implementado de momento.
>> >>
>> >> CLASS TFormZonas FROM TForm
>> >> COMPONENT oDataSourceZonas
>> >> COMPONENT oDataSetZonas
>> >> COMPONENT oDataSourceClub
>> >> COMPONENT oDataSetClub
>> >> COMPONENT oDBClub
>> >> COMPONENT oDBZonas
>> >> COMPONENT oLabel1
>> >> COMPONENT oLabel2
>> >> COMPONENT oN_Zona
>> >> COMPONENT oNombre
>> >>
>> >> METHOD CreateForm()
>> >> METHOD FormInitialize( oSender )
>> >> METHOD DBZonasChange( oSender, lBookMarkChanged )
>> >> ENDCLASS
>> >> #include "FormZonas.xfm"
>> >>
> //---------------------------------------------------------- ----------------
> ----
>> >> METHOD FormInitialize( oSender ) CLASS TFormZonas
>> >> *
>> >> ** Inicializa la base de datos de Zonas
>> >> WITH OBJECT ::oDataSetZonas
>> >> :cName := 'BasesZONAS.dbf'
>> >> :lOpen := .T.
>> >> END
>> >> ** Inicializa la base de datos de Club
>> >> WITH OBJECT ::oDataSetClub
>> >> ** Inicializa la base de datos de Club
>> >> :cName := 'BasesCLUB.dbf'
>> >> :lOpen := .T.
>> >> END
>> >> ** Relación de las DataSet de Zonas con Club
>> >> IF ::oDataSetZonas:lOpen
>> >> WITH OBJECT ::oDataSetZonas
>> >> :OrdSetFocus( "ZONAS" )
>> >> END
>> >> ENDIF
>> >> ** Relacion de las DataSet de Club
>> >> IF ::oDataSetClub:lOpen
>> >> WITH OBJECT ::oDataSetClub
>> >> :OrdSetFocus( "CLUB3" )
>> >> END
>> >> ENDIF
>> >> ** Unir el Browser a la DataSet
>> >> WITH OBJECT ::oDBZonas
>> >> :oDataSet := ::oDataSetZonas
>> >> //:Refresh()
>> >> END
>> >> ** Unir el Browser a la DataSet
>> >> WITH OBJECT ::oDBClub
>> >> :oDataSet := ::oDataSetClub
>> >> //:Refresh()
>> >> END
>> >> ** Unir el Campo a la DataSet
>> >> WITH OBJECT ::oN_Zona
>> >> :oDataSet := ::oDataSetZonas
>> >> END
>> >> ** Unir el Campo a la DataSet
>> >> WITH OBJECT ::oNombre
>> >> :oDataSet := ::oDataSetZonas
>> >> END
>> >> RETURN Nil
>> >>
> //---------------------------------------------------------- ----------------
> ----
>> >> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
>> >> WITH OBJECT ::oDBClub
>> >> :oDataSet := ::oDataSetClub
>> >> END
>> >> RETURN Nil
>> >>
>> >>
>> >>
>> >>
>> >
>> >
>> >
>>
>>
>
>
José Ramón Castro.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9447
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

SetRelation con dos DbBrowser

Mensaje por ignacio »

José,
Yo no lo habría hecho mejor. Muchas gracias.
Un saludo,
"José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
news:431567e9$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> No soy Ignacio, soy el hizo la pregunta:
>
> El codigo anterior no lo voy a voner porque ya está en los anteriores
> solo voy a poner la parte en la que se vea el código que implica la unión
> de
> los dos browser.
>
> En el Initialize:
>
> ** Relacion de las DataSet de Club
> IF ::oDataSetClub:lOpen
> WITH OBJECT ::oDataSetClub
> :OrdSetFocus( "CLUB3" ) // Indice de Zonas en fichero Club
> :SetScope( ::oDataSetZonas:N_Zona, ::oDataSetZonas:N_Zona, .T. )
> END
> ENDIF
>
> En el OnChange del Browse sobre el que se quiere que el otro realice la
> relación cuando pulsemos en este.
> Para que se entienda OnChange sobre Zonas para que solo me salgan en
> Club los que estan en esa zona.
> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
> ** SetScope de Club dependiendo del registro seleccionado
> ** en el Browse de Zonas por el campo N_Zona que es el por
> ** el que está indexado el fichero de Club, en el Inizialice, Club3
> ::oDataSetClub:SetScope( ::oDataSetZonas:N_Zona, ::oDataSetZonas:N_Zona,
> .T. )
>
> RETURN Nil
>
> Otros ejemplos:
>
> LOCAL cBusqueda
>
> cBusqueda := Alltrim(oTEdit:Value)
> ::oDataSet:SetScope( cBusqueda, cBusqueda, .T. )
>
> Lo más importante es que el indice de la base de datos sobre el que se
> va a trabajar el Scope sea el mismo que el valor de busqueda.
>
> Si estoy equivocado siempre Ignacio me corregirá.
>
> José Ramón Castro Polinio.
>
> "PILO" <srmpilo@hotmail.com> escribió en el mensaje
> news:[email=4314d023@ozsrvnegro.ozlan.local...]4314d023@ozsrvnegro.ozlan.local...[/email]
>> Ignacion puede escribir la programación necesito lo mismo y no tengo ni
>> idea de ellos
>> gracias de antemano
>> "Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje
>> news:[email=430ecffa@ozsrvnegro.ozlan.local...]430ecffa@ozsrvnegro.ozlan.local...[/email]
>>> José,
>>>
>>> La forma más sencilla sería:
>>>
>>> - No establezcas relaciones, no hace falta
>>> - Establece el TAG correctamente en la relacionada
>>> - En el evento ONCHANGE del primer Browse, simplemente establece un
>>> oDataSet:SetScope( xx ) en el segundo browse. En principio ni siquiera
>>> es
>>> necesario refrescar el segundo browse.
>>>
>>> Un saludo,
>>>
>>> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
>>> news:[email=430e4257@ozsrvnegro.ozlan.local...]430e4257@ozsrvnegro.ozlan.local...[/email]
>>> > Por favor Ignacio seguro que puede haber algo que me falta para que la
>>> > relación se realice, me puedes contestar.
>>> >
>>> > Ramón.
>>> >
>>> > "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
>>> > news:[email=430c698f@ozsrvnegro.ozlan.local...]430c698f@ozsrvnegro.ozlan.local...[/email]
>>> >> Saludos
>>> >>
>>> >> En la pantalla que ajunto se aprecian dos Browser que tienen
>>> >> relacionados dos campos que se llaman N_Zona, lo que necesito y no he
>>> >> conseguido por falta de experiencia es que cuando en el primer
>>> >> Bbrowse
>> se
>>> >> seleccione un registro en la otra solo se muestren los registros cuya
>>> >> Zona
>>> >> sea la seleccionada en el primero no que se vean todos.
>>> >>
>>> >> Este es el codigo que tengo implementado de momento.
>>> >>
>>> >> CLASS TFormZonas FROM TForm
>>> >> COMPONENT oDataSourceZonas
>>> >> COMPONENT oDataSetZonas
>>> >> COMPONENT oDataSourceClub
>>> >> COMPONENT oDataSetClub
>>> >> COMPONENT oDBClub
>>> >> COMPONENT oDBZonas
>>> >> COMPONENT oLabel1
>>> >> COMPONENT oLabel2
>>> >> COMPONENT oN_Zona
>>> >> COMPONENT oNombre
>>> >>
>>> >> METHOD CreateForm()
>>> >> METHOD FormInitialize( oSender )
>>> >> METHOD DBZonasChange( oSender, lBookMarkChanged )
>>> >> ENDCLASS
>>> >> #include "FormZonas.xfm"
>>> >>
>> //---------------------------------------------------------- ----------------
>> ----
>>> >> METHOD FormInitialize( oSender ) CLASS TFormZonas
>>> >> *
>>> >> ** Inicializa la base de datos de Zonas
>>> >> WITH OBJECT ::oDataSetZonas
>>> >> :cName := 'BasesZONAS.dbf'
>>> >> :lOpen := .T.
>>> >> END
>>> >> ** Inicializa la base de datos de Club
>>> >> WITH OBJECT ::oDataSetClub
>>> >> ** Inicializa la base de datos de Club
>>> >> :cName := 'BasesCLUB.dbf'
>>> >> :lOpen := .T.
>>> >> END
>>> >> ** Relación de las DataSet de Zonas con Club
>>> >> IF ::oDataSetZonas:lOpen
>>> >> WITH OBJECT ::oDataSetZonas
>>> >> :OrdSetFocus( "ZONAS" )
>>> >> END
>>> >> ENDIF
>>> >> ** Relacion de las DataSet de Club
>>> >> IF ::oDataSetClub:lOpen
>>> >> WITH OBJECT ::oDataSetClub
>>> >> :OrdSetFocus( "CLUB3" )
>>> >> END
>>> >> ENDIF
>>> >> ** Unir el Browser a la DataSet
>>> >> WITH OBJECT ::oDBZonas
>>> >> :oDataSet := ::oDataSetZonas
>>> >> //:Refresh()
>>> >> END
>>> >> ** Unir el Browser a la DataSet
>>> >> WITH OBJECT ::oDBClub
>>> >> :oDataSet := ::oDataSetClub
>>> >> //:Refresh()
>>> >> END
>>> >> ** Unir el Campo a la DataSet
>>> >> WITH OBJECT ::oN_Zona
>>> >> :oDataSet := ::oDataSetZonas
>>> >> END
>>> >> ** Unir el Campo a la DataSet
>>> >> WITH OBJECT ::oNombre
>>> >> :oDataSet := ::oDataSetZonas
>>> >> END
>>> >> RETURN Nil
>>> >>
>> //---------------------------------------------------------- ----------------
>> ----
>>> >> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
>>> >> WITH OBJECT ::oDBClub
>>> >> :oDataSet := ::oDataSetClub
>>> >> END
>>> >> RETURN Nil
>>> >>
>>> >>
>>> >>
>>> >>
>>> >
>>> >
>>> >
>>>
>>>
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
PILO
Mensajes: 583
Registrado: Vie Jul 06, 2007 5:18 pm

SetRelation con dos DbBrowser

Mensaje por PILO »

Muhas gracias por ello , este tipo de ayuda entre nosostros tambien es muy
importante
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:43156c7c$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> José,
>
> Yo no lo habría hecho mejor. Muchas gracias.
>
> Un saludo,
>
> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> news:431567e9$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> > No soy Ignacio, soy el hizo la pregunta:
> >
> > El codigo anterior no lo voy a voner porque ya está en los anteriores
> > solo voy a poner la parte en la que se vea el código que implica la
unión
> > de
> > los dos browser.
> >
> > En el Initialize:
> >
> > ** Relacion de las DataSet de Club
> > IF ::oDataSetClub:lOpen
> > WITH OBJECT ::oDataSetClub
> > :OrdSetFocus( "CLUB3" ) // Indice de Zonas en fichero Club
> > :SetScope( ::oDataSetZonas:N_Zona, ::oDataSetZonas:N_Zona, .T. )
> > END
> > ENDIF
> >
> > En el OnChange del Browse sobre el que se quiere que el otro realice
la
> > relación cuando pulsemos en este.
> > Para que se entienda OnChange sobre Zonas para que solo me salgan en
> > Club los que estan en esa zona.
> > METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
> > ** SetScope de Club dependiendo del registro seleccionado
> > ** en el Browse de Zonas por el campo N_Zona que es el por
> > ** el que está indexado el fichero de Club, en el Inizialice, Club3
> > ::oDataSetClub:SetScope( ::oDataSetZonas:N_Zona,
::oDataSetZonas:N_Zona,
> > .T. )
> >
> > RETURN Nil
> >
> > Otros ejemplos:
> >
> > LOCAL cBusqueda
> >
> > cBusqueda := Alltrim(oTEdit:Value)
> > ::oDataSet:SetScope( cBusqueda, cBusqueda, .T. )
> >
> > Lo más importante es que el indice de la base de datos sobre el que
se
> > va a trabajar el Scope sea el mismo que el valor de busqueda.
> >
> > Si estoy equivocado siempre Ignacio me corregirá.
> >
> > José Ramón Castro Polinio.
> >
> > "PILO" <srmpilo@hotmail.com> escribió en el mensaje
> > news:[email=4314d023@ozsrvnegro.ozlan.local...]4314d023@ozsrvnegro.ozlan.local...[/email]
> >> Ignacion puede escribir la programación necesito lo mismo y no tengo ni
> >> idea de ellos
> >> gracias de antemano
> >> "Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje
> >> news:[email=430ecffa@ozsrvnegro.ozlan.local...]430ecffa@ozsrvnegro.ozlan.local...[/email]
> >>> José,
> >>>
> >>> La forma más sencilla sería:
> >>>
> >>> - No establezcas relaciones, no hace falta
> >>> - Establece el TAG correctamente en la relacionada
> >>> - En el evento ONCHANGE del primer Browse, simplemente establece un
> >>> oDataSet:SetScope( xx ) en el segundo browse. En principio ni siquiera
> >>> es
> >>> necesario refrescar el segundo browse.
> >>>
> >>> Un saludo,
> >>>
> >>> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> >>> news:[email=430e4257@ozsrvnegro.ozlan.local...]430e4257@ozsrvnegro.ozlan.local...[/email]
> >>> > Por favor Ignacio seguro que puede haber algo que me falta para que
la
> >>> > relación se realice, me puedes contestar.
> >>> >
> >>> > Ramón.
> >>> >
> >>> > "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> >>> > news:[email=430c698f@ozsrvnegro.ozlan.local...]430c698f@ozsrvnegro.ozlan.local...[/email]
> >>> >> Saludos
> >>> >>
> >>> >> En la pantalla que ajunto se aprecian dos Browser que tienen
> >>> >> relacionados dos campos que se llaman N_Zona, lo que necesito y no
he
> >>> >> conseguido por falta de experiencia es que cuando en el primer
> >>> >> Bbrowse
> >> se
> >>> >> seleccione un registro en la otra solo se muestren los registros
cuya
> >>> >> Zona
> >>> >> sea la seleccionada en el primero no que se vean todos.
> >>> >>
> >>> >> Este es el codigo que tengo implementado de momento.
> >>> >>
> >>> >> CLASS TFormZonas FROM TForm
> >>> >> COMPONENT oDataSourceZonas
> >>> >> COMPONENT oDataSetZonas
> >>> >> COMPONENT oDataSourceClub
> >>> >> COMPONENT oDataSetClub
> >>> >> COMPONENT oDBClub
> >>> >> COMPONENT oDBZonas
> >>> >> COMPONENT oLabel1
> >>> >> COMPONENT oLabel2
> >>> >> COMPONENT oN_Zona
> >>> >> COMPONENT oNombre
> >>> >>
> >>> >> METHOD CreateForm()
> >>> >> METHOD FormInitialize( oSender )
> >>> >> METHOD DBZonasChange( oSender, lBookMarkChanged )
> >>> >> ENDCLASS
> >>> >> #include "FormZonas.xfm"
> >>> >>
> >>
//---------------------------------------------------------- ----------------
> >> ----
> >>> >> METHOD FormInitialize( oSender ) CLASS TFormZonas
> >>> >> *
> >>> >> ** Inicializa la base de datos de Zonas
> >>> >> WITH OBJECT ::oDataSetZonas
> >>> >> :cName := 'BasesZONAS.dbf'
> >>> >> :lOpen := .T.
> >>> >> END
> >>> >> ** Inicializa la base de datos de Club
> >>> >> WITH OBJECT ::oDataSetClub
> >>> >> ** Inicializa la base de datos de Club
> >>> >> :cName := 'BasesCLUB.dbf'
> >>> >> :lOpen := .T.
> >>> >> END
> >>> >> ** Relación de las DataSet de Zonas con Club
> >>> >> IF ::oDataSetZonas:lOpen
> >>> >> WITH OBJECT ::oDataSetZonas
> >>> >> :OrdSetFocus( "ZONAS" )
> >>> >> END
> >>> >> ENDIF
> >>> >> ** Relacion de las DataSet de Club
> >>> >> IF ::oDataSetClub:lOpen
> >>> >> WITH OBJECT ::oDataSetClub
> >>> >> :OrdSetFocus( "CLUB3" )
> >>> >> END
> >>> >> ENDIF
> >>> >> ** Unir el Browser a la DataSet
> >>> >> WITH OBJECT ::oDBZonas
> >>> >> :oDataSet := ::oDataSetZonas
> >>> >> //:Refresh()
> >>> >> END
> >>> >> ** Unir el Browser a la DataSet
> >>> >> WITH OBJECT ::oDBClub
> >>> >> :oDataSet := ::oDataSetClub
> >>> >> //:Refresh()
> >>> >> END
> >>> >> ** Unir el Campo a la DataSet
> >>> >> WITH OBJECT ::oN_Zona
> >>> >> :oDataSet := ::oDataSetZonas
> >>> >> END
> >>> >> ** Unir el Campo a la DataSet
> >>> >> WITH OBJECT ::oNombre
> >>> >> :oDataSet := ::oDataSetZonas
> >>> >> END
> >>> >> RETURN Nil
> >>> >>
> >>
//---------------------------------------------------------- ----------------
> >> ----
> >>> >> METHOD DBZonasChange( oSender, lBookMarkChanged ) CLASS TFormZonas
> >>> >> WITH OBJECT ::oDBClub
> >>> >> :oDataSet := ::oDataSetClub
> >>> >> END
> >>> >> RETURN Nil
> >>> >>
> >>> >>
> >>> >>
> >>> >>
> >>> >
> >>> >
> >>> >
> >>>
> >>>
> >>
> >>
> >
> >
>
>
Responder