FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour SORT
Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
SORT
Posted: Tue Apr 09, 2013 03:38 PM

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
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: SORT
Posted: Tue Apr 09, 2013 04:06 PM
// Fuente del xHarbou

Code (fw): Select all Collapse
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 - Phone: +55(11)95150-7341
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: SORT
Posted: Tue Apr 09, 2013 04:10 PM

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

gracias, salu2

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: SORT
Posted: Tue Apr 09, 2013 04:14 PM
SELE &NUM_AREA

USE &VARQUIVO EXCLUSIVE

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

Code (fw): Select all Collapse
   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 - Phone: +55(11)95150-7341
Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
Re: SORT
Posted: Tue Apr 09, 2013 05:42 PM

Gracias Karinha

Quedó asi:

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

USE

Luis Ponce
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: SORT
Posted: Tue Apr 09, 2013 06:28 PM
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 - Phone: +55(11)95150-7341
Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
Re: SORT
Posted: Wed Apr 10, 2013 04:28 AM

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
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: SORT
Posted: Wed Apr 10, 2013 12:27 PM

Gracias Luis, voy hacer pruebas.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: SORT
Posted: Wed Apr 10, 2013 09:35 PM
Según std.ch, la situación es así:

Code (fw): Select all Collapse
#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

Continue the discussion