dudas con Arrays

Post Reply
User avatar
mgsoft
Posts: 398
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

dudas con Arrays

Post by mgsoft »

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

Re: dudas con Arrays

Post by Antonio Linares »

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mgsoft
Posts: 398
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: dudas con Arrays

Post by mgsoft »

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
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: dudas con Arrays

Post by Armando »

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

Re: dudas con Arrays

Post by Antonio Linares »

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
mgsoft
Posts: 398
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: dudas con Arrays

Post by mgsoft »

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
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: dudas con Arrays

Post by Marcelo Via Giglio »

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
User avatar
mgsoft
Posts: 398
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: dudas con Arrays

Post by mgsoft »

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
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: dudas con Arrays

Post by Marcelo Via Giglio »

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
User avatar
VPOZO
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Re: dudas con Arrays

Post by VPOZO »

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..
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: dudas con Arrays

Post by Marcelo Via Giglio »

Hola,

mira este codigo, de esta manera lo hice

Code: Select all

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