Unir tres tablas en una única salida que debe ser

Tengo que realizar un disco de salida de mi base que debe ser TXT. El archivo de salida debe contener la union de tres tablas por separado. Es decir el diseño de registro es el siguiente.
Tabla inicio (100 posiciones)
Tabla datos (100 posiciones)
Tabla final (100 posiciones).
He intentado realizar una macro con las tres consultas por separador, insertando cada una de ellas en una tabla temporal de un campo con 100 posiciones. No lo he logrado aun.

1 respuesta

Respuesta
1
Creo que puedo ayudarte, durante mucho tiempo he utilizado Access para crear archivos txt más o menos complejos de entrega a clientes a partir de tablas y consultas.
Si entiendo bien, tienes tres tablas y por cada una de ellas has de crear un archivo txt, esto es lo que voy intentar responderte, más adelante te mostraré alguna variación.
Básicamente hay que dar dos pasos,
a) montar el resultado sacarlo a txt, bien en una tabla o en un consulta, en principio da igual, la rapidez con lo que lo haga dependerá del número de registro y dificultad de cálculo en la consulta.
b) Exportar la consulta o tabla a txt, como bien dices mediante una macro, o mejor VBA (Access te puede generar el código VBA de este paso automáticamente desde la macro) que te permitirá más nivel de interacción con el usuario.
Vamos allá:
Antes de todo, si hablas de posiciones de registro, supongo que estás hablando de lo que Access llama importar/vincular o exportar txt de ancho fijo (no delimitado por caracteres). Si no estás acostumbrado a este procedimiento te aconsejo que hagas algunas pruebas con el asistente de importación/exportación de datos.
Sólo una cosilla antes de seguir, en los archivos de texto por posiciones es muy habitual utilizar un carácter para rellenar los campos hasta el tamaño deseado, habitualmente '0' 'ceros' por la izquierda con campos numéricos justificados a la derecha, y ' ', 'blanco', o 'espacio' por la derecha en campos tipo texto justificado a la izquierda. La justificación es la natural para lectura de texto (de izquierda a derecha relleno de espacios por la derecha), o de operaciones matemáticas con los números (con ceros a la izquierda y los número alineados a la derecha). No obstante este es un criterio general, lógicamente tiene prioridad el propio tuyo ante este general.
Profundizo un poco en esto, por que en el caso de texto con espacios a la derecha, una vez que lo tienes como quieres en la tabla, si tocas el registro bien en la tabla o en un formulario, Access le quita todos los espacios a la derecha por que entiende que le sobran. Para esto lo mejor es olvidarte de ello hasta que llegue el momento de exportarlo, y entonces automatices el relleno de espacios si te hace falta, crees la tabla temporal y exportes.
a) Al tener la tabla temporal no voy a entrar más, sólo en la parte de la automatización de los espacios, para los ceros se haría de manera similar. Te lo explico con una tabla, que se llama "TablaTxt", con un campo texto de 255 posiciones que se llama "CampoTxt" (no te preocupes por que tenga más, es mejor darle más ancho y controlar tú lo que sucede), esta es tu tabla temporal
Puedes hacerlo primeramente mediante una consulta de actualización sobre su tabla temporal. Usa este SQL:
UPDATE TablaTxt SET TablaTxt.CampoTxt = Left(Campotxt & '                                                                                                                                                           ',100);
Actualiza el CampoTxt a las primeras 100 posiciones por la izquierda con la función left Left(----;100) de la concatenación de CampoTxt y la cadena ' '
La cadena ' ' es un montón de espacios para rellenar por la derecha, ponle todos los que te hagan falta sin miedo a quedarte corto.
Para que lo veas mejor, en reemplazo en la cadena SQL los espacios por '-':
UPDATE TablaTxt SET TablaTxt.CampoTxt = Left(Campotxt & '-------------------------- ',100);
En el caso de número alineados a la derecha rellenos con ceros sería algo así:
UPDATE TablaTxt SET TablaTxt.CampoTxt = Right('00000000000000000' & CampoTxt,100);
Las diferencias son:
Left (...;100) por right(...;100)
(CampoTxt & '        ') por ('00000' & CampoTxt)
De esta manera tienes todos los registros de la tabla TablaTxt con 100 posiciones y formateado como quieras
b) Exportación de la tabla:
Lo primero que has de hacer es hacerlo primero, "a mano", con el asistente de exportación.
En la ventana de la base de datos, haz click derecho sobre la tabla y exportar...
En la ventana que se te abre, selecciona en el combo de abajo, archivo de texto
Aquí se te abre el asistente de exportación, sigue todos los pasos hasta conseguir la exportación que deseas:
Selecciona Ancho fijo, y continua.
Mi consejo es que si no lo has hecho nunca, hagas varias pruebas hasta dar con ello y conocer el funcionamiento de la exportación. En el botón de avanzado tienes el control sobre todas las opciones. Cuando lo abras, en tu caso de 100 posiciones, en la parte inferior le dices a Access que el campo CampoTxt inicia en 1 y finaliza en 100.
Este paso es importante, ya que todos estos parámetros de la exportación se pueden guardar en el mdb para aplicarlos cuando te hagan falta, Access llama a esto especificación de exportación. Una vez que hayas dado con los parámetros, guarda la especificación, por ejemplo con el nombre EspecifTxt100
Llegado este momento ya tienes todo lo que te hace falta, la tabla, y la especifiación para exportarla. Voy a explicarte como hacerlo mediante una macro
Escoge la acción: 'TransferirTexto'
Y con los parámetros siguientes:
Tipo de transferencia: 'Exportar ancho fijo'
Nombre de la especificación: 'EspecifTxt100', o el nombre que le hayas dado
Nombre de la tabla: 'TablaTxt' en este caso
Nombre del archivo: 'c:\...........\FileOut.txt', aquí pon el nombre que desees
Las tres siguientes, contiene nombre de campo, html y página de códigos, en principio no hace falta que pongas nada, sólo hazlo si realmente te hace falta de verdad.
Guardas la macro, y ya está.
Espero que te sea de ayuda
Algunos consejos:
- Si se trata de tres tablas con la misma definición de campos, de 100 posiciones, lo que yo haría es utilizar siempre la misma tabla TablaTxt: la vacías con una consulta de eliminación, la llenas y manipulas, y la exportas, así tendrás menos tablas temporales en la BD
- Si en la ventana de la base de datos haces click derecho sobre la macro y le das a guardar como módulo VBA, tendrá más control y facilidad de modificar la ruta del archivo txt que generas
- Si deseas que te lo exporte en un orden concreto, monta todas las consultas para tenerlo en ese orden. A la tablaTxt le habrás añadido un campo para conservar el orden, por ejemplo un autonumérico. Puedes exportar una consulta sobre esta tabla, y simplemente no exportar el campo que utilizas para el orden

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas