Page 1 of 1

Estructuras

Posted: Sat Dec 02, 2006 12:51 pm
by tsales
Antonio
¿Es posible utilizar tExtruc en FWPPC? ¿Hash()?

Saludos

Posted: Sun Dec 03, 2006 10:10 am
by Antonio Linares
Toni,

> ¿Es posible utilizar tExtruc en FWPPC?

En principio sólo tienes que coger la clase de FWH y añadirla a tu proyecto FWPPC.

> ¿Hash()?

Para qué lo necesitas ? Por favor muéstranos un ejemplo de como lo usas en tu programa, gracias.

Posted: Mon Dec 04, 2006 1:16 pm
by tsales
Antonio
Los hash los estoy utilizando con FWH + xHarbour y son tremendamente prácticas como alternativa a los arrays y con las pruebas que hemos realizado son mucho más rápidas que la utilización de arrays por medio de ADD + ASCAN.

Adjunto un ejemplo del uso de HASH para acceder al registro de una Tabla utilizando HASH.
La utilizamos como alternativa a la TDATABASE con muchas menos opciones pero treméndamente más rápida.

=======================================
Function AddFields( lAppendBlank, lBloqueaReg, lDateVacio, oOwner )

LOCAL oDatos, n, uDatoVacio, cAlias := Select()
DEFAULT lAppendBlank:= .T.
DEFAULT lBloqueaReg := .F.
DEFAULT lDateVacio := .F.
DEFAULT oOwner:= oApWnd:oDlg

lBloqueaReg := IF(lAppendBlank,.F.,lBloqueaReg)
oDatos := HSetCaseMatch(Hash(),.F.)
HashAddMember( { "cAlias" },"C", ALIAS(Select()), oDatos )
HashAddMember( { "nRecno" },"N", (cAlias)->(RECNO()) , oDatos ) // Registro actual
HashAddMember( { "lAppendBlank" },"L", lAppendBlank, oDatos )
HashAddMember( { "lRecnoBloqueado" },"L", lBloqueaReg , oDatos )
HashAddMember( { "nRecnoBloqueado" },"N", IF(lBloqueaReg, (cAlias)->(RECNO()),0) , oDatos )
FOR n = 1 to (cAlias)->(FCOUNT())
IF lAppendBlank
IF ValType( (cAlias)->(FieldGet(n)) ) = 'N'
uDatoVacio := VAL( STR(0, Len( Str( (cAlias)->(FieldGet(n))))))
ELSEIF ValType( (cAlias)->(FieldGet(n) )) = 'C'
uDatoVacio := Space( Len( (cAlias)->(FieldGet(n) ) ) )
ELSEIF ValType( (cAlias)->(FieldGet(n) )) = 'L'
uDatoVacio := .F.
ELSEIF ValType( (cAlias)->(FieldGet(n) )) = 'D'
uDatoVacio := IF(lDateVacio, CTOD("//"), Date() )
ENDI
ENDIF
HashAddMember( { "OBJ" + (cAlias)->(FIELDNAME(n)) },"O",,oDatos )
HashAddMember( { "VAR" + (cAlias)->(FIELDNAME(n)) },;
IF(ValType( (cAlias)->(FieldGet(n)) )="C","S", ValType( (cAlias)->(FieldGet(n) ))),;
IF(!lAppendBlank, (cAlias)->(FIELDGET(n)) , uDatoVacio),oDatos )
NEXT n
HSetAutoAdd(oDatos,.f. )

IF lBloqueaReg
oDatos:lRecnobloqueado:= (cAlias)->(DBRLOCK( oDatos:nRecnoBloqueado ))
ENDI
RETURN oDatos
=======================================

Por otro lado preguntaba la posibilidad de usar estructuras para modificar estas funciones en caso de no poder disponer de los HASH pero con la clase TStruct creo que seria complicado para mi llegar a generar lo mismo.

Saludos