Página 1 de 1

RELACIONAR DOS TABLAS

Publicado: Lun Mar 08, 2010 1:59 am
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

RELACIONAR DOS TABLAS

Publicado: Lun Mar 08, 2010 11:59 am
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

RELACIONAR DOS TABLAS

Publicado: Lun Mar 08, 2010 1:34 pm
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
>

RELACIONAR DOS TABLAS

Publicado: Lun Mar 08, 2010 2:07 pm
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
>>
>
--

RELACIONAR DOS TABLAS

Publicado: Mar Mar 09, 2010 1:47 pm
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
>>>
>>
>
>

RELACIONAR DOS TABLAS

Publicado: Sab Mar 13, 2010 4:24 pm
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
>>>
>>
>
>

RELACIONAR DOS TABLAS

Publicado: Dom Mar 14, 2010 7:34 pm
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.