Rafa,
Sinceramente, en Clipper / Harbour, en sitios MUY concretos usamos filtros, por su excesiva lentitud, aunque en otros hice algunas mejoras , como los indices CUSTOMS, donde solucioné
muchos problemas de rendimiento,
http://xthefull.blogspot.com.es/2014/02 ... er-to.html , y otros usando SCOPES, pasamos de generar un
listado de 25 minutos, a 10 segundos!!
Yo uso mucho tiempo esta técnica, pero con arreglos porque trabajan con ADS sin recuerdo no era posible.
El registro se pasa a una matriz y se ejecuta en la matriz de registro.
Esta técnica es posible con ADORDD no ordkeyadd sé si es apoyada por ADORDD. Tienes que probar.
Se que el objetivo es trabajar con SQL sin tocar el código actual, muchas gracias por este trabajo fantástico que estás haciendo, pero mi meta es valorar en términos de rendimiento,
y empezar a introducir pequeños test sobre tablas reales traspasadas desde DBF a MySQL, con miles de registros.
Con adordd puede utilizar con las funciones normales de cualquier RDD o podas utilizar SQL solo o una mezcla de ambos.
Las tablas de cada área son siempre ctualizadas por ADORDD.
ex
use CTable
replace xfiled with xValue
o
hb_adoRddGetConnection (
NWA): execute ("update....")
// Si no haces la resincronización al editar se mostrará este registro últmo la actualización.
En resumen, con ADORDD se puede trabajar directamente con SQL que será mucho más rápido, especialmente con filtros, etc.
Pieter Nobel está funcionando muy minucioso velocidad de la prueba entre las rutinas ADORDD y rutinas anuncios o rdd dbf.
Creo que va a publicar los resultados neste forum una vez concluido.
Lo que tengo una duda, en el código fuente se advierta del uso de la función hb_adoSetQuery() , lo cual para este test, me ha ido de perlas, porque el browse() sobre 600.000 registros,
los cual son seleccionados 6319, a sido resuelto en 0.75 segundos!!
Con SET FILTER, NO ES USABLE, en este contexto, por lo tanto, hay que ir cambiando , al menos, pequeños trozos de código.
puede utilizar la cláusula WHERE, pero los registros de consulta no trabajar como DBF RDD para que pueda hacerlo, pero hay que laterar código. EX
NREG: = RECNO () // esto asume que la inscripción está fuera del filtro
USO CTable
SET PARA FILTTER somevalue
GO TOP
GO NREG // esto fuera del filtro pero se puede acceder a él
NREG: = RECNO () // esto asume que la inscripción está fuera del filtro
USO CTable WHERE somevalue
GO TOP
GO NREG // no existe en la tabla
Veo en el codigo esto sobre la funcion hb_adoSetQuery()
"WE DONT USE GROUP BY BECAUSE RECORDSETS WITH THIS CALUSE DONT HAVE BOOKMARKS AND THUS NOT USABLE BY ADORD"
No entiendo muy bien a que se refiere, pero la pregunta es si hay algún tipo de problema de usarla.
Cuando controIa un conjunto de registros con GROUP BY o set no ofrece MARCADORES que son absolutamente indispensables para ADORDD.
Esto sucede con cualquier ADO CURSOR porque no hay correspondencia entre las filas agrupadas y filas de la tabla por lo que si usted abre una area con GROUP BY dan error.
En estos casos siempre se puede construir el conjunto de registros directamente a ADO pero no es capaz de asignar un área de trabajo.
También lo hace PIVOT.
Sin embargo esto ya no sucede si crearmos una tabla temporal para este resultado y aquí ahora pueden trabajar con la tabla temporal en un área de trabajo con ADORDD.
Resumiendo con ADORDD puede hacer todo lo que haces con qualuer rdd dbf y todo lo que usted hace con cualquier biblioteca de SQL o una mezcla de ambos.