dudas con Arrays

dudas con Arrays

Postby mgsoft » Sun Oct 11, 2009 1:50 pm

Hola:

Tengo dos dudillas, a ver si por favor me podéis ayudar.

Primera, ¿hay alguna función rápida, mejor en C, que carge en un Array el contenido de un campo de una base de datos, para evitar hacer un DO while !eof()?.

Segunda, ¿hay alguna función que elimine los elementos duplicados de un Array?.

Mil gracias. :D
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: dudas con Arrays

Postby Antonio Linares » Sun Oct 11, 2009 6:44 pm

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41405
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: dudas con Arrays

Postby mgsoft » Mon Oct 12, 2009 5:04 pm

Antonio:

Gracias por responder, pero no veo de qué forma.

igualmente, ¿Hay alguna función para cargar el contenido de todo un campo de la DBF en el Array, para evitar esto (por lentitud)?

do while !eof()

aadd (array, FIELD->NOMBRE)

DBSKIP()

ENDDO


Muchas gracias :D
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: dudas con Arrays

Postby Armando » Mon Oct 12, 2009 5:19 pm

mgsoft:

Disculpa mi ignorancia, cual es la utilidad de cargar toda una DBF (10m 20m o 50m regs) a un array ?

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3084
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: dudas con Arrays

Postby Antonio Linares » Mon Oct 12, 2009 8:25 pm

DbEval( { || AAdd( array, FIELD->NOMBRE ) } )

recorre toda la DBF y añade el campo al array. Lo mismo que quieres hacer pero desde nivel C.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41405
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: dudas con Arrays

Postby mgsoft » Mon Oct 12, 2009 8:26 pm

Muchas gracias Antonio!!!.

Armando, lo que quiero es usar la clase TAutoGet, y por ejemplo que el programa complete automáticamente los conceptos, los apellidos, la localidad, etc. De ahí la necesidad de tener en un Array el contenido de algunas bases de datos.

El tener un array de varios megas, ¿ralentiza la aplicación?.

Gracias. :D
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: dudas con Arrays

Postby Marcelo Via Giglio » Mon Oct 12, 2009 10:28 pm

Mgsoft,

perdon por lo entrometido, pero no creo que ganes mucha velocidad, si tienes las tablas DBF con los indices adecuados, el TAutoGet funcionara bastante rapido. Ademas, imagina que tienes frecuentes actualizaciones de esa informacion, deberas tambien actualizar los arrays, y si estuvieras comportiendo la informacion, seria aun mas complejo.

Disculpa el atrevimiento

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1051
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: dudas con Arrays

Postby mgsoft » Tue Oct 13, 2009 12:22 pm

Marcelo:

Por favor, ningún problema en tu comentario, al contrario, pues me queda mucho que aprender.

La clase TAutoGet, hasta donde yo se, únicamente acepta un Array con los valores.

Creo que es muy útil que el programa autocomplete un campo (p. ej. apellidos, localidad, etc). No sé de qué otro modo se puede hacer.

Cualquier comentario será bienvenido. Gracias :D
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: dudas con Arrays

Postby Marcelo Via Giglio » Tue Oct 13, 2009 12:39 pm

MgSoft,

dejame buscar, yo tengo eso funcionando con base de datos, talvez, no la clase en si, pero de otra forma, por ultimo se modifica la clase.

busco y lo que encuentre lo publico

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1051
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: dudas con Arrays

Postby VPOZO » Tue Oct 13, 2009 3:24 pm

Hola compañero me parece que lo que quieres hacer lo puedes lograr usando el DBCOMBO que hace un combobox con campos de una tabla, busca el ejemplo dbctest.prg o el testdbc1.prg.

ojala te sirva..
User avatar
VPOZO
 
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Re: dudas con Arrays

Postby Marcelo Via Giglio » Tue Oct 13, 2009 4:22 pm

Hola,

mira este codigo, de esta manera lo hice

Code: Select all  Expand view
 
            REDEFINE BMPGET oGet VAR cResponsable ID 102 OF oDlg BCOLOR CLR_BLACK, CLR_YELLOW ;
            UPDATE WHEN ! job $ "anul,del,view,anul";
            PICTURE "@!"

            oGet:bPostKey := {|oGet, cBuffer| setResponsable( oget ) }

//------------------------------------------------------------------------------
FUNCTION setResponsable( oGet )
//------------------------------------------------------------------------------

   LOCAL nPosItem   := 0                              // Text position into ::aItems
   LOCAL nPosCursor := oGet:nPos                      // Current cursor position
   LOCAL nLength    := LEN(oGet:cText)                // Text length
   LOCAL cStartTxt  := LEFT(oGet:cText, nPosCursor-1) // Start text (position 1 to cursor position -1)
   LOCAL cItem      := ""
   LOCAL nKey       := 0

   nKey := oGet:nLastKey

   DO CASE
      CASE nKey == VK_TAB .or. ;
           nKey == VK_RETURN .or. ;
           nKey == VK_DELETE
           oGet:Assign()           // Assign typed text
      CASE nKey >= 32 .And. nKey <= 256
           responsables -> ( DBEXIST( cStartTxt, "nombre", .T. ) )
           cItem := responsables -> nombre
              IF LEFT( cItem, LEN(cStartTxt) ) = cStartTxt
                 nLength := LEN( RTRIM( cItem ) )
                 cItem   += SPACE( nLength - LEN(cItem) )
                 oGet:SetText( cItem )
                 oGet:SetSel( nPosCursor -1, nLength) // Select found text
                 oGet:oGet:Buffer = PAD( cItem, LEN( oGet:oGet:Buffer ))
                 RETURN(.t.)
              ENDIF
           oGet:HideSel()   // Text not found -> Undo selected text
   ENDCASE

   RETURN( .T. )
 


El DBEXIST es una funcion propia, pudes reemplazarla por un DBSEEK. Si te das cuenta esto es parte de la clase de Maurilio, entonces esa misma clase podrias modificarla para que en lugar de utilizar arrays puedas utilizar una tabla, claro que la idea es que se parametrice para generalizar

Espero te ayude.

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1051
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 29 guests