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 08-09-2010
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Ado Excel muchos datos

Estoy accediendo por medio de dos AdoQuery a dos hojas Excel y con una bucle recorriendo sus datos para automatizar un proceso. Cuando hay pocos datos funciona a la perfección, pero cuando pasan de las 5000 filas o menos la bucle es interminable. No da error pero se queda ahí pensando. Alguien sabría una solución? Saludos..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #2  
Antiguo 08-09-2010
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.269
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
¿Exactamente cual es el código del bucle? ¿Qué haces para cada fila?
No me parece que 5000 filas sean un número demasiado grande.
__________________
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
  #3  
Antiguo 08-09-2010
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Ahi va el codigo :
Código Delphi [-]
   adoXls1.First;
   while not adoXls1.Eof do
    begin
     if TryStrToInt(adoXls1.Fields[0].AsString, IntVal) = False  then
      Continue;
     adoXls2.First;
     while not adoXls2.Eof do
      begin
       if adoXls2.Fields[0].AsInteger = IntVal then
        begin
         cdsCommon1.Insert;
         cdsCommon1.Fields[1].AsString := adoXls1.Fields[0].AsString;
         cdsCommon1.Fields[0].AsInteger := adoXls2.Fields[0].AsInteger;
         cdsCommon1.Post;
         Break;
        end;
       adoXls2.Next;
      end;
     if adoXls2.Eof then
      begin
       cdsDiff1.Insert;
       cdsDiff1.Fields[1].AsString := adoXls1.Fields[0].AsString;
       cdsDiff1.Fields[0].AsInteger := adoXls2.Fields[0].AsInteger;;
       cdsDiff1.Post;
      end;
     Application.ProcessMessages;
     adoXls1.Next;
    end;
Lo q quiero es entre dos Excel y basado en un campo clave sacar los valores q tiene en comun y los q tiene uno pero el otro no tiene, no se si hay mejor manera
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #4  
Antiguo 08-09-2010
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.269
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 Delfino Ver Mensaje
Lo q quiero es entre dos Excel y basado en un campo clave sacar los valores q tiene en comun y los q tiene uno pero el otro no tiene, no se si hay mejor manera
Tal vez podrías utilizar un par de SQL's.
Haciendo la INNER JOIN de ambas por el campo clave deberías obtener sólo aquellos registros coincidentes.

Y una LEFT JOIN o RIGHT JOIN y luego preguntando por NULOS te permirta saber los que están en uno y en otro no.
__________________
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
  #5  
Antiguo 08-09-2010
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Los joins donde irian? en una tercera AdoQuery?
Son dos archivos Excel independientes uno del otro..

Tienes algun ejemplo?
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #6  
Antiguo 08-09-2010
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.269
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 Delfino Ver Mensaje
Los joins donde irian? en una tercera AdoQuery?
Son dos archivos Excel independientes uno del otro..
Tienes algun ejemplo?
Mi idea era realizar una query con la JOIN sobre los dos excels que tienes ahora, utilizando hojas como tablas; El problema es que ningu he probado a realizarlo con libros distintos.

Se trataría de utilizar un Query que hiciera directamente la INNER entre las 2 hojas de los dos libros.

En SQL Server y ADO funciona esta nomenclatura:

Código SQL [-]
Select A.*, B.* from [BASEDATOS1].dbo.TTabla1 AS A
INNER JOIN [BASEDATOS2].dbo.TTabla2 AS B 
ON A.ID=B.ID

Se trataría de intentar hacer lo mismo, pero en este caso (Excel) las Hojas corresponden a las tablas y los libros a las Bases de Datos.

La teoría es esa, pero nunca lo he probado y no si el driver de Excel admite esa sintasix.
__________________
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
  #7  
Antiguo 08-09-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Yo creo que el problema esta aqui...

Código Delphi [-]

{Al hacer continue se quedara siempre en el mismo registro, ya que el puntero de registro no se ha movido...
Sugiero antes de continue realizar un adoXls1.Next}
if TryStrToInt(adoXls1.Fields[0].AsString, IntVal) = False  then
begin
      adoXls1.Next;
      Continue;
end;

Saludos cordiales...
Responder Con Cita
  #8  
Antiguo 09-09-2010
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Yo creo que el problema esta aqui...
Efectivamente ahi estaba el problema. Corregido ahora todo el proceso se hace en menos de 15 segundos para mas de 20000 registros..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #9  
Antiguo 22-03-2011
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
conexion a excel con ADO

Tengo la necesidad de tomar información de excel y vi este tema, pero no veo como se usa ADO para conectarse a excel.
¿que se pone en el ADOConnection?
¿con que se accede, TADOTable?

Gracias por sus respuestas.
Responder Con Cita
  #10  
Antiguo 22-03-2011
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.269
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
Se hace de la misma forma en como te conectas a cualquier otra Base de Datos con ADO.
Te pongio una imagen para que veas los componentes. Lo único que cambia es la cadena de conexión.

Si buscas en los foros por "Excel ADO*" encontrarás muuuuchos temas al respecto.
Imágenes Adjuntas
Tipo de Archivo: png 090903_1.png (5,4 KB, 31 visitas)
__________________
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
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
Mostrar en un DBGRID Relacion Muchos Muchos dmassive SQL 6 12-02-2009 18:55:19
Problemas con generadores en relacion Muchos-a-Muchos Hagen Firebird e Interbase 3 30-10-2006 16:47:51
¿Cómo Mostrar muchos datos? Bauhaus1975 Varios 10 29-05-2006 13:15:07
creacion de base de datos - interbase - muchos Domains Patricio Conexión con bases de datos 4 02-12-2005 14:25:12
Mejorar velocidad de un SQL al consultar muchos datos. RONPABLO SQL 3 24-11-2005 18:10:02


La franja horaria es GMT +2. Ahora son las 22:02:29.


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