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
SORT
SORT
Luis Ponce
Re: SORT
// Fuente del xHarbou
rsalu2
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
Re: SORT
SELE &NUM_AREA
USE &VARQUIVO EXCLUSIVE
*----- metodo direto ------ __dbsort(arq2,{ordem},NIL,NIL,NIL,NIL,.f.)
Creo que usando INDEX ON... TEMPORARY // de xharbour sea bién más rápido.
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. )
João Santos - São Paulo - Brasil
Re: SORT
Gracias Karinha
Quedó asi:
USE "clientes" SHARED NEW
__dbsort("COPIACLT.DBF",{FIELD->NOMBRE})
USE
Quedó asi:
USE "clientes" SHARED NEW
__dbsort("COPIACLT.DBF",{FIELD->NOMBRE})
USE
Luis Ponce
Re: SORT
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
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
Re: SORT
Según std.ch, la situación es así:
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.
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> )
Cliente->(OrdSetFocus(1))
prueba el primer ejemplo sin esa línea y agregasela al segundo, tal vez influya.
Saludos
Quique
Quique