Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
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
Código Delphi [-]
OtroQuery.Locate('campo',varcampo,[]);
2) Tener ese dato almacenado en un StrinList y recorrerlo hasta encontrarlo
Código Delphi [-]
for i:=0 to lista.count-1 do
 begin
   if lista[i]=varcampo then.... //etc 
 end;
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
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 10-03-2008 a las 20:27:31.
Responder Con Cita
  #2  
Antiguo 10-03-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
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:
Código Delphi [-]
With Lista Do
  ShowMessage(Strings[IndexOf(Elemento)]);
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 10-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
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:

Código Delphi [-]
With Lista Do
ShowMessage(Strings[IndexOf(Elemento)]);


Claro, pero con mas de 100 registros ya se hace mas lento, con 5000 ni hablar, y realmente no se como optimizar la situación. En vez de usar una tabla temporal, quizas me convenga usar una tabla mySQL.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #4  
Antiguo 11-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
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)
Código Delphi [-]
 
MiQuery.Insert;
try
  MiQuery.FieldByName('campo1').AsString:='Pepon';
  MiQuery.Post;
except
  MiQuery.Cancel;
end;

2)
Código Delphi [-]
 
MiQuery.Close;
MiQuery.SQL.Text:='INSERT INTO tabla...........values('pepon')';
MiQuery.ExecSQL;

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #5  
Antiguo 11-03-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Son exactamente lo mismo.

Quiere mejorar el rendimiento?, utiliza entonces procedimientos almancenados.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #6  
Antiguo 11-03-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

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.
Responder Con Cita
  #7  
Antiguo 11-03-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.271
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 11-03-2008
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 11-03-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.271
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ASAPLTDA Ver Mensaje
creo que la mejor solucion es usar un client data set almacena los datos en momoria pero con las posibilidades de una tabla
Pensándolo bien, estoy de acuerdo.
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).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 11-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
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
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #11  
Antiguo 12-03-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.271
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por mamu Ver Mensaje
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.
Los datos de esa segunda tabla los cargas en un TClientDataset en lugar de un Dataset normal, y eso provoca que todos los datos de esa segunda tabla se traigan al Cliente (a memoria), de forma que las búsquedas sobre esa segunda tabla no se hacen sobre el servidor de SQL sino sobre los datos que hay en memoria (utilizando un LOCATE, por ejemplos).

Hay que tener en cuenta cómo es de gande esa segunda tabla...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 13-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
SOLUCIONADO

Claro, esta muy bien. Lo probé y me funcionó más que bien.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
StringList: Modificar un item en particular NEG1414 C++ Builder 3 25-08-2007 20:26:50
Problema con StringList MaMu Varios 2 26-05-2007 21:40:45
Saltos de linea con stringlist JuanHC Internet 2 30-10-2006 11:25:13
Recorrer un StringList bustio Varios 2 27-02-2005 19:50:21
Limite del StringList victork_py Varios 8 11-05-2004 22:19:11


La franja horaria es GMT +2. Ahora son las 08:54:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi