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.

Uso de OnGetData

Foro público de Xailer en español
Responder
rcardenas
Mensajes: 55
Registrado: Lun Oct 11, 2004 2:11 am

Uso de OnGetData

Mensaje por rcardenas »

Hola
Estoy tratando de pasarle un valor a OnGetData al construir un TBrwColumn pero me manda un error en tiempo de Ejecución.
Utilizo el Siguiente Codigo para generar los Browse
cCampo := ::oDataSetF:NOmCamp // Con el nombre de un campo de una DBF
With Object oCol := TBrwColumn():New( oSender )
:cHeader := ...
:oDataField := ...
:nAlignment := ...
:nWidth := ...
:cPicture := ...
If ::oDataSetF:TpoCamp = "L" // Si el Campo es de tipo Logic
vCampo := "::oDataSet:" + cCampo // Le asigno el oDataSet y el Nombre del Campo
// Si uso esta linea me manda error
// :OnGetData := { | o, c, n| iif( @vCampo, (c := "Si", n := 1),(c := "No", n := 2) ) }
// Si uso esta otra linea donde indico directamente el Campo (Declara) NO me manda error
:OnGetData := { | o, c, n| iif(::oDataSet:Declara, (c := "Si", n := 1),(c := "No", n := 2) ) }
Endif
End With
oSender:AddCol( oCol )
::oDataSetF:Skip()
EndDo
--
Saludos

Raúl Eduardo Cárdenas S.
Law & Accounting System's, Inc.
Gerente General
Celular: (507) 672-8838
Email: rcardenas@fgs2002.com
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 11/01/2004
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Uso de OnGetData

Mensaje por jfgimenez »

Raúl,
cambia esto:
vCampo := "::oDataSet:" + cCampo
:OnGetData := { | o, c, n| iif( @vCampo, (c := "Si", n := 1),(c := "No", n := 2) ) }
por:
:OnGetData := {| o,c,n | iif( ::oDataSet:FieldGet( ::oDataSet:FieldPos( cCampo ) ), (c := "Si", n := 1), (c := "No", n := 2 ) ) }
--
Un saludo,
José F. Giménez
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
rcardenas
Mensajes: 55
Registrado: Lun Oct 11, 2004 2:11 am

Uso de OnGetData

Mensaje por rcardenas »

José
Muchas gracias por la ayuda, ya funciona pero de la siguiente manera:
If ::oDataSetF:TpoCamp = "L"
vCampo := cCampo
:OnGetData := { | o, c, n| iif(::oDataSet:FieldGet( ::oDataSet:FieldPos( vCampo ) ), (c := "Si", n := 1), (c := "No", n := 2 ) ) }
Endif
Al utilizar cCampo me mandaba error, puesto que este se carga en un ciclo Do While !eof() y al evaluar la función toma el ultimo valor del archivo.
Al asignar vCampo := cCampo pero solo cuando el tipo el lógico "L" se mantiene el valor del campo con la limitante de solo poder tener un campo lógico por Browse.
Si sabes una mejor manera, maravilloso, por lo pronto me funciona muy bien.
--
Saludos

Raúl Eduardo Cárdenas S.
Law & Accounting System's, Inc.
Gerente General
Celular: (507) 672-8838
Email: rcardenas@fgs2002.com
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:418e3085$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
Raúl,
cambia esto:
vCampo := "::oDataSet:" + cCampo
:OnGetData := { | o, c, n| iif( @vCampo, (c := "Si", n := 1),(c := "No", n := 2) ) }
por:
:OnGetData := {| o,c,n | iif( ::oDataSet:FieldGet( ::oDataSet:FieldPos( cCampo ) ), (c := "Si", n := 1), (c := "No", n := 2 ) ) }
--
Un saludo,
José F. Giménez
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 11/01/2004
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Uso de OnGetData

Mensaje por jfgimenez »

Raúl,
no sé si te habré entendido bien lo que quieres hacer...
Si lo que pretendes es mostrar en un browse cualquier tabla, y que los
campos lógicos se muestren con "Si" o "No" en vez de "T" o "F", puedes poner
simplemente:
IF :oDataField:cType == "L"
:OnGetData := {| o, c, n | c := IIF( o:Value, "Si", "No" ) }
ENDIF
Piensa que el primer parámetro que recibes en el evento es el datafield.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Uso de OnGetData

Mensaje por jfgimenez »

Raúl,
perdona, me he equivocado:
> IF :oDataField:cType == "L"
> :OnGetData := {| o, c, n | c := IIF( o:Value, "Si", "No" ) }
> ENDIF
IF :oDataField:cType == "L"
:OnGetData := {| o, c, n | c := IIF( o:oDataField:Value, "Si", "No" ) }
ENDIF
> Piensa que el primer parámetro que recibes en el evento es el datafield.
Lo que se recibe es el oBrwCol, que tiene una propiedad oDataField.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder