Estructuras

Estructuras

Postby tsales » Sat Dec 02, 2006 12:51 pm

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

Saludos
Toni Sales
tsales
 
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Postby Antonio Linares » Sun Dec 03, 2006 10:10 am

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
User avatar
Antonio Linares
Site Admin
 
Posts: 42117
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby tsales » Mon Dec 04, 2006 1:16 pm

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
tsales
 
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am


Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 13 guests