Anónimo
Importar archivos xml
Tengo 250 ficheros xml, construidos con acrobat con sus correspondientes campos, cada uno es un registro y necesito tenerlos todos en una sola tabla en una bd Access,
Como lo puedo importar, lo he intentado y solo veo la forma de hacerlo de uno en uno, tiene que haber otra manera.
Como lo puedo importar, lo he intentado y solo veo la forma de hacerlo de uno en uno, tiene que haber otra manera.
1 respuesta
Respuesta de josecmf
2
2
josecmf, Access. Monopuesto y multipuesto. Más de 13 años de experiencia
Los pasos serían los siguientes:
- Define la tabla donde se tiene que importar esa información.
- Crea una función cuyo parámetro sea la ruta del fichero y que anexe los datos a la tabla anterior.
- Una vez que te funcione la función, genera un fichero txt con la ruta de todos tus ficheros. Puedes hacerlo en msdos, con la instrucción dir *.xml > listado.txt
- Utilizando ese listado, genera una tabla con todas las rutas.
- Crea una función que vaya leyendo esta ultima tabla, y ejecute la primera función que hiciste para cada ruta.
Como veo que eres experto, quizá te baste este esquema. Si te atascan en algo dime.
- Define la tabla donde se tiene que importar esa información.
- Crea una función cuyo parámetro sea la ruta del fichero y que anexe los datos a la tabla anterior.
- Una vez que te funcione la función, genera un fichero txt con la ruta de todos tus ficheros. Puedes hacerlo en msdos, con la instrucción dir *.xml > listado.txt
- Utilizando ese listado, genera una tabla con todas las rutas.
- Crea una función que vaya leyendo esta ultima tabla, y ejecute la primera función que hiciste para cada ruta.
Como veo que eres experto, quizá te baste este esquema. Si te atascan en algo dime.
Lo siento, veo que se me queda grande.
Me defiendo mejor con Excel, que cuando importas un xml, habiendo definido el esquema previamente, te permite coger muchos ficheros xml a la vez, volcandolos todos de una tacada.
¿No se puede hacer algo parecido con access?
Si puedes te agradecería más detalles de la función, no acabo de pillarlo.
Tengo la tabla ya definida con los mismos campos que contienen datos personales. Nombre, apellidos, dirección, teléfono, etc, y gracias por tu tiempo.
Me defiendo mejor con Excel, que cuando importas un xml, habiendo definido el esquema previamente, te permite coger muchos ficheros xml a la vez, volcandolos todos de una tacada.
¿No se puede hacer algo parecido con access?
Si puedes te agradecería más detalles de la función, no acabo de pillarlo.
Tengo la tabla ya definida con los mismos campos que contienen datos personales. Nombre, apellidos, dirección, teléfono, etc, y gracias por tu tiempo.
Se puede hacer algo parecido. Primero importas uno de los ficheros. Una vez que has definido la importación, al final, Access te da la posibilidad de grabarlo. Por ejemplo, ImportacionInicial.
Después has de ejecutar esa importación, pero indicando la ruta de otro fichero. Eso se hace con la función TransferText.
Una vez que lo has conseguido para una, se trata de automatizarlo, para los 250. Por eso te sugería lo de la tabla con todas las rutas y una pequeña función que fuera leyendo el valor de ruta y ejecutando el TransferText para cada uno.
A ver si con esto te arreglas. Es algo avanzado y hay que programar algo, pero creo que no se puede hacer más sencillo.
Pruébalo y si te ves con dificultades dime.
Después has de ejecutar esa importación, pero indicando la ruta de otro fichero. Eso se hace con la función TransferText.
Una vez que lo has conseguido para una, se trata de automatizarlo, para los 250. Por eso te sugería lo de la tabla con todas las rutas y una pequeña función que fuera leyendo el valor de ruta y ejecutando el TransferText para cada uno.
A ver si con esto te arreglas. Es algo avanzado y hay que programar algo, pero creo que no se puede hacer más sencillo.
Pruébalo y si te ves con dificultades dime.
Lo siento, te lo agradezco mucho, pero mis conocimientos de programación no son muy buenos que digamos, te entiendo lo de la ruta, lo de hacer un dir, pero luego no se pasarlo a código.
Lo necesitaría más detallado y no quiero abusar de tu tiempo.
Lo haré desde excel y luego importare desde access el xls, pero reconozco que me hubiera gustado saber hacerlo.
Lo necesitaría más detallado y no quiero abusar de tu tiempo.
Lo haré desde excel y luego importare desde access el xls, pero reconozco que me hubiera gustado saber hacerlo.
Ok. Intentalo en Excel. Si no te sale fácil, dímelo, me lo mandas al correo en Access y te lo hago yo.
Más adelante, cuando aprendas un poco más de Access (porque este gusanillo no se olvida), intentalo de nuevo y te echo una mano.
No olvides cerrar la pregunta.
Más adelante, cuando aprendas un poco más de Access (porque este gusanillo no se olvida), intentalo de nuevo y te echo una mano.
No olvides cerrar la pregunta.
Me has picado, ya lo tengo hecho ayudándome de excel.
Indicame los pasos y el código, sin prisas, ya he salvado la situación y por supuesto le doy prioridad a tu tiempo.
Te cuento:
-En C:\Prueba, tengo los ficheros xml y un fichero de texto "listado.txt" con la lista de las rutas de los xml.
En la BD Prueba, tengo ya un fichero xml importado, sin problemas y tengo una tabla que me he creado con el fichero txt con la lista de las rutas.
¿Cómo ves me falta el código, y saber como lo ejecuto, desde un botón de formulario o algo así?
Gracias una vez más.
Indicame los pasos y el código, sin prisas, ya he salvado la situación y por supuesto le doy prioridad a tu tiempo.
Te cuento:
-En C:\Prueba, tengo los ficheros xml y un fichero de texto "listado.txt" con la lista de las rutas de los xml.
En la BD Prueba, tengo ya un fichero xml importado, sin problemas y tengo una tabla que me he creado con el fichero txt con la lista de las rutas.
¿Cómo ves me falta el código, y saber como lo ejecuto, desde un botón de formulario o algo así?
Gracias una vez más.
Vale. Comenzamos.
Capitulo I
Asumo que cuando importaste ese fichero XML, guardaste los parámetros de importación cuando ACCESS te preguntó al final. Si no lo hiciste, borra los datos de la tabla donde importas, vuelve a importar y guardalo.
Crea un formulario, y en el un botón, y le das cancelar cuando te salga el asistente. Después en las propiedades del botón, vete a la pestaña eventos, y dale doble click a los tres puntos que aparecen a la derecha en el evento Al hacer Click, y escoge generar código.
Te abre el editor de visual basic en la función que se ejecutará cuando tú le das al botón.
Escribe:
DoCmd. TransferText acImportDelim, "NombreDeImportacionGuardada", "nombreTablaDondeimportas", "rutacompleta de uno de los ficheros"
Para ver el significado de cada parámetro, mira en la ayuda, pero seguro que lo entenderás. Guarda y cierra el editor de VB
Borra los datos de la tabla donde importaste anteriormente.
Vamos al formulario del botón, aprieta el botón y si todo está bien, habrá importado los datos del fichero que le dijiste.
Y si es así (Murphy existe...) vamos al capitulo II...
Capitulo I
Asumo que cuando importaste ese fichero XML, guardaste los parámetros de importación cuando ACCESS te preguntó al final. Si no lo hiciste, borra los datos de la tabla donde importas, vuelve a importar y guardalo.
Crea un formulario, y en el un botón, y le das cancelar cuando te salga el asistente. Después en las propiedades del botón, vete a la pestaña eventos, y dale doble click a los tres puntos que aparecen a la derecha en el evento Al hacer Click, y escoge generar código.
Te abre el editor de visual basic en la función que se ejecutará cuando tú le das al botón.
Escribe:
DoCmd. TransferText acImportDelim, "NombreDeImportacionGuardada", "nombreTablaDondeimportas", "rutacompleta de uno de los ficheros"
Para ver el significado de cada parámetro, mira en la ayuda, pero seguro que lo entenderás. Guarda y cierra el editor de VB
Borra los datos de la tabla donde importaste anteriormente.
Vamos al formulario del botón, aprieta el botón y si todo está bien, habrá importado los datos del fichero que le dijiste.
Y si es así (Murphy existe...) vamos al capitulo II...
¿A ver hablamos de Access 2003?
Si es así, Abro la BD, Archivo obtener datos externos, Importar, tipo de archivo xml, me abre una ventana donde veo la estructura del xml, aceptar y me crea la tabla con un registro, hasta ahí bien, pero en ningún momento me pregunta ni me da opción a guardar parámetros de importación ni nada.
Si es así, Abro la BD, Archivo obtener datos externos, Importar, tipo de archivo xml, me abre una ventana donde veo la estructura del xml, aceptar y me crea la tabla con un registro, hasta ahí bien, pero en ningún momento me pregunta ni me da opción a guardar parámetros de importación ni nada.
No. Hablamos de Access 2007.
¿Es posible que cambies?
Porque si no, la estrategia es completamente diferente.
¿Es posible que cambies?
Porque si no, la estrategia es completamente diferente.
Imposible cambiar a Access 2007. Me estaba haciendo un lío.
Lo siento.
Lo siento.
Si quieres lo podemos hacer en 2003.
De hecho, yo no solía utilizar la función que te dije.
Como veas.
De hecho, yo no solía utilizar la función que te dije.
Como veas.
Yo por mi encantado.
Ya sabes tengo la bd preparada, con la tabla donde importe los xml, la tabla con las rutas,
y ganas de aprender.
Gracias.
Ya sabes tengo la bd preparada, con la tabla donde importe los xml, la tabla con las rutas,
y ganas de aprender.
Gracias.
Ok.
Te pongo la función que abre un fichero en una ruta dada y recorre el fichero línea a línea.
Public Sub ImportarFichero(Ruta As String)
Dim MidBD as Database
Set MiBD = CurrentDB
On Error GoTo Err_IMPORTAR_Click
If Ruta <> "" Then
Close #1
Open Ruta For Input As #1 ' Abre el archivo.
Do While Not EOF(1) ' Busca el fin del archivo.
Line Input #1, Linea ' Lee la línea de datos.
' Aquí trabajar con la variable linea con sentencias del tipo:
' If Mid(Linea, 1, 1) = "," Then
' para ir asignando los valores leidos a variables locales de esta función...
Loop
Close #1
Una vez que has leído el fichero a variables locales, debes anexarlas a la tabla con una orden SQL del estilo de lo siguiente:
strConsulta = "INSERT INTO Tabla (Campo1, Campo 2, Campo 3) "
"SELECT " & VariableLocal1 & " AS Campo1, " & _
VariableLocal2 & " AS Campo2, " & _
VariableLocal3 & " AS Campo3;
MiBD.Execute strConsulta
Exit_IMPORTAR_Click:
Exit Sub
Err_IMPORTAR_Click:
MsgBox Err.Description
Resume Exit_IMPORTAR_Click
End Sub
Este es el esquema de la función. ¿Lo intentas con estas ideas? Me ayudaría que me enviaras la BD y algún fichero XML de los que tienes a mi correo: [email protected].
Te pongo la función que abre un fichero en una ruta dada y recorre el fichero línea a línea.
Public Sub ImportarFichero(Ruta As String)
Dim MidBD as Database
Set MiBD = CurrentDB
On Error GoTo Err_IMPORTAR_Click
If Ruta <> "" Then
Close #1
Open Ruta For Input As #1 ' Abre el archivo.
Do While Not EOF(1) ' Busca el fin del archivo.
Line Input #1, Linea ' Lee la línea de datos.
' Aquí trabajar con la variable linea con sentencias del tipo:
' If Mid(Linea, 1, 1) = "," Then
' para ir asignando los valores leidos a variables locales de esta función...
Loop
Close #1
Una vez que has leído el fichero a variables locales, debes anexarlas a la tabla con una orden SQL del estilo de lo siguiente:
strConsulta = "INSERT INTO Tabla (Campo1, Campo 2, Campo 3) "
"SELECT " & VariableLocal1 & " AS Campo1, " & _
VariableLocal2 & " AS Campo2, " & _
VariableLocal3 & " AS Campo3;
MiBD.Execute strConsulta
Exit_IMPORTAR_Click:
Exit Sub
Err_IMPORTAR_Click:
MsgBox Err.Description
Resume Exit_IMPORTAR_Click
End Sub
Este es el esquema de la función. ¿Lo intentas con estas ideas? Me ayudaría que me enviaras la BD y algún fichero XML de los que tienes a mi correo: [email protected].
Te mandé un correo privado no se si lo has visto.
Gracias.
Gracias.
Si, pero el sentido de esta página es que otros aprovechen también de las consultas, por eso, salvo asuntos profesionales, no acepto bases de datos para trabajarlas por mi cuenta.
Intenta asimilar y trabajar con el código que te envié y sobre eso vamos viendo.
Intenta asimilar y trabajar con el código que te envié y sobre eso vamos viendo.
Ya he visto tu correo.
Por supuesto que te pedí la base de datos, para resolverlo, pero ya lo pudiste hacer tú en Excel. Ahora, que se trata de aprender, no tiene mucho sentido que te la haga yo, ¿verdad?
No entiendo muy bien lo de tu mosqueo, y más releyendo todo lo de arriba, pero por favor, si no vas a seguir el hilo de la pregunta, ciérrala para que otros puedan hacer preguntas.
Por supuesto que te pedí la base de datos, para resolverlo, pero ya lo pudiste hacer tú en Excel. Ahora, que se trata de aprender, no tiene mucho sentido que te la haga yo, ¿verdad?
No entiendo muy bien lo de tu mosqueo, y más releyendo todo lo de arriba, pero por favor, si no vas a seguir el hilo de la pregunta, ciérrala para que otros puedan hacer preguntas.
- Compartir respuesta
- Anónimo
ahora mismo