Page 1 of 1

estructura de datos

PostPosted: Wed Sep 24, 2008 7:59 pm
by jponce
Hola nuevamente a todos en el foro,

Tengo un problema actualmente estoy trabajando en una aplicacion que tiene el siguiente segmento de programación.
DEFINE STRUCT oServi
STRUCT FIELD "nofactura" INIT 0
STRUCT FIELD "fecha" INIT Space(10)
STRUCT FIELD "vendedor" INIT 0
STRUCT FIELD "marcav" INIT space(30)
STRUCT FIELD "idplaca" INIT space(30)
STRUCT FIELD "color" INIT space(30)
STRUCT FIELD "obs" INIT space(100)
STRUCT FIELD "agencia" INIT 0
STRUCT FIELD "serie" INIT space(2)
END STRUCT

Lo que me permite es trabajar una estructura de datos como si fuera una dbf por ejemplo

oServicios := TMsTable():New( oDb, "ordenserv" )
cSql := "select no_factura,fecha,id_vendedor,marcav,id_placa,color,obs,id_agencia,serie from ordenserv where "
cSql += "nit = '"+oBase:FieldGet(1)+"'"
cSql += "order by fecha desc"
if !oServicios:Open( cSql )
return( nil )
endif

oServicios:GoTop:Read()
While !oServicios:Eof()
oServi:Blank()
oServi:nofactura := oServicios:Fieldget(1)
oServi:fecha := oServicios:Fieldget(2)
oServi:vendedor := oServicios:Fieldget(3)
oServi:marcav := oServicios:Fieldget(4)
oServi:idplaca := oServicios:Fieldget(5)
oServi:color := oServicios:Fieldget(6)
oServi:obs := oServicios:Fieldget(7)
oServi:agencia := oServicios:Fieldget(
oServi:serie := oServicios:Fieldget(9)
oServi:Insert()
oServicios:Fetch()
end

oServi:GoTop()

y siquiero modificar
while !oServi:Eof()
if oServi:noFactura = 12345

oServi:marcav := "Mazda"
oServi:Save()

endif

oServi:Skip()
End





con esto lo que hago es llenra la estructura con una consulta, la cuestion es que quite varias librerias del archivo de compilacion hasta que encontre una libreria que es la que contiene esta clase para poder trabajar de esta forma, el problema es que no tengo los fuentes de esa libreria y necesito separar la aplicacion para otro segmento y no quiero compilar esta libreria.

Alguien conoce esta forma de hacer estructuras?

de antemano muy agradecido

Atentamente,
Julio Ponce

PostPosted: Thu Sep 25, 2008 4:05 pm
by Antonio Linares
Julio,

xHarbour te proporciona soporte de estructuras, parecidas a las que usas. Aqui tienes un ejemplo:
Code: Select all  Expand view
#include "hbstruct.ch"

function Main()

    local oServi

    STRUCTURE oServi
       MEMBER "nofactura" INIT 0
       MEMBER "fecha" INIT Space(10)
       MEMBER "vendedor" INIT 0
       MEMBER "marcav" INIT space(30)
       MEMBER "idplaca" INIT space(30)
       MEMBER "color" INIT space(30)
       MEMBER "obs" INIT space(100)
       MEMBER "agencia" INIT 0
       MEMBER "serie" INIT space(2)
    ENDSTRUCTURE

    MsgInfo( "ok" )

return nil

FWH tambien proporciona soporte de estructuras pero está orientado a construir estructuras para pasarlas como parámetros a funciones en C:
Code: Select all  Expand view
#include "FiveWin.ch"
#include "struct.ch"

function Main()

    local oStruct

    STRUCT oRect
       MEMBER nLeft   AS LONG
       MEMBER nTop    AS LONG
       MEMBER nRight  AS LONG
       MEMBER nBottom AS LONG
    ENDSTRUCT

    MsgInfo( oRect:ClassName() )

return nil

De todas formas, como me comentastes, si necesitas que esas estructuras hagan más cosas, lo idóneo es que te construyas una Clase propia, salvo que encuentres los CH y PRGs que usabas.

Estructura de Datos

PostPosted: Thu Sep 25, 2008 6:35 pm
by jponce
Gracias solo con una consulta mas, me parece bien la idea de utilizar la estructura de xHarbour, pero como hago para insertar,modificar y recorrer la estructura.

de Antemano muy agradecido

Antonio Linares wrote:Julio,

xHarbour te proporciona soporte de estructuras, parecidas a las que usas. Aqui tienes un ejemplo:
Code: Select all  Expand view
#include "hbstruct.ch"

function Main()

    local oServi

    STRUCTURE oServi
       MEMBER "nofactura" INIT 0
       MEMBER "fecha" INIT Space(10)
       MEMBER "vendedor" INIT 0
       MEMBER "marcav" INIT space(30)
       MEMBER "idplaca" INIT space(30)
       MEMBER "color" INIT space(30)
       MEMBER "obs" INIT space(100)
       MEMBER "agencia" INIT 0
       MEMBER "serie" INIT space(2)
    ENDSTRUCTURE

    MsgInfo( "ok" )

return nil

FWH tambien proporciona soporte de estructuras pero está orientado a construir estructuras para pasarlas como parámetros a funciones en C:
Code: Select all  Expand view
#include "FiveWin.ch"
#include "struct.ch"

function Main()

    local oStruct

    STRUCT oRect
       MEMBER nLeft   AS LONG
       MEMBER nTop    AS LONG
       MEMBER nRight  AS LONG
       MEMBER nBottom AS LONG
    ENDSTRUCT

    MsgInfo( oRect:ClassName() )

return nil

De todas formas, como me comentastes, si necesitas que esas estructuras hagan más cosas, lo idóneo es que te construyas una Clase propia, salvo que encuentres los CH y PRGs que usabas.

PostPosted: Thu Sep 25, 2008 8:24 pm
by Antonio Linares
Julio,

Entiendo que cuando te refieres a "insertar,modificar y recorrer la estructura" de alguna forma tienes asociada esa estructura a una base de datos ó a un recordset de ADO, si ?

Una estructura no tiene ninguna relación con una base de datos. Es una forma de organizar la información.

Por eso te indico que lo idóneo es crearte la Clase que necesites en el caso de que no localices el código fuente que de la Clase que estás usando.

Has podido encontrar "DEFINE STRUCT" en alguno de tus ficheros CH ? Tiene que estar ó no podrias compilarlo. Otra opción, como te indiqué, es que compiles con /p para que genere un fichero .ppo y dentro veamos en que se traduce ese comando.

La clase se llama TArray

PostPosted: Thu Sep 25, 2008 9:34 pm
by derpipu
Hola, esa clase de la que hablas se llama TArray, si gustas mandame un correo y te la hago llegar..

Saludos

Liga de Descarga TArray

PostPosted: Thu Sep 25, 2008 9:44 pm
by derpipu
Hola no se quien sea el creador de esta clase, ni me acuerdo de donde la saque, asi que solo aclaro que no es mia..

Saludos

[url]
http://www.4shared.com/file/64476829/2a ... d=f7cf9d59
[/url]

PostPosted: Fri Sep 26, 2008 6:36 am
by Maurizio
With xHarbour you cann use HASH

aDati := TAssociativeArray()
aDati:c1 := "WWWW"
aDati:c2 := "eeeeee"

You cann simulate Scatter and gather of the record

//-------------------------------------------------------------------------
FUNCtion Scatter()
Local aVars := {=>}
LOcal nField := FCount()
LOcal nX := 1
FOR nX := 1 TO nField
aVars[FIELDNAME(nX)] := FieldGet(nX)
NEXT
RETURN aVars

Function Gather(aVars)
lOCAL Nx := 1

FOR Nx := 1 TO LEN(aVars)
FieldPut(nX,aVArs[FIELDNAME(nX)] )
NEXT


RETUrn TRUE


Maurizio

PostPosted: Fri Sep 26, 2008 8:09 am
by Antonio Linares
Bueno, ya que ha aparecido, guardémosla bien para que no se pierda :-)

www.fivetechsoft.com/files/utilities/tarray.rar

PostPosted: Mon Sep 29, 2008 7:31 pm
by toninhofwi
xHarbour te proporciona soporte de estructuras, parecidas a las que usas.


Olá Antonio.

Added to Harbour (Adicionado ao Harbour ):

2008-09-29 13:11 UTC-0300 Antonio Carlos Pantaglione
<toninho@fwi.com.br>
* contrib/xhb/common.mak
* contrib/xhb/makefile
+ contrib/xhb/hbstruct.ch
+ contrib/xhb/hbstruct.prg
+ STRUCTURE / MEMBER / ENDSTRUCTURE support


Regards,

Toninho.

PostPosted: Mon Sep 29, 2008 9:09 pm
by Antonio Linares
Toninho,

Bien! :-)

gracias,

Re: Liga de Descarga TArray

PostPosted: Tue Sep 30, 2008 7:00 pm
by jponce
Gracias Luis fernando,


Esta clase tiene lo que necesito, y gracias tambien Antonio y por supuesto ya la tengo guardada para que no se pierda.

Atentamente,
Julio Rodrigo Ponce Hinestroza
www.suproye.com



derpipu wrote:Hola no se quien sea el creador de esta clase, ni me acuerdo de donde la saque, asi que solo aclaro que no es mia..

Saludos

[url]
http://www.4shared.com/file/64476829/2a ... d=f7cf9d59
[/url]

PostPosted: Tue Sep 30, 2008 7:18 pm
by Armando
JPonce:

Por ahí tambien existe una clase TPUblic(), Desconozco quien sea el autor aunque se mencionan varios nombres, OSCAR CHACON, RAY ISLAS, EDUARDO RIZZOLO, DANIEL ANDRADE, tal vez tambien te pueda servir.

Saludos