Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2005
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 50
Poder: 20
Toñico Va por buen camino
Carga rápida de datos en Access

Hola a todos, tengo un gran problema de lentitud a la hora de hacer una carga masiva de datos en access, os cuento mi problema.

Estoy usando Delphi 6 y para conectarme con Access uso componentes ADO.

Tengo que cargar datos en una tabla de access desde una tabla de otra base de datos, a la cual sólo puedo acceder usando una libreria que me obliga a leer los registros de forma secuencial. El problema es la cantidad de registros que contiene la tabla, unos 100.000 registros, y que el usuario tiene que esperar a que termine este proceso para continuar trabajando con la aplicación.

La solución que estoy usando hasta ahora es:
1 - Genero un fichero de texto plano con los registros exportados.
2- Usando un componente BatchMove copio el fichero de texto a un fichero DBF con la misma estructura.
3- Uso una secuencia SQL de inserción para grabar los registros en la tabla de access.

Este proceso con 125000 registros tarda menos de 10 minutos en hacerlo.

Si intento grabar directamente registro a registro usando secuencias INSERT contra la tabla de access el proceso me tarda mas de una hora en hacerlo.

Ahora la pregunta ¿Existe alguna forma de agilizar este proceso sin tener que usar ficheros intermedios como estoy haciendo?

Muchas gracias a todos de antemano.

Un saludo.
Responder Con Cita
  #2  
Antiguo 07-04-2005
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.286
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 Toñico
...Si intento grabar directamente registro a registro usando secuencias INSERT contra la tabla de access el proceso me tarda mas de una hora en hacerlo...
Posiblemente en éste caso, sea más rápido realizarlo desde la tabla (Append y Post con los controles DataAware desactivados) que con un INSERT.
__________________
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 07-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
A mi un proceso similar Dbf hacia Db (Pardox), 60.000 registros más o menos me tardan 15 minutos, utilizo incluso una barra de progreso.

No ataco directamente la tabla DBf sino que lanzo un SQL Select *.

El post solamente lo hago despues de añadir el último registro.

Pienso que uno de los problemas en los que interviene esta lentitud, son los índices que tenga la tabla destino.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 07-04-2005
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 50
Poder: 20
Toñico Va por buen camino
Gracias Neftali, aunque he hecho una prueba de rendimiento haciendo 1000 insert contra 1000 append .. post y es el doble de rápido ejecutando secuencias sql de inserción.
Responder Con Cita
  #5  
Antiguo 07-04-2005
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 50
Poder: 20
Toñico Va por buen camino
Gracias Marcoszorrilla. La tabla que estoy llenando tiene un solo índice que además es clave primaria. La última parte que realizo cuando paso el fichero DBF a access no le cuesta mas de 1 minuto ya que puedo lanzar la consulta SQL que haga la inserción de usa sola vez. Uso la siguiente secuencia:

INSERT INTO Tabla SELECT * FROM fichero_dbf IN "{ruta del fichero}" "dBASE IV;"

Si hubiera una secuencia similar pero que el fichero origen fuera un fichero de texto, me salvaría la vida.
Responder Con Cita
  #6  
Antiguo 02-05-2005
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
Casualmente yo nececito hacer algo similar.
Para ejecutar esa instrucción SQL, utilizas un ADOConnection+ADODataSet y para la tabla DBF un TTable común?
No logro que funcione esa instruccion, hay algún error en las comillas o los string que mostraste?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
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


La franja horaria es GMT +2. Ahora son las 01:34:16.


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