Creare xml da tabella access

di il
9 risposte

Creare xml da tabella access

Ciao a tutti,
devo creare un file xml, che servirà per importare dati su un altro software, contenente i dati contenuti in una tabella del mio database.
Sono riuscito a creare correttamente il tracciato per xml ma non riesco a collegare i dati della Tabella1 che estraggo con una query.
Il codice è:

Private Sub Comando0_Click()
Dim Dom As DOMDocument
Dim sSQL As String
Dim db As Database
Dim rst As DAO.Recordset
Dim Istat_pr As String
Dim A As String

Set db = CurrentDb
Istat_pr = InputBox("Inserire codice ISTAT della Provincia")
sSQL = "SELECT Tabella1.email FROM Tabella1 WHERE Tabella1.provincia=" & Istat_pr & ""
Set rst = db.OpenRecordset(sSQL, dbOpenDynaset)

......
Set Frag2 = Dom.createDocumentFragment
Set Frag2 = Dom.createElement("email")
Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)
Frag.appendChild Frag2 'dico che Frag2 è figlio di Frag

Frag2.Text = rst 'qui inserisco il dato estratto dalla tabella
Set Frag2 = Nothing
Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)
.....
rst.Close
Set rst = Nothing
db.Close
Set db = Nothing

End Sub


Grazie mille in anticipo

9 Risposte

  • Re: Creare xml da tabella access

    Dejavier ha scritto:


    ...
    devo creare un file xml, ...
    Il codice è:
    incompleto. Mancano le dichiarazioni di tutte le variabili DOMXML (cos'è Frag e Frag2?)
    Come ti muovi nel recordset? Qual è la gerarchia tra i nodi e all'interno della tabella? C'è un tracciato da consultare?

    Dejavier ha scritto:


    Frag2.Text = rst[b] 'qui inserisco il dato estratto dalla tabella[/b]
    No, se scrivi così non funziona perché non puoi assegnare alla proprietà Text un oggetto recordset.
    Ma la domanda suprema è: qual è il problema?
  • Re: Creare xml da tabella access

    Ciao,
    Frag e Frag2 sono i nomi dei sottonodi del tracciato, non ho inviato la parte di codice dove assegno le variabili del tracciato.
    Il problema è proprio che non riesco ad assegnare al campo specifico del tracciato, in questo caso Farg2-email, il dato che vorrei estrarre dalla tabella, probabilmente perchè, come dici tu, Frag2 è testo. C'è modo di formattare il dato estratto in formato testo?
    Non sono molto pratico di vba...
  • Re: Creare xml da tabella access

    Di seguito l'intero codice
    Grazie mille

    Private Sub Comando0_Click()
    Dim Dom As DOMDocument

    Dim sSQL As String
    Dim db As Database
    Dim rst As DAO.Recordset
    Dim Istat_pr As String
    Dim A As String

    Set db = CurrentDb
    Istat_pr = InputBox("Inserire codice ISTAT della Provincia")
    sSQL = "SELECT Tabella1.email FROM Tabella1 WHERE Tabella1.provincia=" & Istat_pr & ""
    Set rst = db.OpenRecordset(sSQL, dbOpenDynaset)

    Istat_com = InputBox("Inserire codice ISTAT del Comune")

    Set Dom = New DOMDocument60

    Set node = Dom.createProcessingInstruction("xml", "version='1.0'")
    Dom.appendChild node
    Set node = Nothing

    Set node = Dom.createProcessingInstruction("xml-stylesheet", _
    "type='text/xml' href='test.xsl'")
    Dom.appendChild node
    Set node = Nothing

    Set node = Dom.createComment("sample xml file created using XML DOM object.")
    Dom.appendChild node
    Set node = Nothing

    Dim root
    Set root = Dom.createElement("SchedaComune")

    Set attr = Dom.createAttribute("autore")
    attr.Value = "nome autore"
    root.setAttributeNode attr
    Set attr = Nothing

    Dom.appendChild root
    root.appendChild Dom.createTextNode(vbNewLine + vbTab)
    Set node = Dom.createElement("SchedaComune")

    node.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createDocumentFragment
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createElement("provincia")
    Frag.Text = Istat_pr
    node.appendChild Frag
    Set Frag = Nothing

    node.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createDocumentFragment
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createElement("comune")
    Frag.Text = Istat_com
    node.appendChild Frag
    Set Frag = Nothing

    node.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createDocumentFragment
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createElement("anno")
    Frag.Text = "anno dati"
    node.appendChild Frag
    Set Frag = Nothing

    node.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createDocumentFragment
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createElement("periodo")
    Frag.Text = "periodo comp"
    node.appendChild Frag
    Set Frag = Nothing

    node.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createDocumentFragment
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    Set Frag = Dom.createElement("compilatore")

    node.appendChild Frag


    Set Frag2 = Dom.createDocumentFragment
    Frag2.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)
    Set Frag2 = Dom.createElement("nome")
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)
    Frag.appendChild Frag2 'dico che Frag2 è gilgio di Frag
    Frag2.Text = "nome compilatore"
    Set Frag2 = Nothing
    node.appendChild Frag
    Set Frag2 = Dom.createDocumentFragment
    Set Frag2 = Dom.createElement("cognome")
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)
    Frag.appendChild Frag2 'dico che Frag2 è gilgio di Frag
    Frag2.Text = "cognome compilatore"
    Set Frag2 = Nothing
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)

    Set Frag2 = Dom.createDocumentFragment
    Frag2.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)
    Set Frag2 = Dom.createElement("qualifica")
    Frag.appendChild Frag2
    Frag2.Text = "tipo qualifica"
    Set Frag2 = Nothing
    node.appendChild Frag
    Set Frag2 = Dom.createDocumentFragment
    Set Frag2 = Dom.createElement("email")
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)
    Frag.appendChild Frag2

    Frag2.Text = rst
    Set Frag2 = Nothing
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)


    Set Frag2 = Dom.createDocumentFragment
    Frag2.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)
    Set Frag2 = Dom.createElement("telefono")
    Frag.appendChild Frag2
    Frag2.Text = "n telefono"
    Set Frag2 = Nothing
    node.appendChild Frag
    Set Frag2 = Dom.createDocumentFragment
    Set Frag2 = Dom.createElement("fax")
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)
    Frag.appendChild Frag2
    Frag2.Text = "n fax"
    Set Frag2 = Nothing
    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)

    Set Frag2 = Dom.createDocumentFragment
    Set Frag2 = Dom.createElement("note")
    Frag2.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab + vbTab)
    Frag.appendChild Frag2
    Frag2.Text = "note"
    Set Frag2 = Nothing
    node.appendChild Frag

    Frag.appendChild Dom.createTextNode(vbNewLine + vbTab + vbTab)

    node.appendChild Dom.createTextNode(vbNewLine + vbTab) 'mando a capo SchedaComune

    root.appendChild node
    ' Add a newline.
    root.appendChild Dom.createTextNode(vbNewLine)
    Set node = Nothing

    ' Save the XML document to a file.
    Dom.Save "C:\Users\Desktop\prova4.xml"
    Set root = Nothing
    Set Dom = Nothing
    Exit Sub

    ErrorHandler:
    MsgBox Err.Description


    rst.Close
    Set rst = Nothing
    db.Close
    Set db = Nothing


    End Sub
  • Re: Creare xml da tabella access

    Dejavier ha scritto:


    ...
    Il problema è proprio che non riesco ad assegnare al campo specifico del tracciato, in questo caso Farg2-email, il dato che vorrei estrarre dalla tabella,...
    Tutto qua? E gli altri valori come li inserisci? (non ho letto tutto il codice)
    Comunque, vista quella dichiarazione di recordset, che contiene solo quel campo che ha indice pertanto 0, puoi scrivere semplicemente
    Frag2.Text = rst(0).Value 'oppure rst.Fields(0).Value o ancora  rst!email.Value
    Potresti omettere .Value perché è la proprietà di default di Field ma non fa male esplicitare.
  • Re: Creare xml da tabella access

    Non leggo codice non correttamente riportato nei TAG...!

    In ogni caso attenzione all'uso della proprietà [Text], sinonimo di copia del codice da spezzoni di VB6... e non di VBA(Access).
  • Re: Creare xml da tabella access

    Ciao,
    grazie mille ho ho scritto in ogni campo
    Frag2.Text=rst.Fields("nome campo")

    Grazie ancora
  • Re: Creare xml da tabella access

    @Alex ha scritto:


    Non leggo codice non correttamente riportato nei TAG...!
    Questo spiega quanto sotto

    @Alex ha scritto:


    In ogni caso attenzione all'uso della proprietà [Text], sinonimo di copia del codice da spezzoni di VB6... e non di VBA(Access).
    Text in questo caso è la proprietà di oggetti Xml Dom.
  • Re: Creare xml da tabella access

    Grazie infinite!!!
  • Re: Creare xml da tabella access

    Philcattivocarattere ha scritto:


    @Alex ha scritto:


    Non leggo codice non correttamente riportato nei TAG...!
    Questo spiega quanto sotto

    @Alex ha scritto:


    In ogni caso attenzione all'uso della proprietà [Text], sinonimo di copia del codice da spezzoni di VB6... e non di VBA(Access).
    Text in questo caso è la proprietà di oggetti Xml Dom.
    Ops... vero, grazie Phil.
Devi accedere o registrarti per scrivere nel forum
9 risposte