Hola,
Me estoy encontrado con un comportamiento que no se si es el correcto o no.
Desde el IDE:
En un formulario pongo un tdbBrowse. A ese tdbBrowse NO indico dataset.
Añado columnas. A cada columna escribo el nombre del campo en la propiedad
oDataField. Además, en algunas columnas sobreescribo el método ongetdata.
En el evento onInitialize del formulario creo el Dataset y lo asigno al
dbbrowse. Este dataset tiene exactamente los mismos campos, mismo orden y
nombre que el configurado en las columnas del dbbrowse.
El comportamiento que veo 'extraño' es:
a. Al ejecutar el programa me arroja un error:
TFRMCLIENTES:VISTARUTASASIGNADASCOLUMN1GETDATA(173)
Error BASE/1066 Error de argumento: conditional
Argumentos: ( [ 1] = Tipo: C Valor: )
Pila de llamadas:
TFRMCLIENTES:VISTARUTASASIGNADASCOLUMN1GETDATA (173)
TDBBRWCOLUMN:ONGETDATA (0)
TDBBRWCOLUMN:DATAHEIGHT (489)
TDBBROWSE:ADJUST (456)
TBROWSE:CREATE (369)
TDBBROWSE:CREATE (92)
TFRMCLIENTES:CREATEFORM (238)
TFRMCLIENTES:NEW (182)
Por lo que veo, entiendo que el OnGetData se dispara en el momento de la
creación de la columna. Entonces, como no tiene datos del dataset, envía
uno tipo carácter.
Esto me obliga a poner este código en el evento ongetdata de cada columna
(ojo, no he sabido solucionarlo mejor):
IF VALTYPE(Value) == "C"
RETURN NIL
ENDIF
b. Si durante la ejecución del programa, reasigno el dataset al dbbrowse da
la sensación de que se pierden los eventos programados. De hecho, en mis
pruebas, no se vuelven a disparar los ongetdata de cada columna.
Cualquier ayuda o aclaración será bienvenida.
SAludos y gracias,
José Luis Capel
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.
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.
dbBrowse y columas desde el IDE
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
dbBrowse y columas desde el IDE
José Luis,
> Por lo que veo, entiendo que el OnGetData se dispara en el momento de la
> creación de la columna. Entonces, como no tiene datos del dataset, envía
> uno tipo carácter.
Así es para poder saber el alto necesario de la misma. Normalmene el alto
sólo depende del font, pero es posible que le afecte una imagen a mostrar
que sólo se puede asignar a traves del evento OnGetData()
No obstante, quitare ese disparo de OnGetData que creo se puede evitar.
Mientras tanto, dale valor a oBrowse:nRowHeight y entonces no tendrá que
calcularlo.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:456590f2$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> Me estoy encontrado con un comportamiento que no se si es el correcto o
> no.
>
> Desde el IDE:
>
> En un formulario pongo un tdbBrowse. A ese tdbBrowse NO indico dataset.
> Añado columnas. A cada columna escribo el nombre del campo en la
> propiedad oDataField. Además, en algunas columnas sobreescribo el método
> ongetdata.
>
> En el evento onInitialize del formulario creo el Dataset y lo asigno al
> dbbrowse. Este dataset tiene exactamente los mismos campos, mismo orden y
> nombre que el configurado en las columnas del dbbrowse.
>
> El comportamiento que veo 'extraño' es:
>
> a. Al ejecutar el programa me arroja un error:
>
> TFRMCLIENTES:VISTARUTASASIGNADASCOLUMN1GETDATA(173)
> Error BASE/1066 Error de argumento: conditional
> Argumentos: ( [ 1] = Tipo: C Valor: )
> Pila de llamadas:
> TFRMCLIENTES:VISTARUTASASIGNADASCOLUMN1GETDATA (173)
> TDBBRWCOLUMN:ONGETDATA (0)
> TDBBRWCOLUMN:DATAHEIGHT (489)
> TDBBROWSE:ADJUST (456)
> TBROWSE:CREATE (369)
> TDBBROWSE:CREATE (92)
> TFRMCLIENTES:CREATEFORM (238)
> TFRMCLIENTES:NEW (182)
>
> Por lo que veo, entiendo que el OnGetData se dispara en el momento de la
> creación de la columna. Entonces, como no tiene datos del dataset, envía
> uno tipo carácter.
>
> Esto me obliga a poner este código en el evento ongetdata de cada columna
> (ojo, no he sabido solucionarlo mejor):
>
> IF VALTYPE(Value) == "C"
> RETURN NIL
> ENDIF
>
> b. Si durante la ejecución del programa, reasigno el dataset al dbbrowse
> da la sensación de que se pierden los eventos programados. De hecho, en
> mis pruebas, no se vuelven a disparar los ongetdata de cada columna.
>
> Cualquier ayuda o aclaración será bienvenida.
>
> SAludos y gracias,
> José Luis Capel
>
>
> Por lo que veo, entiendo que el OnGetData se dispara en el momento de la
> creación de la columna. Entonces, como no tiene datos del dataset, envía
> uno tipo carácter.
Así es para poder saber el alto necesario de la misma. Normalmene el alto
sólo depende del font, pero es posible que le afecte una imagen a mostrar
que sólo se puede asignar a traves del evento OnGetData()
No obstante, quitare ese disparo de OnGetData que creo se puede evitar.
Mientras tanto, dale valor a oBrowse:nRowHeight y entonces no tendrá que
calcularlo.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:456590f2$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> Me estoy encontrado con un comportamiento que no se si es el correcto o
> no.
>
> Desde el IDE:
>
> En un formulario pongo un tdbBrowse. A ese tdbBrowse NO indico dataset.
> Añado columnas. A cada columna escribo el nombre del campo en la
> propiedad oDataField. Además, en algunas columnas sobreescribo el método
> ongetdata.
>
> En el evento onInitialize del formulario creo el Dataset y lo asigno al
> dbbrowse. Este dataset tiene exactamente los mismos campos, mismo orden y
> nombre que el configurado en las columnas del dbbrowse.
>
> El comportamiento que veo 'extraño' es:
>
> a. Al ejecutar el programa me arroja un error:
>
> TFRMCLIENTES:VISTARUTASASIGNADASCOLUMN1GETDATA(173)
> Error BASE/1066 Error de argumento: conditional
> Argumentos: ( [ 1] = Tipo: C Valor: )
> Pila de llamadas:
> TFRMCLIENTES:VISTARUTASASIGNADASCOLUMN1GETDATA (173)
> TDBBRWCOLUMN:ONGETDATA (0)
> TDBBRWCOLUMN:DATAHEIGHT (489)
> TDBBROWSE:ADJUST (456)
> TBROWSE:CREATE (369)
> TDBBROWSE:CREATE (92)
> TFRMCLIENTES:CREATEFORM (238)
> TFRMCLIENTES:NEW (182)
>
> Por lo que veo, entiendo que el OnGetData se dispara en el momento de la
> creación de la columna. Entonces, como no tiene datos del dataset, envía
> uno tipo carácter.
>
> Esto me obliga a poner este código en el evento ongetdata de cada columna
> (ojo, no he sabido solucionarlo mejor):
>
> IF VALTYPE(Value) == "C"
> RETURN NIL
> ENDIF
>
> b. Si durante la ejecución del programa, reasigno el dataset al dbbrowse
> da la sensación de que se pierden los eventos programados. De hecho, en
> mis pruebas, no se vuelven a disparar los ongetdata de cada columna.
>
> Cualquier ayuda o aclaración será bienvenida.
>
> SAludos y gracias,
> José Luis Capel
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
dbBrowse y columas desde el IDE
Ignacio,
>
> No obstante, quitare ese disparo de OnGetData que creo se puede evitar.
> Mientras tanto, dale valor a oBrowse:nRowHeight y entonces no tendrá que
> calcularlo.
Gracias!! Así ya no aparece el error.
Y sobre el tema de que al reasignar el dataset al dbbrowse parece que se
pierden los enventos ongetdatas sobreescritos desde el IDE... ¿hay algo que
me he dejado por hacer?
Muchas gracias por tu ayuda.
José Luis Capel
>
> No obstante, quitare ese disparo de OnGetData que creo se puede evitar.
> Mientras tanto, dale valor a oBrowse:nRowHeight y entonces no tendrá que
> calcularlo.
Gracias!! Así ya no aparece el error.
Y sobre el tema de que al reasignar el dataset al dbbrowse parece que se
pierden los enventos ongetdatas sobreescritos desde el IDE... ¿hay algo que
me he dejado por hacer?
Muchas gracias por tu ayuda.
José Luis Capel
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
dbBrowse y columas desde el IDE
José Luis,
> Y sobre el tema de que al reasignar el dataset al dbbrowse parece que se
> pierden los enventos ongetdatas sobreescritos desde el IDE... ¿hay algo
> que me he dejado por hacer?
Cuando se vuelve asignar un dataset a un DbBrowse, éste se reinicializa
completamente perdiendo todas sus columnas.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45659774@news.xailer.com...]45659774@news.xailer.com...[/email]
> Ignacio,
>
>>
>> No obstante, quitare ese disparo de OnGetData que creo se puede evitar.
>> Mientras tanto, dale valor a oBrowse:nRowHeight y entonces no tendrá que
>> calcularlo.
>
> Gracias!! Así ya no aparece el error.
>
> Y sobre el tema de que al reasignar el dataset al dbbrowse parece que se
> pierden los enventos ongetdatas sobreescritos desde el IDE... ¿hay algo
> que me he dejado por hacer?
>
> Muchas gracias por tu ayuda.
> José Luis Capel
>
>
> Y sobre el tema de que al reasignar el dataset al dbbrowse parece que se
> pierden los enventos ongetdatas sobreescritos desde el IDE... ¿hay algo
> que me he dejado por hacer?
Cuando se vuelve asignar un dataset a un DbBrowse, éste se reinicializa
completamente perdiendo todas sus columnas.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45659774@news.xailer.com...]45659774@news.xailer.com...[/email]
> Ignacio,
>
>>
>> No obstante, quitare ese disparo de OnGetData que creo se puede evitar.
>> Mientras tanto, dale valor a oBrowse:nRowHeight y entonces no tendrá que
>> calcularlo.
>
> Gracias!! Así ya no aparece el error.
>
> Y sobre el tema de que al reasignar el dataset al dbbrowse parece que se
> pierden los enventos ongetdatas sobreescritos desde el IDE... ¿hay algo
> que me he dejado por hacer?
>
> Muchas gracias por tu ayuda.
> José Luis Capel
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
dbBrowse y columas desde el IDE
Ignacio,
Gracias por responder.
>
> Cuando se vuelve asignar un dataset a un DbBrowse, éste se reinicializa
> completamente perdiendo todas sus columnas.
>
Ok. Entendido.
Entonces... Concretamente un memdataset. Quiero cambiar el array del
dataset por otro, igual en estructura pero con otros datos. ¿Se puede hacer
sin hacer appends ni deletes?
Saludos y gracias
José Luis Capel
Gracias por responder.
>
> Cuando se vuelve asignar un dataset a un DbBrowse, éste se reinicializa
> completamente perdiendo todas sus columnas.
>
Ok. Entendido.
Entonces... Concretamente un memdataset. Quiero cambiar el array del
dataset por otro, igual en estructura pero con otros datos. ¿Se puede hacer
sin hacer appends ni deletes?
Saludos y gracias
José Luis Capel
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
dbBrowse y columas desde el IDE
José Luis,
oMemDS:Close()
oMemDS:Open( aNewData )
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=4565b4f8@news.xailer.com...]4565b4f8@news.xailer.com...[/email]
> Ignacio,
>
> Gracias por responder.
>>
>> Cuando se vuelve asignar un dataset a un DbBrowse, éste se reinicializa
>> completamente perdiendo todas sus columnas.
>>
>
> Ok. Entendido.
>
> Entonces... Concretamente un memdataset. Quiero cambiar el array del
> dataset por otro, igual en estructura pero con otros datos. ¿Se puede
> hacer sin hacer appends ni deletes?
>
> Saludos y gracias
> José Luis Capel
>
oMemDS:Close()
oMemDS:Open( aNewData )
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=4565b4f8@news.xailer.com...]4565b4f8@news.xailer.com...[/email]
> Ignacio,
>
> Gracias por responder.
>>
>> Cuando se vuelve asignar un dataset a un DbBrowse, éste se reinicializa
>> completamente perdiendo todas sus columnas.
>>
>
> Ok. Entendido.
>
> Entonces... Concretamente un memdataset. Quiero cambiar el array del
> dataset por otro, igual en estructura pero con otros datos. ¿Se puede
> hacer sin hacer appends ni deletes?
>
> Saludos y gracias
> José Luis Capel
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com