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.

RELACIONAR DOS TABLAS

Foro público de Xailer en español
Responder
JESUS MARIN
Mensajes: 15
Registrado: Dom Feb 21, 2010 6:51 pm

RELACIONAR DOS TABLAS

Mensaje por JESUS MARIN »

Hola a todos.
Estoy intenando relacionar dos tablas en el mismo formulario
es decir filtrar el Browse2 con el Edit1
Alguna ayuda.
Gracias
jrcpoli-quitar
Mensajes: 558
Registrado: Mar Feb 09, 2010 2:26 pm

RELACIONAR DOS TABLAS

Mensaje por jrcpoli-quitar »

Saludos:
Para relacionar dos tablas tienen que tener un campo en común, además la
tabla sobre la que se realiza la búsqueda debe tener ese campo como
indice y tener activado dicho indice.
METHOD DbfIndividualCreate( oSender ) CLASS TFormIndivBuscar
WITH OBJECT ::oDbfIndividual
:oDataSource := Application:oMainForm:oCdxDSource
:lOpen := .T.
*
IF :lOpen
** Indice seleccionado
:OrdSetFocus("ANILLA_DI")
ENDIF
END
RETURN Nil
Después si utilizas un Edit debes de activar el evento OnChange con el
fin de que cada modificación que realices en el Edit sea trasladada al
browse2, también puedes hacer el SetScope cuando termines la edición en
el Edit en el evento OnExit, eso depende de tus necesidades.
METHOD Num_AnillaChange( oSender ) CLASS TFormIndivBuscar
IF ::oDbfIndividual:RECCOUNT() > 0
** queremos buscar el mismo valor de inicio y final
::oDbfIndividual:SetScope(oSender:Value, oSender:Value, .T.,.F.)
** Refescar el Browser
::oDBBAnillas:Refresh()
ENDIF
RETURN Nil
Mira en la Ayuda SetScope(valorInicio, valorFinal, lGoTop, lRefresh)
Mira ClearScope() // Deshace el SetScope anterior y obtener el anterior.
José Ramón Castro.
Jesús Marí­n escribió:
> Hola a todos.
> Estoy intenando relacionar dos tablas en el mismo formulario
> es decir filtrar el Browse2 con el Edit1
> Alguna ayuda.
> Gracias
JESUS MARIN
Mensajes: 15
Registrado: Dom Feb 21, 2010 6:51 pm

RELACIONAR DOS TABLAS

Mensaje por JESUS MARIN »

Jose Ramón, gracias por contestar.
Efectivamente estas cosas estaba probando pero me dice que no existe el metodo
:SetScope en un error de ejecución
TMDICHILD:DBFDATASET1POSTCHANGE(55)
Error BASE/1004 Class: 'NIL' has no exported method: SETSCOPE
Argumentos: ( [ 1] = Tipo: U Valor: NIL [ 2] = Tipo: C Valor: 153 [ 3]
= Tipo: C Valor: 153 [ 4] = Tipo: L Valor: .T. [ 5] = Tipo: L Valor: .F.)
He activado el evento OnChange del DataSet1 para hacer el scope en el DataSet2
y despues refrescar el Browse2
METHOD DbfDataSet1PostChange( oSender, nOperation, Param1, Param2 ) CLASS
TMdiChild
::oDbfDataSet2:SetScope ::oDbfDataSet1:CODIGO, ::oDbfDataSet1:CODIGO, .T.,.F.)
** Refescar el Browser
::oDBBrowse2:Refresh()
RETURN Nil
Las dos tablas tienen como primer campo "CODIGO" de misma longitud y tipo
y las indices se ordenan por este campo.
Perdón mi ignoracia. Soy novato todavía.
Saludos
Jesús Marín
=?ISO-8859-1?Q?Jos=E9_Ram=F3n_Castro_Polinio?= wrote:
>Saludos:
>
>Para relacionar dos tablas tienen que tener un campo en común, además la
>tabla sobre la que se realiza la búsqueda debe tener ese campo como
>indice y tener activado dicho indice.
>
>METHOD DbfIndividualCreate( oSender ) CLASS TFormIndivBuscar
>
> WITH OBJECT ::oDbfIndividual
> :oDataSource := Application:oMainForm:oCdxDSource
> :lOpen := .T.
> *
> IF :lOpen
> ** Indice seleccionado
> :OrdSetFocus("ANILLA_DI")
> ENDIF
> END
>
>RETURN Nil
>
>Después si utilizas un Edit debes de activar el evento OnChange con el
>fin de que cada modificación que realices en el Edit sea trasladada al
>browse2, también puedes hacer el SetScope cuando termines la edición en
>el Edit en el evento OnExit, eso depende de tus necesidades.
>
>METHOD Num_AnillaChange( oSender ) CLASS TFormIndivBuscar
>
> IF ::oDbfIndividual:RECCOUNT() > 0
> ** queremos buscar el mismo valor de inicio y final
> ::oDbfIndividual:SetScope(oSender:Value, oSender:Value, .T.,.F.)
> ** Refescar el Browser
> ::oDBBAnillas:Refresh()
> ENDIF
>
>RETURN Nil
>
>Mira en la Ayuda SetScope(valorInicio, valorFinal, lGoTop, lRefresh)
>Mira ClearScope() // Deshace el SetScope anterior y obtener el anterior.
>
>José Ramón Castro.
>
>Jesús Marín escribió:
>> Hola a todos.
>> Estoy intenando relacionar dos tablas en el mismo formulario
>> es decir filtrar el Browse2 con el Edit1
>> Alguna ayuda.
>> Gracias
>
jrcpoli-quitar
Mensajes: 558
Registrado: Mar Feb 09, 2010 2:26 pm

RELACIONAR DOS TABLAS

Mensaje por jrcpoli-quitar »

Saludos:
Lo primero lo que cambia es el Browse, o el Edit asociado al DataSet
correspondiente por lo tanto el evento OnChange es sobre el Browse, o el
Edit, no sobre el DataSet.
Segundo un ejemplo es mejor, así­ que hay te mando uno, son cuatro Browse
relacionados.
José Ramón Castro.
JESUS MARIN escribió:
> Jose Ramón, gracias por contestar.
>
> Efectivamente estas cosas estaba probando pero me dice que no existe el metodo
> :SetScope en un error de ejecución
>
> TMDICHILD:DBFDATASET1POSTCHANGE(55)
> Error BASE/1004 Class: 'NIL' has no exported method: SETSCOPE
> Argumentos: ( [ 1] = Tipo: U Valor: NIL [ 2] = Tipo: C Valor: 153 [ 3]
> = Tipo: C Valor: 153 [ 4] = Tipo: L Valor: .T. [ 5] = Tipo: L Valor: .F.)
>
> He activado el evento OnChange del DataSet1 para hacer el scope en el DataSet2
> y despues refrescar el Browse2
>
> METHOD DbfDataSet1PostChange( oSender, nOperation, Param1, Param2 ) CLASS
> TMdiChild
> ::oDbfDataSet2:SetScope(::oDbfDataSet1:CODIGO, ::oDbfDataSet1:CODIGO, .T.,.F.)
>
> ** Refescar el Browser
> ::oDBBrowse2:Refresh()
>
> RETURN Nil
>
> Las dos tablas tienen como primer campo "CODIGO" de misma longitud y tipo
> y las indices se ordenan por este campo.
>
> Perdón mi ignoracia. Soy novato todaví­a.
>
> Saludos
>
> Jesús Marí­n
>
>
>
>
>
> =?ISO-8859-1?Q?Jos=E9_Ram=F3n_Castro_Polinio?= wrote:
>> Saludos:
>>
>> Para relacionar dos tablas tienen que tener un campo en común, además la
>
>> tabla sobre la que se realiza la búsqueda debe tener ese campo como
>> indice y tener activado dicho indice.
>>
>> METHOD DbfIndividualCreate( oSender ) CLASS TFormIndivBuscar
>>
>> WITH OBJECT ::oDbfIndividual
>> :oDataSource := Application:oMainForm:oCdxDSource
>> :lOpen := .T.
>> *
>> IF :lOpen
>> ** Indice seleccionado
>> :OrdSetFocus("ANILLA_DI")
>> ENDIF
>> END
>>
>> RETURN Nil
>>
>> Después si utilizas un Edit debes de activar el evento OnChange con el
>> fin de que cada modificación que realices en el Edit sea trasladada al
>> browse2, también puedes hacer el SetScope cuando termines la edición en
>
>> el Edit en el evento OnExit, eso depende de tus necesidades.
>>
>> METHOD Num_AnillaChange( oSender ) CLASS TFormIndivBuscar
>>
>> IF ::oDbfIndividual:RECCOUNT()> 0
>> ** queremos buscar el mismo valor de inicio y final
>> ::oDbfIndividual:SetScope(oSender:Value, oSender:Value, .T.,.F.)
>> ** Refescar el Browser
>> ::oDBBAnillas:Refresh()
>> ENDIF
>>
>> RETURN Nil
>>
>> Mira en la Ayuda SetScope(valorInicio, valorFinal, lGoTop, lRefresh)
>> Mira ClearScope() // Deshace el SetScope anterior y obtener el anterior.
>>
>> José Ramón Castro.
>>
>> Jesús Marí­n escribió:
>>> Hola a todos.
>>> Estoy intenando relacionar dos tablas en el mismo formulario
>>> es decir filtrar el Browse2 con el Edit1
>>> Alguna ayuda.
>>> Gracias
>>
>
--
JESUS MARIN
Mensajes: 15
Registrado: Dom Feb 21, 2010 6:51 pm

RELACIONAR DOS TABLAS

Mensaje por JESUS MARIN »

Muchas gracias, tan pronto pueda ( hoy ), lo estudio.
Saludos
Jesús
=?ISO-8859-1?Q?Jos=E9_Ram=F3n_Castro_Polinio?= wrote:
>
>Saludos:
>
>Lo primero lo que cambia es el Browse, o el Edit asociado al DataSet
>correspondiente por lo tanto el evento OnChange es sobre el Browse, o el
>Edit, no sobre el DataSet.
>
>Segundo un ejemplo es mejor, así que hay te mando uno, son cuatro Browse
>relacionados.
>
>José Ramón Castro.
>
>JESUS MARIN escribió:
>> Jose Ramón, gracias por contestar.
>>
>> Efectivamente estas cosas estaba probando pero me dice que no existe el
metodo
>> :SetScope en un error de ejecución
>>
>> TMDICHILD:DBFDATASET1POSTCHANGE(55)
>> Error BASE/1004 Class: 'NIL' has no exported method: SETSCOPE
>> Argumentos: ( [ 1] = Tipo: U Valor: NIL [ 2] = Tipo: C Valor: 153 [
3]
>> = Tipo: C Valor: 153 [ 4] = Tipo: L Valor: .T. [ 5] = Tipo: L Valor:
.F.)
>>
>> He activado el evento OnChange del DataSet1 para hacer el scope en el
DataSet2
>> y despues refrescar el Browse2
>>
>> METHOD DbfDataSet1PostChange( oSender, nOperation, Param1, Param2 ) CLASS
>> TMdiChild
>> ::oDbfDataSet2:SetScope(::oDbfDataSet1:CODIGO, ::oDbfDataSet1:CODIGO,
.T.,.F.)
>>
>> ** Refescar el Browser
>> ::oDBBrowse2:Refresh()
>>
>> RETURN Nil
>>
>> Las dos tablas tienen como primer campo "CODIGO" de misma longitud y tipo
>> y las indices se ordenan por este campo.
>>
>> Perdón mi ignoracia. Soy novato todavía.
>>
>> Saludos
>>
>> Jesús Marín
>>
>>
>>
>>
>>
>> =?ISO-8859-1?Q?Jos=E9_Ram=F3n_Castro_Polinio?= wrote:
>>> Saludos:
>>>
>>> Para relacionar dos tablas tienen que tener un campo en común, además
la
>>
>>> tabla sobre la que se realiza la búsqueda debe tener ese campo como
>>> indice y tener activado dicho indice.
>>>
>>> METHOD DbfIndividualCreate( oSender ) CLASS TFormIndivBuscar
>>>
>>> WITH OBJECT ::oDbfIndividual
>>> :oDataSource := Application:oMainForm:oCdxDSource
>>> :lOpen := .T.
>>> *
>>> IF :lOpen
>>> ** Indice seleccionado
>>> :OrdSetFocus("ANILLA_DI")
>>> ENDIF
>>> END
>>>
>>> RETURN Nil
>>>
>>> Después si utilizas un Edit debes de activar el evento OnChange con el
>>> fin de que cada modificación que realices en el Edit sea trasladada al
>>> browse2, también puedes hacer el SetScope cuando termines la edición
en
>>
>>> el Edit en el evento OnExit, eso depende de tus necesidades.
>>>
>>> METHOD Num_AnillaChange( oSender ) CLASS TFormIndivBuscar
>>>
>>> IF ::oDbfIndividual:RECCOUNT()> 0
>>> ** queremos buscar el mismo valor de inicio y final
>>> ::oDbfIndividual:SetScope(oSender:Value, oSender:Value, .T.,.F.)
>>> ** Refescar el Browser
>>> ::oDBBAnillas:Refresh()
>>> ENDIF
>>>
>>> RETURN Nil
>>>
>>> Mira en la Ayuda SetScope(valorInicio, valorFinal, lGoTop, lRefresh)
>>> Mira ClearScope() // Deshace el SetScope anterior y obtener el anterior.
>>>
>>> José Ramón Castro.
>>>
>>> Jesús Marín escribió:
>>>> Hola a todos.
>>>> Estoy intenando relacionar dos tablas en el mismo formulario
>>>> es decir filtrar el Browse2 con el Edit1
>>>> Alguna ayuda.
>>>> Gracias
>>>
>>
>
>
JESUS MARIN
Mensajes: 15
Registrado: Dom Feb 21, 2010 6:51 pm

RELACIONAR DOS TABLAS

Mensaje por JESUS MARIN »

Estimado Ramón, muchas gracias por los ejemplos.
Ha funcionado. Realmente no se puede usar al cambiar de registro, que era
lo que yo quería. He utilizado el :OnPaint de un Edit.
Muchas gracias
Jesús
=?ISO-8859-1?Q?Jos=E9_Ram=F3n_Castro_Polinio?= wrote:
>
>Saludos:
>
>Lo primero lo que cambia es el Browse, o el Edit asociado al DataSet
>correspondiente por lo tanto el evento OnChange es sobre el Browse, o el
>Edit, no sobre el DataSet.
>
>Segundo un ejemplo es mejor, así que hay te mando uno, son cuatro Browse
>relacionados.
>
>José Ramón Castro.
>
>JESUS MARIN escribió:
>> Jose Ramón, gracias por contestar.
>>
>> Efectivamente estas cosas estaba probando pero me dice que no existe el
metodo
>> :SetScope en un error de ejecución
>>
>> TMDICHILD:DBFDATASET1POSTCHANGE(55)
>> Error BASE/1004 Class: 'NIL' has no exported method: SETSCOPE
>> Argumentos: ( [ 1] = Tipo: U Valor: NIL [ 2] = Tipo: C Valor: 153 [
3]
>> = Tipo: C Valor: 153 [ 4] = Tipo: L Valor: .T. [ 5] = Tipo: L Valor:
.F.)
>>
>> He activado el evento OnChange del DataSet1 para hacer el scope en el
DataSet2
>> y despues refrescar el Browse2
>>
>> METHOD DbfDataSet1PostChange( oSender, nOperation, Param1, Param2 ) CLASS
>> TMdiChild
>> ::oDbfDataSet2:SetScope(::oDbfDataSet1:CODIGO, ::oDbfDataSet1:CODIGO,
.T.,.F.)
>>
>> ** Refescar el Browser
>> ::oDBBrowse2:Refresh()
>>
>> RETURN Nil
>>
>> Las dos tablas tienen como primer campo "CODIGO" de misma longitud y tipo
>> y las indices se ordenan por este campo.
>>
>> Perdón mi ignoracia. Soy novato todavía.
>>
>> Saludos
>>
>> Jesús Marín
>>
>>
>>
>>
>>
>> =?ISO-8859-1?Q?Jos=E9_Ram=F3n_Castro_Polinio?= wrote:
>>> Saludos:
>>>
>>> Para relacionar dos tablas tienen que tener un campo en común, además
la
>>
>>> tabla sobre la que se realiza la búsqueda debe tener ese campo como
>>> indice y tener activado dicho indice.
>>>
>>> METHOD DbfIndividualCreate( oSender ) CLASS TFormIndivBuscar
>>>
>>> WITH OBJECT ::oDbfIndividual
>>> :oDataSource := Application:oMainForm:oCdxDSource
>>> :lOpen := .T.
>>> *
>>> IF :lOpen
>>> ** Indice seleccionado
>>> :OrdSetFocus("ANILLA_DI")
>>> ENDIF
>>> END
>>>
>>> RETURN Nil
>>>
>>> Después si utilizas un Edit debes de activar el evento OnChange con el
>>> fin de que cada modificación que realices en el Edit sea trasladada al
>>> browse2, también puedes hacer el SetScope cuando termines la edición
en
>>
>>> el Edit en el evento OnExit, eso depende de tus necesidades.
>>>
>>> METHOD Num_AnillaChange( oSender ) CLASS TFormIndivBuscar
>>>
>>> IF ::oDbfIndividual:RECCOUNT()> 0
>>> ** queremos buscar el mismo valor de inicio y final
>>> ::oDbfIndividual:SetScope(oSender:Value, oSender:Value, .T.,.F.)
>>> ** Refescar el Browser
>>> ::oDBBAnillas:Refresh()
>>> ENDIF
>>>
>>> RETURN Nil
>>>
>>> Mira en la Ayuda SetScope(valorInicio, valorFinal, lGoTop, lRefresh)
>>> Mira ClearScope() // Deshace el SetScope anterior y obtener el anterior.
>>>
>>> José Ramón Castro.
>>>
>>> Jesús Marín escribió:
>>>> Hola a todos.
>>>> Estoy intenando relacionar dos tablas en el mismo formulario
>>>> es decir filtrar el Browse2 con el Edit1
>>>> Alguna ayuda.
>>>> Gracias
>>>
>>
>
>
jrcpoli-quitar
Mensajes: 558
Registrado: Mar Feb 09, 2010 2:26 pm

RELACIONAR DOS TABLAS

Mensaje por jrcpoli-quitar »

Saludos:
Jesús Marí­n escribió:
> Realmente no se puede usar al cambiar de registro, que era
> lo que yo querí­a.
Pues verdaderamente esto no lo he entendido, ¿ porque no se puede ?
será porque no has sabido hacerlo como a mí­ me pasa con el Crystal
Reports XI pero que no se pueda, no lo creo posible, quizás si mostraras
como quieres hacerlo esto es el prg y el xfm te podrí­amos ayudar más.
José Ramón Castro.
Responder