Página 1 de 1

dbBrowse y columas desde el IDE

Publicado: Jue Nov 23, 2006 1:16 pm
por jose.luis
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

dbBrowse y columas desde el IDE

Publicado: Jue Nov 23, 2006 1:37 pm
por ignacio
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
>
>

dbBrowse y columas desde el IDE

Publicado: Jue Nov 23, 2006 1:44 pm
por jose.luis
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

dbBrowse y columas desde el IDE

Publicado: Jue Nov 23, 2006 1:55 pm
por ignacio
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
>
>

dbBrowse y columas desde el IDE

Publicado: Jue Nov 23, 2006 3:50 pm
por jose.luis
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

dbBrowse y columas desde el IDE

Publicado: Jue Nov 23, 2006 4:44 pm
por ignacio
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
>