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.

Cual es la diferencia?

Foro de Xailer profesional en español
Responder
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Cual es la diferencia?

Mensaje por zeasoftware »

Tengo un problemita que ya logre resolver, pero no entiendo por que sucede
esto:
Class Tform1
Component oDataSet
:::
End Class
Class TForm2
Data oClave
Method Alta()
End Classs
Method Alta ::::::
logdebug(::oParent:oDataSet:lOnAppend()) // regresa .f.
Return
desde TForm1:
AddNew()
logdebug(::oDataSet::lOnAppend()) //da verdadero
Tform1:New(self):Show() ::::
:::::
En si lo que quiero dar a enterder es por que :oParent:oDataSet:lOnAppend()
en TForm2 regresa falso, si esta heredenando oDataSet de TForm1, y ademas
que lo hace despues del addnew?
es un bug?
Saludos.
--
Ramon Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Cual es la diferencia?

Mensaje por jrcpoli »

Saludos Ramón:
Nos puedes enseñar donde hereda el TForm2 del TForm1, porque con el
código que has puesto no hereda de ningún sitio.
José Ramón Castro.
ramonzea escribió:
> Tengo un problemita que ya logre resolver, pero no entiendo por que sucede
> esto:
>
> Class Tform1
> Component oDataSet
> :::
> End Class
>
> Class TForm2
> Data oClave
> Method Alta()
>
> End Classs
>
> Method Alta ::::::
> logdebug(::oParent:oDataSet:lOnAppend()) // regresa .f.
>
> Return
>
> desde TForm1:
> AddNew()
> logdebug(::oDataSet::lOnAppend()) //da verdadero
> Tform1:New(self):Show() ::::
> :::::
>
> En si lo que quiero dar a enterder es por que :oParent:oDataSet:lOnAppend()
> en TForm2 regresa falso, si esta heredenando oDataSet de TForm1, y ademas
> que lo hace despues del addnew?
> es un bug?
>
> Saludos.
José Ramón Castro.
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Cual es la diferencia?

Mensaje por zeasoftware »

Vaya no se si me explique bien:
se supone que al hacer:
en TForm2:
TForm1():New( Self ):Show() //Self = TForm2
y por tanto puedo accesar datos de TForm2 en TForm1 utilizando ::oParent, es
asi no?
creo que use la palabra erronea.
Saludos.
--
Ramon Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
"José Ramón Castro Polinio" <jrcpoli@terra.es> escribió en el mensaje
news:45424e5c$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Saludos Ramón:
>
> Nos puedes enseñar donde hereda el TForm2 del TForm1, porque con el código
> que has puesto no hereda de ningún sitio.
>
> José Ramón Castro.
>
> ramonzea escribió:
>> Tengo un problemita que ya logre resolver, pero no entiendo por que
>> sucede esto:
>>
>> Class Tform1
>> Component oDataSet
>> :::
>> End Class
>>
>> Class TForm2
>> Data oClave
>> Method Alta()
>>
>> End Classs
>>
>> Method Alta ::::::
>> logdebug(::oParent:oDataSet:lOnAppend()) // regresa .f.
>>
>> Return
>>
>> desde TForm1:
>> AddNew()
>> logdebug(::oDataSet::lOnAppend()) //da verdadero
>> Tform1:New(self):Show() ::::
>> :::::
>>
>> En si lo que quiero dar a enterder es por que
>> :oParent:oDataSet:lOnAppend() en TForm2 regresa falso, si esta
>> heredenando oDataSet de TForm1, y ademas que lo hace despues del addnew?
>> es un bug?
>>
>> Saludos.
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Cual es la diferencia?

Mensaje por jrcpoli »

Ramón:
Yo lo hago así­ y no falla.
CLASS TFormMant FROM TForm
COMPONENT oDataSet
METHOD AddNew( oFrm )
ENDCLASS
//----------------------------------
METHOD AddNew(oFrm) CLASS TFormMant
WITH OBJECT oFrm
:cText := "Agregar Nuevo"
::oDataSet:AddNew()
:ShowModal()
if :nModalResult == mrOK
::oDataSet:Update()
::oDBw:Refresh()
else
::oDataSet:Cancel()
endif
:End()
END WITH
RETURN NIL
//-----------------------------------
** Prg sin formulario solo inicializa el DataSet con la base de datos
** que quieras utilizar pero hereda del primero fí­jate después de FROM
CLASS TSocios FROM TFormMant
METHOD AddNew( oSender )
ENDCLASS
//----------------------------------
METHOD FormInitialize( oSender ) CLASS TSocios
// Inicializa la base de datos a Utilizar
WITH OBJECT ::oDataSet
:cName := "Concursa.dbf"
:lOpen := .T.
END
RETURN Super:FormInitialize( oSender )
//----------------------------------
METHOD AddNew( oSender ) CLASS TSocios
** Esto llama al formulario de alta pero con los datos del
** del formulario del procedimiento AddNew de TFormMant
Super:AddNew(TFormSociosNew():New( Self ) )
RETURN Nil
Para que se entienda, el Formulario TFormMant es un formulario que no
tiene nada más que el menú los iconos y el Browse y los procedimientos
comunes a todos las bases de datos que lo vayan a utilizar, el PRG sin
formulario es el que tiene las llamadas a los procedimiento del
principal a través de la sentencia "Super", yo desde el menú principal
de la aplicación llamo al PRG TSocios pero como este hereda de TFormMant
me saldrá este, no el TSocios que no es formulario, en TSocios puedo
definir procedimientos exclusivos de esa clase como por ejemplo los
Report que declararé en TFormMat con la clausula "Virtual"
Ejemplo: en TFormMant defino
METHOD Delete() VIRTUAL
METHOD Report() VIRTUAL
En TSocios los declaro de nuevo pero aquí­ los desarrollo dentro del PRG
METHOD Delete()
METHOD Report()
METHOD Delete() FROM TSocios
*********
*********
RETURN Nil
METHOD Report() FROM TSocios
*****
*****
RETURN Nil
Por lo tanto serán exclusivos de él.
Ahora lo que quieres tú.
CLASS TFormCensos FROM TForm
COMPONENT oDbfCensos

METHOD AddNew( oSender )
ENDCLASS
//--------------------------------
METHOD AddNew( oSender ) CLASS TFormCensos
WITH OBJECT FormCensosNew():New( Self )
:cText := "Agregar Nuevo"
::oDbfCensos:AddNew()
:lAnadir := ::oDbfCensos:lOnAppend
:ShowModal()
IF :nModalResult == mrOK
*
::oDbfCensos:Update()
ELSE
::oDbfCensos:Cancel()
ENDIF
:END()
END
RETURN Nil
//--------------------------------------
CLASS FormCensosNew FROM TForm
Data lAnadir
METHOD FormShow()
ENDCLASS
//-------------------------------------
METHOD FormShow( oSender ) FROM FormCensosNew
IF lAnadir // True que es lOnAppend
***
***
***
ENDIF
o poner
IF ::oParent:oDbfCensos:lOnAppend
ENDIF
o acceder a los campos de la base de datos declarada en el primer
formulario:
::oParent:oDbfCensos:FieldGetByName("ANNO") + " " + ;
::oParent:oDbfCensos:FieldGetByName("N_ANILLA")
END
RETURN Nil
Si cometo algún error siempre habrá alguien para sacarme de él.
José Ramón Castro.
ramonzea escribió:
> Vaya no se si me explique bien:
>
> se supone que al hacer:
> en TForm2:
>
> TForm1():New( Self ):Show() //Self = TForm2
>
> y por tanto puedo accesar datos de TForm2 en TForm1 utilizando ::oParent, es
> asi no?
>
> creo que use la palabra erronea.
>
> Saludos.
José Ramón Castro.
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Cual es la diferencia?

Mensaje por zeasoftware »

exactamente asi lo hago, tengo un modulo de mantenimiento estandar.
si te das cuenta lo capturas para pasarlo al tForm
:lAnadir := ::oDbfCensos:lOnAppend
:ShowModal()
IF :nModalResult == mrOK
tendre que hacerlo asi, ya no me queda de otra, ya me di por vencido.
Saludos.
--
Ramon Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
"José Ramón Castro Polinio" <jrcpoli@terra.es> escribió en el mensaje news:[email=4543391a@news.xailer.com...]4543391a@news.xailer.com...[/email]
> Ramón:
>
> Yo lo hago así­ y no falla.
>
> CLASS TFormMant FROM TForm
> COMPONENT oDataSet
>
> METHOD AddNew( oFrm )
>
> ENDCLASS
> //----------------------------------
> METHOD AddNew(oFrm) CLASS TFormMant
>
> WITH OBJECT oFrm
> :cText := "Agregar Nuevo"
> ::oDataSet:AddNew()
> :ShowModal()
> if :nModalResult == mrOK
> ::oDataSet:Update()
> ::oDBw:Refresh()
> else
> ::oDataSet:Cancel()
> endif
> :End()
> END WITH
>
> RETURN NIL
>
> //-----------------------------------
> ** Prg sin formulario solo inicializa el DataSet con la base de datos
> ** que quieras utilizar pero hereda del primero fí­jate después de FROM
> CLASS TSocios FROM TFormMant
>
> METHOD AddNew( oSender )
>
> ENDCLASS
> //----------------------------------
> METHOD FormInitialize( oSender ) CLASS TSocios
>
> // Inicializa la base de datos a Utilizar
> WITH OBJECT ::oDataSet
> :cName := "Concursa.dbf"
> :lOpen := .T.
> END
>
> RETURN Super:FormInitialize( oSender )
>
> //----------------------------------
> METHOD AddNew( oSender ) CLASS TSocios
> ** Esto llama al formulario de alta pero con los datos del
> ** del formulario del procedimiento AddNew de TFormMant
> Super:AddNew(TFormSociosNew():New( Self ) )
>
> RETURN Nil
>
> Para que se entienda, el Formulario TFormMant es un formulario que no
> tiene nada más que el menú los iconos y el Browse y los procedimientos
> comunes a todos las bases de datos que lo vayan a utilizar, el PRG sin
> formulario es el que tiene las llamadas a los procedimiento del
> principal a través de la sentencia "Super", yo desde el menú principal
> de la aplicación llamo al PRG TSocios pero como este hereda de TFormMant
> me saldrá este, no el TSocios que no es formulario, en TSocios puedo
> definir procedimientos exclusivos de esa clase como por ejemplo los
> Report que declararé en TFormMat con la clausula "Virtual"
>
> Ejemplo: en TFormMant defino
>
> METHOD Delete() VIRTUAL
> METHOD Report() VIRTUAL
>
> En TSocios los declaro de nuevo pero aquí­ los desarrollo dentro del PRG
>
> METHOD Delete()
> METHOD Report()
>
> METHOD Delete() FROM TSocios
>
> *********
> *********
> RETURN Nil
>
> METHOD Report() FROM TSocios
>
> *****
> *****
> RETURN Nil
>
> Por lo tanto serán exclusivos de él.
>
> Ahora lo que quieres tú.
>
> CLASS TFormCensos FROM TForm
>
> COMPONENT oDbfCensos
>
> METHOD AddNew( oSender )
>
> ENDCLASS
>
> //--------------------------------
> METHOD AddNew( oSender ) CLASS TFormCensos
>
> WITH OBJECT FormCensosNew():New( Self )
> :cText := "Agregar Nuevo"
> ::oDbfCensos:AddNew()
> :lAnadir := ::oDbfCensos:lOnAppend
> :ShowModal()
> IF :nModalResult == mrOK
> *
> ::oDbfCensos:Update()
> ELSE
> ::oDbfCensos:Cancel()
> ENDIF
> :END()
> END
>
> RETURN Nil
>
> //--------------------------------------
> CLASS FormCensosNew FROM TForm
>
> Data lAnadir
>
> METHOD FormShow()
>
> ENDCLASS
>
> //-------------------------------------
> METHOD FormShow( oSender ) FROM FormCensosNew
>
> IF lAnadir // True que es lOnAppend
> ***
> ***
> ***
> ENDIF
>
> o poner
> IF ::oParent:oDbfCensos:lOnAppend
> ENDIF
> o acceder a los campos de la base de datos declarada en el primer
> formulario:
> ::oParent:oDbfCensos:FieldGetByName("ANNO") + " " + ;
> ::oParent:oDbfCensos:FieldGetByName("N_ANILLA")
>
> END
>
> RETURN Nil
>
> Si cometo algún error siempre habrá alguien para sacarme de él.
>
> José Ramón Castro.
> ramonzea escribió:
>> Vaya no se si me explique bien:
>>
>> se supone que al hacer:
>> en TForm2:
>>
>> TForm1():New( Self ):Show() //Self = TForm2
>>
>> y por tanto puedo accesar datos de TForm2 en TForm1 utilizando ::oParent, es
>> asi no?
>>
>> creo que use la palabra erronea.
>>
>> Saludos.
>
--
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Cual es la diferencia?

Mensaje por zeasoftware »

IF lAnadir // True que es lOnAppend
se supone que si es ::lAnadir debe regresar nil
ahora si es ::oParent:lAnadir deberia dar .t.
??????????
o poner
IF ::oParent:oDbfCensos:lOnAppend //AQUI DONDE A MI ME DEVUELVE .F.
//A PESAR DEL ADDNEW
ENDIF
o acceder a los campos de la base de datos declarada en el primer
formulario:
::oParent:oDbfCensos:FieldGetByName("ANNO") + " " + ;
::oParent:oDbfCensos:FieldGetByName("N_ANILLA")
YO USO
::oParent:oDbfCensos:ANNO
Y FUNCIONA EXCELENTE.
SALUDOS.
--
Ramon Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
--
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Cual es la diferencia?

Mensaje por jrcpoli »

Ramón:
Perdona si se me olvidó poner los dos puntos es una Data.
IF ::lAnadir // regresa true está declarada como Data en el
formulario llamado.
CLASS FormCensosNew FROM TForm
Data lAnadir
Y es inicializada en el Formulario que llama.
WITH OBJECT FormCensosNew():New( Self )
:cText := "Agregar Nuevo"
::oDbfCensos:AddNew()
:lAnadir := ::oDbfCensos:lOnAppend
Respecto a lo segundo da igual poner lo que pones tú o yo, yo llamo a
los campos por el nombre con FieldGetByName por eso van entre comillas y
tu los llamas por referencia.
José Ramón Castro.
ramonzea escribió:
> IF lAnadir // True que es lOnAppend
> * se supone que si es ::lAnadir debe regresar nil*
> * ahora si es ::oParent:lAnadir deberia dar .t.*
> * ??????????*
>
> o poner
> IF ::oParent:oDbfCensos:lOnAppend *//AQUI DONDE A MI ME DEVUELVE .F. *
> * //A
> PESAR DEL ADDNEW*
> ENDIF
> o acceder a los campos de la base de datos declarada en el primer
> formulario:
> ::oParent:oDbfCensos:FieldGetByName("ANNO") + " " + ;
> ::oParent:oDbfCensos:FieldGetByName("N_ANILLA")
> YO USO
> ::oParent:oDbfCensos:ANNO
>
> Y FUNCIONA EXCELENTE.
>
> SALUDOS.
>
> --
> Ramon Zea
> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
> http://www.paginasprodigy.com/zeasoft/
>
José Ramón Castro.
Responder