Página 1 de 1

Uso de OnGetData

Publicado: Dom Nov 07, 2004 4:10 am
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
--

Uso de OnGetData

Publicado: Dom Nov 07, 2004 3:22 pm
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
--

Uso de OnGetData

Publicado: Dom Nov 07, 2004 7:14 pm
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
--

Uso de OnGetData

Publicado: Dom Nov 07, 2004 7:55 pm
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

Uso de OnGetData

Publicado: Dom Nov 07, 2004 7:58 pm
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