Access - Generar XML desde vba de access

 
Vista:

Generar XML desde vba de access

Publicado por Delfino Morales (1 intervención) el 23/08/2017 19:51:16
Hola, antes que nada espero estén bien. Me acerco a ustedes para pedir ayuda.

Quiero generar un xml desde access con vba, el xml quiero que tenga el siguiente esquema:

1
2
3
4
5
6
7
8
<?xml version="1.0' encoding="UTF-8">
<Items>
  <Item departmentFK="0" price="96" description="tortiglioni" pluCode="8076802085" cmd="update"/>
  <Item departmentFK="6" price="236" description="sugo olive" pluCode="8005360202" cmd="update"/>
  <Item departmentFK="115" price="175" description="risotto asparagi" pluCode="4015400031" cmd="update"/>
  <Item departmentFK="36" price="60" description="nescafe" pluCode="8013355000" cmd="update"/>
  <Item departmentFK="33" price="255" description="nesquik" pluCode="4002567205" cmd="update"/>
</Items>

todos los datos los quiero sacar de una tabla que esta dela siguiente manera.

DEPARTMENTO | PRECIO | DESCRIPCION | PLUCODE | CMD
48 | $399 | DE68201,EXPRESSO,26 | 7506232578599 | update
148 | $199 | DE30101,BLANCO,23.5 | 7506193675320 | update
148 | $199 | DE30101,BLANCO,24 | 7506193675337 | update
45 | $399 | DE15702,CHOCOLATE,24.5 | 7506296162734 | update
44 | $399 | DE61901,CHOCOLATE,28 | 7506232545416 | update


Por favor si me pueden dar una orientación se los agradeceré.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Oscar
Val: 196
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Generar XML desde vba de access

Publicado por Oscar (80 intervenciones) el 24/08/2017 12:11:30
Buenos días!

Bien... Lo primero que tienes que hacer es crearte un recordset para leer todos los registros. Y dentro de un bucle ir grabando al fichero xml el contenido de las variables, algo parecido a esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Dim rst As ADODB.Recordset
Dim cnx As ADODB.Connection
 
Open "c:\Mis Documentos\Fichero.xml" For Output As #1
 
Set rst = CreateObject("ADODB.Recordset")
cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Variable con la ruta a tu BBDD & ";Persist Security Info=False;"
rst.CursorLocation = adUseClient
rst.ActiveConnection = cnx
rst.Open "SELECT * FROM Mitabla", cnn, adOpenDynamic, LockType:=adLockReadOnly
 
GrabarXML("<?xml version="1.0' encoding="UTF-8">")
GrabarXML("<Items>")
 
'Bucle principal que lee los registros de la tabla
do until rst.EOF=True
     GrabarXML("<Item departmentFK=""" & rst!departamento & """ price=""" & rst!Precio & """ description=""" & rst!Descripcion & """ _
     & pluCode=""" & rst!plucode & """ cmd=""" & rst!cmd & """/>")
     rst.MoveNext
loop
 
GrabarXML("/<Items>")
 
Close #1
 
set rst = Nothing
set cnx = Nothing
 
'Graba el texto al fichero
Sub GrabarXML(Texto as string)
Write #1,Texto
End Sub
 
'Esta subrutina obtiene los nombres de los campos de la tabla para que puedas automatizarlo y puedas exportar cualquier tabla
Sub GrabarCamposDeLaTablaXML()
    Dim dbs As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Set dbs = OpenDatabase("Ruta a tu base de datos.mdb")
    Set tdf = dbs.TableDefs("Nombre de la tabla")
    For Each fld In tdf.Fields
        GrabarXML(fld.Name) 'GrabarXML será la subrutina que abrirá el fichero XML y añadirá el texto del nombre del campo
    Next
    Set fld = Nothing
    Set tdf = Nothing
    dbs.Close
End Sub

No lo he probado, pero te orientará bastante... XD

Saludos!
Óscar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Generar XML desde vba de access

Publicado por Emilio (232 intervenciones) el 24/08/2017 17:28:18
Hay mas formas de crear el Xml, aparte de ADO, puedes por ejemplo crearlo mediante la librería MSXML y lo puedes hacer de dos formas, como si fuera texto plano:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub pascual22()
Dim docxmldom  As Object
Dim muestra As String
    Set docxmldom = CreateObject("MSXML2.DOMDocument.3.0")
 
muestra ="<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf
 muestra = muestra &  "   <Items>" & vbCrLf
'Aquí poner bucle de tabla o formulario
Dim rst As DAO.Recordset
Set rst = Me.Nombreformulario.Form.RecordsetClone
.MoveFirst
Do Until .EOF
muestra = muestra &  "      < Item departmentFK=!DEPARTMENTO  price= !PRECIO description= DESCRIPCION  pluCode= !PLUCODE cmd=!CMD >”” & vbCrLf
    .MoveNext   'Nos movemos al siguiente registro
    Loop        'Volvemos al inicio  'Termina bucle
muestra = muestra & "   </Items>"
docxmldom.LoadXML muestra
docxmldom.Save "Tunombre.xml"
Set docxmldom = Nothing
End Sub

Creando cada nodo, usando createNode y el bucle para rellenar, ese no te pongo ejemplo. Una tercer forma es que access lo haga por ti, con el asistente y luego con una hoja de estilo trasformar su contenido como tu lo requieres.

Nota: Puedo tener errores en el código no esta probado hecho al vuelo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar