![]() |
Query vs. StringList
Query vs. StringList (matriz)
Si tengo que manejar 2 campos calculados, y en el evento OnCalcField, necesito ubicar un dato proveniente de otro query para realizar ese cálculo... que es más rapido: 1) Lanzar ese query y ubicar con LOCATE 2) Tener ese dato almacenado en un StrinList y recorrerlo hasta encontrarlo 3) Alguna recomendación o sugerencia que desconozca? OJO(izquierdo): que el query para calcular los campos viene de una tabla mySQL, pero la tabla con esos campos esta en memoria. OJO(derecho): más o menos, opero con un promedio de 5000 registros. Saludos |
El primero es mejor pues explotas las características de búsqueda del componente.
si aún así deseas usar el segundo prueba con esta forma optimizada:
|
Cita:
|
Estaba pensando, por ahi lo que me combiene, es trabajar directamente sobre una tabla mySQL, y evitar el OnCalcField, reemplazando todo el metodo por consultas y subconsultas, usando asignaciones y variables, etc.
Lo que me preocupa es la velocidad del proceso, cargando hasta 10000 registros. Que diferencia tengo entre usar: 1)
2)
Saludos |
Son exactamente lo mismo.
Quiere mejorar el rendimiento?, utiliza entonces procedimientos almancenados. |
Algo bueno sería lanzar una sola consulta Select donde cada fila de resultado correspondiera a una fila de la tabla de memoria. Pero claro, esta opción dependería de cómo están relacionados los datos y de si existe alguna condición que pueda aplicarse a la consulta para que arroje las filas tal y como queremos.
Como lo anterior es muy improbable, tener la lista de cadenas parece ser mejor opción, pero ¿cómo sabes qué valores colocar en la lista de cadenas? ¿la tabla de memoria siempre es la misma o presenta un patrón lógico común en cada ocasión que la creas? Tal vez he comprendido mal, pero me parece que indagando un poco más en tu caso podríamos encontrar una solución eficaz. Saludos. Al. |
La opción de lanzar un LOCATE para cada campo calculado va a ser lenta. En ese caso yo optaría por la búsqueda en la tabla en memoria. De topdas formas no me acaba de quedar clara ninguna de las dos soluciones.
Tal vez no entendí que qué iba la cosa... |
Usar un client dataset
Hola, creo que la mejor solucion es usar un client data set almacena los datos en momoria pero con las posibilidades de una tabla
|
Cita:
En principio mejor el TClientDataset que el TStringList; La única ventaja de este segundo sería el acceso por Find (que utiliza búsqueda dicotómica) y seguramente será más rápido que el locate (aunque se realice en memoria). |
A ver si entendí la sugerencia:
Lo mejor seria un ClienDataSet, con su Provider apuntado al Query que lanza la consulta a la otra tabla, y localizar el registro usando el método find? La situación es la siguiente, ya no uso tablas en memoria, opero directamente sobre el mySQL server, donde en un la tabla A, tengo 2 campos calculados, que se calculan en base a los datos de otra tabla. Saludos |
Cita:
Hay que tener en cuenta cómo es de gande esa segunda tabla... |
SOLUCIONADO
Claro, esta muy bien. Lo probé y me funcionó más que bien. Saludos |
La franja horaria es GMT +2. Ahora son las 09:18:33. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi