Estructuras

Post Reply
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Estructuras

Post by tsales »

Antonio
¿Es posible utilizar tExtruc en FWPPC? ¿Hash()?

Saludos
Toni Sales
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post 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
Toni Sales
Post Reply