Datos duplicados agrupados en una nueva tabla

A tod@s,

Tengo un archivo TXT con datos separados por ";". El campo DNI se puede encontrar (o no) duplicado pero los datos de una línea pueden ser complementarios (o no) a otra. La tabla inicial (con duplicados) quedaría así:

La tabla final tendría 5 campos adicionales de tipo booleano para poder poner los datos complementarios. En el registro 383 vemos que en Ob tiene el valor CX ó CY y el 382 el valor C1 ó C5, por ejemplo, en la tabla final quedaría:

Por favor, leed los archivos que adjunto a ver si podéis echarme una mano.

Gracias.

Leeme

Datos

2 Respuestas

Respuesta
1

Es sencillo. Si tengo la tabla donde puedes ver que están el 382 y el 383.

En la ventana de base de datos hago clic con el botón derecho sobre el nombre de la tabla y pulso Copiar y Pegar. Cuando me aparezca la ventana elijo Sólo estructura.

En el diseño de esa nueva tabla el campo DNI lo hago clave.

Luego con la tabla original hago una consulta de datos anexados como

Como el campo DNI es clave no lo puede repetir, por lo que me aparecerá una ventana avisándome de que no puede anexar todos(es lógico). Le digo que me la ejecute de todas formas y voila

Puedes ver que el 383 ha desaparecido, y que de 584 registros se ha quedado en 551 porque el resto no los ha anexado.

Respuesta
1

No sé si la respuesta de Julian te servirá de algo, pero aquí tienes un ejemplo hecho "a lo rápido" que creo cumple con todos los casos que citas en el documento adjunto. Y digo creo, porque tengo alguna duda en el caso de los registros "repetidos". Ya me dirás cuando lo revises si hay que afinarlo algo o no...

http://www.filebig.net/files/EL9xxshLem 

Lo que he hecho en el archivo es:

1º/ Importo el txt a una nueva tabla "TodoExpertos" siguiendo el asistente de datos externos. (Esto se podría programar en el botón)

2º/ Al pulsar el botón del formulario, voy analizando, caso a caso y en el mismo orden que en el word los registros y se van pasando a la tabla TFinal, y rellenando a la vez el campo o campos booleano/s correspondiente/s.

3º/ Para ello uso consultas de inserción de datos del tipo INSERT INTO SELECT, donde la parte del select son consultas de selección según los criterios que indicas, y que puedes ver en la BD en las consultas 2 a 5. Éstas son las consultas para los casos no repetidos

4º/ La consulta 6 devuelve los datos con DNI repetidos, y a partir de ella, en el código del botón, analizo los casos e inserto a la tabla. He supuesto que SIEMPRE habrá solo 2 registros "repetidos" (si no fuera así, esa parte del código no serviría). Además, la comparación entre dos "usos" igual no siempre funciona tal cual está el código, porque al ser textos, 01/21 va a ser menor que 12/20.... Esto se podría solucionar de dos formas, o registrando en uso primero el año y luego el mes, o registrando fechas completas, o modificando el código para analizar por un lado los dos primeros caracteres (el mes) y por otro los dos últimos (el año)

En fin, después de todo este rollo, espero te sirva para resolver, si no todo, gran parte de tu problema, y orientarte para otros casos que te puedan surgir.

Buenos días,

Julián, muchísimas gracias por tu pronta respuesta. No es lo que busco pero te lo agradezco; tanto por el esfuerzo como por la inmediatez.


Sveinbjorn, tu respuesta me va a llevar un buen rato para destripalar y, posiblemente, pedirte algo más de información. Tiene muy buena pinta y creo que se va "casi" a ajustar a lo que necesito.

Podrías, por favor, el código que tú usarías para obtener los datos desde el archivo TXT (colocado en un subdirectorio donde está el access. Por ejemplo \MisDatos) para compararlo con la porquería que yo he hecho?

El punto 4º casi me creo capacitado para solucionarlo yo ... ya veremos.

Muchas gracias

Puedes usar DoCmd. TransferText, pero para que te funcione perfectamente, lo mejor sería que hicieras una primera importación manual (siguiendo el asistente), configurando bien todas las opciones de importación, guardes, en el último paso esa importación y luego, cuando la necesites, uses DoCmd. RunSavedImportExport.

Obviamente, en ese caso, el archivo de texto se tiene que llamar siempre igual al que has usado en la primera importación.

Ah, los códigos:

DoCmd. TransferText acImportDelim,, "nombreTabla", Application. CurrentProject. Path & "\MisDatos\NombreArchivo.txt", True

A mi con tu archivo de texto esta opción no vuelca bien los datos ni a una tabla nueva ni a una existente. Tampoco mejora la cosa si guardo la especificación de importación y uso acImportFixed en vez de acImportDelim.

Si la importación la guardas como "ImportaTXT":

DoCmd. RunSavedImportExport "ImportaTXT"

Esta opción me funciona sin problemas siempre.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas