SORT

Post Reply
User avatar
LuisPonce
Posts: 190
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU
Contact:

SORT

Post by LuisPonce »

Hola

Alguien sabe la diferencia entre el __DbSort() y el SORT on .. TO ..

Descrubri que sorteando una tabla de 18,000 registros con el SORT ON TO, demora bastante tiempo 3 minutos o mas, y usando la __DbSort() lo hace en 2 segundos, y no encuentro literatura que me de una razon logica.

Hace alguna diferencia abrir la tabla con sus indices ?

Gracias
Luis Ponce
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: SORT

Post by karinha »

// Fuente del xHarbou

Code: Select all

FUNCTION __dbSort( cToFileName, aFields, bFor, bWhile, nNext, nRecord, lRest,;
         cRDD, nConnection, cCodePage )
 LOCAL nOldArea
 LOCAL nToArea
 LOCAL aStruct

 LOCAL oError
 LOCAL lError := .F.

 IF Empty( aStruct := dbStruct() )
   RETURN .F.
 ENDIF

 nOldArea := Select()

 BEGIN SEQUENCE

   dbCreate( cToFileName, aStruct, cRDD, .T., "", NIL, cCodePage, nConnection )
   nToArea := Select()
   dbSelectArea( nOldArea )
   __dbArrange( nToArea, aStruct, bFor, bWhile, nNext, nRecord, lRest, aFields )

 RECOVER USING oError
   lError := .T.
 END SEQUENCE

 IF nToArea != NIL
   dbSelectArea( nToArea )
   dbCloseArea()
 ENDIF

 dbSelectArea( nOldArea )

 IF lError
   Break( oError )
 ENDIF

 RETURN .T.

 

rsalu2
João Santos - São Paulo - Brasil
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: SORT

Post by karinha »

Luis, porfa, muestra la sintaxe de como tu hice el sort usando _dbsort()

gracias, salu2
João Santos - São Paulo - Brasil
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: SORT

Post by karinha »

SELE &NUM_AREA

USE &VARQUIVO EXCLUSIVE

*----- metodo direto ------ __dbsort(arq2,{ordem},NIL,NIL,NIL,NIL,.f.)

Code: Select all

   DBSORT( ARQ_SORT, ORIG_SORT, NIL, NIL,NIL, NIL,.f. ) 
 
Creo que usando INDEX ON... TEMPORARY // de xharbour sea bién más rápido.
João Santos - São Paulo - Brasil
User avatar
LuisPonce
Posts: 190
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU
Contact:

Re: SORT

Post by LuisPonce »

Gracias Karinha

Quedó asi:

USE "clientes" SHARED NEW
__dbsort("COPIACLT.DBF",{FIELD->NOMBRE})

USE
Luis Ponce
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: SORT

Post by karinha »

LuisPonce wrote:Gracias Karinha

Quedó asi:

USE "clientes" SHARED NEW
__dbsort("COPIACLT.DBF",{FIELD->NOMBRE})

USE

Luis, asi é más rápido mismo?? Tiens certezca??
João Santos - São Paulo - Brasil
User avatar
LuisPonce
Posts: 190
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU
Contact:

Re: SORT

Post by LuisPonce »

Si Karinha

Ahora es mucho mas rapido, antes lo hacia asi:

* Clientes

USE "CLIENTES" SHARED Alias Cliente NEW
Cliente->(OrdSetFocus(1))

SORT ON NOMBRE TO WORK3431

Cliente->(DbCloseArea())

ocasionaba una demora considerable, son aprox. 18,000 registros en tres minutos Un Escandalo !!

Quedó asi:

USE "clientes" SHARED NEW
__dbsort("COPIACLT.DBF",{FIELD->NOMBRE})

USE

Ahora demora 2 a 3 segundos
Luis Ponce
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: SORT

Post by karinha »

Gracias Luis, voy hacer pruebas.
João Santos - São Paulo - Brasil
User avatar
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Re: SORT

Post by quique »

Según std.ch, la situación es así:

Code: Select all

#command SORT [TO <(f)>] [ON <fields,...>] ;
              [FOR <for>] [WHILE <while>] [NEXT <next>] ;
              [RECORD <rec>] [<rest:REST>] [ALL] [CODEPAGE <cp>] => ;
         __dbSort( <(f)>, { <(fields)> }, ;
                   <{for}>, <{while}>, <next>, <rec>, <.rest.>, , , <cp> )
 
Así que en teoría es lo mismo, tal vez la velocidad disminuye porque ahora no utilizas

Cliente->(OrdSetFocus(1))

prueba el primer ejemplo sin esa línea y agregasela al segundo, tal vez influya.
Saludos
Quique
Post Reply