FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Pocket PC Estructuras
Posts: 186
Joined: Sat Oct 08, 2005 07:32 AM
Estructuras
Posted: Sat Dec 02, 2006 12:51 PM

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

Saludos

Toni Sales
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Estructuras
Posted: 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
Posts: 186
Joined: Sat Oct 08, 2005 07:32 AM
Estructuras
Posted: Mon Dec 04, 2006 01: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

Continue the discussion