![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola hgiacobone,
para lanzar la instrucción SQL uso un componente TADOCommand. La rutina que uso es la siguiente: Código:
Un saludo. |
|
#2
|
|||
|
|||
|
Hola Mario,
voy a intentar responderte a todo. Te vuelvo a explicar el problema que tengo: Tengo que rellenar una Tabla en Access con los datos que están en otra base de datos. El problema radica en que dicha base de datos es totalmente cerrada al acceso y lo único que me permite es, usando una libreria, leer secuencialmente la tabla de donde quiero obtener los datos. Leer secuencialmente la tabla origen con 100.000 registros y rellenar un fichero de texto con los campos que necesito tarda unos 5 minutos como mucho. Hacer insert mientras estoy leyendo la tabla pasa de media hora como poco. Para abrir la base de datos access uso componentes ADO. El código que probé para hacer los insert es similar al que he puesto como ejemplo en la respuesta que le he dado a hgiacobone. Inicio la transacción, hago todos los insert y al final hago el commit. El problema fundamental de todo esto, es que tiene que ser transparente para el usuario este proceso. Tengo que rellenar la tabla en access porque tengo que realizar procesos y calculos de registros que no puedo hacer directamente con la tabla origen. Y claro, decirle al usuario que se vaya a tomar un café mientras realizo la exportación no es una opción admisible. Si hubiera alguna forma de realizar la importación de los datos desde un fichero de texto a access, directamente, usando una secuencia SQL, me solucionaría la vida. Muchas gracias. Un saludo. |
|
#3
|
||||
|
||||
|
Una idea... Sería cuesión de probar a ver qué tal...
La improtación tada 5 minutos, eso no te lo quita nadie. Probar dos opciones: (a) Importar como hasta ahora. (b) Importar con un formato separado por comas. Desde access adjuntar (no importar) una tabla con formato texto (apuntando a tu fichero de texto); si es separado por comas se puede intentar con formato Excel. La idea es tener la tabla adjunta desde la Base de Datos Access. Menú de Archivo/Obtener Datos Externos/Vincular Tablas. Teniendo la tabla adjunta desde Access puedes generar una consulta (dentro de Access) del tipo SELECT INTO; Eso te haría el volcado de todos los datos en un sólo paso. Con ésto tendrás una consulta creada en Access (llamemósle Importar1) que te vuelca todos los Datos del TXT a una Tabla Access. Desde Delphi las consultas creadas en Access son accesibles como Stored Procedures, de forma que con el componente TADOStoredProc puedes "llamar" al Stored Procedure Importar1.
__________________
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. |
|
#4
|
||||
|
||||
|
Ok, ya me es claro. Bajo las circunstancias, es obvio que la lectura de los datos no es la parte lenta.
Puedes hacer pruebas jugando con el tamaño de la transaccion... en vez de volcar todo de una vez, lee registro a registro en tandas de , por ejemplo, 100 registros (cada 100 registros, haces un commit). Te lo digo porque en un caso similar con Visual FoxPro hacer un proceso parecido se demoraba bastate y jugando con el numero de registros de la transaccion se me soluciono (aunque no te lo aseguro para Acces). La otra es poner el proceso en un TThread (hilo) lo cual permitira que aunque el proceso se demore, el usuario no tenga que esperarlo. Con ambas tecnicas se deberia aliviar la situacion...
__________________
El malabarista. |
|
#5
|
|||
|
|||
|
Gracias Neftali y Mamcx. Voy a probar alguna de las ideas que me habeis dado y os contaré el resultado.
|
|
#6
|
||||
|
||||
|
Solo una pequeña observacion: el BeginTrans va fuera del Try, sino nunca salta.
Código:
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|