Sie sind auf Seite 1von 5

XML Fhi gkei t en i n Ac ces s

WIE KANN ICH ACCESS XML


FHIGKEITEN UNABHNGIG VON DER
VERSION BEIBRINGEN?
XML
1
it den verschiedenen Versionen von Access wurde die Untersttzung von XML im
mer mehr verbessert. Vollstndig ist sie aber immer noch nicht. So kann man mit
Access2003zwarXMLDateienimportierenundexportieren,aberselbstdabeiblei
bendieFunktionenziemlichbeschrnkt.Z.B.kannmankeineAttributeimportieren.
M
Das Referenzieren eines externen XMLParsers verbessert nicht nur die aktuelle XML
FhigkeitinMicrosoftAccess,mankanndamitauchnochjedeVersionvonMicrosoftAccess
aufdasgleicheNiveaubringen.Dasliegtdaran,dassderParsereinunabhngigesToolist.
Parsereinbinden
UmaufdenParserzu verweisen, rufenSieeinfachim VBAEditordenMenpunkt Extras
Verweise auf, um das Dialogfeld Verweise zu ffnen. Scrollen Sie nun durch die Liste, und
suchen Sie nach Microsoft XML. Der Verweis wird eine Versionsnummer beinhalten es
funktioniert aber mit jeder Version. Wenn Sie sich dafr interessieren, wodurch die Versio
nen sich unterscheiden, sollten Sie mal einen Blick auf die Webseite von Microsoft werfen:
http://msdn.microsoft.com/xml/default.aspx. Hier finden Sie auch die Mglichkeit, den
neustenParserdownzuloaden.

Abbildung1DerVerweisdialog
ManuelaKulpa2006http://www.kulpaonline.com Seite1von5
XML Fhi gkei t en i n Ac ces s
Wenn der Verweis gesetzt wurde, knnen Sie mit XML auf vielerlei raffinierte Weise arbei
ten.UnserTippkannIhnennichtbeibringen,wiemitdemParserumzugehenist.Stattdessen
werden Sie den Parser nutzen, um eine einfache XMLDaten zu laden und in eine Access
Tabelleeinzufgen.DabeiwerdenSiezweiTechnikenkennenlernen:
wiemandieXMLDatenfiltert
undwiemanAttributeladenkann
Vorbereitung
WirhabenIhneneineXMLDateimitKundenInformationenvorbereitet.SieknnendieDa
teihier:http://kulpaonline.com/files1040.htmldownloaden.
Als 1. bentigen wir nun die Tabelle tblKunden fr den Import, falls diese noch nicht vor
handen ist. ffnen Sie ein neues Modul und binden Sie die DAOReferenz ber Extras
Verweise ein. Kopieren Sie nachstehenden Code in das Modul und fhren Sie die Prozedur
CreateImportTableimDirektfensteraus:
Publ i c Funct i on Cr eat eI mpor t Tabl e( ) As Long

Di mdbs As DAO. Dat abase
Di msSql As St r i ng
Di msCheck As St r i ng
Di msTabl e As St r i ng

On Er r or GoTo Cr eat eI mpor t Tabl e_Er r

Set dbs = Cur r ent Db( )
' Al s 1. sol l t en wi r ber pr f en, ob di e Tabel l e
' exi st i er t . Wenn j a, l schen wi r di ese.
sTabl e = " t bl Kunden"
' Fehl er behandl ung ausschal t en
On Er r or Resume Next
sCheck = dbs. Tabl eDef s( sTabl e) . Name
' Fehl er behandl ung wi eder ei nschal t en
On Er r or GoTo Cr eat eI mpor t Tabl e_Er r
' Fal l s zuvor kei n Fehl er , dann exi st i er t
' di e Tabel l e
I f Er r . Number = 0 Then
' SQL- DDL- Lschabf r age bast el en
sSql = " DROP TABLE " & sTabl e
' Abf r age ausf hr en
dbs. Execut e sSql , dbFai l OnEr r or
End I f
' Nun bauen wi r uns ei ne SQL- DDL- Abf r age f r das Er st el l en
' der Tabel l e zusammen
sSql = " CREATE TABLE " & sTabl e & " ( Kundennr CHAR( 10) CONSTRAI NT " & _
" PK_t bl PRI MARY KEY, Fi r ma CHAR( 100) , " & _
" Kont akt per son CHAR( 100) , St r asse CHAR( 100) , PLZ " & _
" CHAR( 30) , Or t CHAR( 100) , Tel ef on CHAR( 50) , Land " & _
" CHAR( 100) ) "
' Tabel l ener st el l ungsabf r age ausf hr en
dbs. Execut e sSql , dbFai l OnEr r or
' Al l es i n Or dnung
MsgBox " Di e Tabel l e: " & sTabl e & " wur de er f ol gr ei ch er st el l t ! " , _
vbI nf or mat i on, " Hi nwei s"

Cr eat eI mpor t Tabl e_Exi t :
On Er r or GoTo 0
Cr eat eI mpor t Tabl e = Tr ue
Exi t Funct i on

Cr eat eI mpor t Tabl e_Er r :
Cr eat eI mpor t Tabl e = Er r
ManuelaKulpa2006http://www.kulpaonline.com Seite2von5
XML Fhi gkei t en i n Ac ces s
MsgBox " Fehl er " & Er r . Number & " : " & _
Er r . Descr i pt i on, vbCr i t i cal , _
" modXml I mpor t . Cr eat eI mpor t Tabl e"
Resume Cr eat eI mpor t Tabl e_Exi t

End Funct i on

DerXMLImportEinBeispiel
Kopieren Sie jetzt nachstehenden Code in das zuvor erstellte Modul und fhren Sie die Pro
zedurReadAndWriteXMLDataimDirektfensteraus.
Hinweis: Wir bentigen die Hilfsroutine MakeQuotes, damit die SQLAnweisungen korrekt
geschrieben werden (siehe auch: http://kulpaonline.com/tippsaccessdatenzugriff
4013.html).
Publ i c Funct i on ReadAndWr i t eXMLDat a( ) As Long

Di mdbs As DAO. Dat abase

' Bent i gt e XML- Obj ekt e
Di mxml _obj As MSXML2. DOMDocument ' Dat ei
Di mxml _l i st As MSXML2. I XMLDOMNodeLi st ' Li st e
Di mxml _nod As MSXML2. I XMLDOMNode ' El ement

Di msSql As St r i ng

On Er r or GoTo ReadAndWr i t eXMLDat a_Er r

Set dbs = Cur r ent Db( )

Set xml _obj = New MSXML2. DOMDocument

Wi t h xml _obj
' Asynchr onausf hr ung
. async = Fal se
' XML- Dat ei l aden
. Load Cur r ent Pr oj ect . Pat h & " \ kundenl i st e. xml "
' Kundenl i st e zuor dnen
Set xml _l i st = . sel ect Nodes( " Kundenl i st e/ Land/ Kunde" )
' Schl ei f e ber al l e Kunden i n der Kundenl i st e
For Each xml _nod I n xml _l i st
Wi t h xml _nod
' Anf geabf r age zusammenbast el n
sSql = " I nser t I nt o t bl Kunden ( Kundennr , Fi r ma, Kont akt per son, St r asse,
PLZ, Or t , Tel ef on, Land ) "
sSql = sSql & " Val ues ( "
' Ausl esen der ei nzel nen Node- El ement e i mKnot en Kunden
sSql = sSql & MakeQuot es( . chi l dNodes( 0) . Text ) & " , "
sSql = sSql & MakeQuot es( . chi l dNodes( 1) . Text ) & " , "
sSql = sSql & MakeQuot es( . chi l dNodes( 2) . Text ) & " , "
sSql = sSql & MakeQuot es( . chi l dNodes( 3) . Text ) & " , "
sSql = sSql & MakeQuot es( . chi l dNodes( 4) . Text ) & " , "
sSql = sSql & MakeQuot es( . chi l dNodes( 5) . Text ) & " , "
sSql = sSql & MakeQuot es( . chi l dNodes( 6) . Text ) & " , "
' Ausl esen des ber geor dnet en El ement es Land
sSql = sSql & MakeQuot es( . par ent Node. At t r i but es( 0) . Text ) & " ) "
End Wi t h
' Abf r age ausf hr en
dbs. Execut e sSql , dbFai l OnEr r or
Next xml _nod
End Wi t h

' Spei cher f r ei geben
I f Not dbs I s Not hi ng Then dbs. Cl ose: Set dbs = Not hi ng
I f Not xml _nod I s Not hi ng Then Set xml _nod = Not hi ng
ManuelaKulpa2006http://www.kulpaonline.com Seite3von5
XML Fhi gkei t en i n Ac ces s
I f Not xml _l i st I s Not hi ng Then Set xml _l i st = Not hi ng
I f Not xml _obj I s Not hi ng Then Set xml _obj = Not hi ng

' Al l es i n Or dnung
MsgBox " Der I mpor t wur de er f ol gr ei ch dur chgef hr t ! " , _
vbI nf or mat i on, " Hi nwei s"


ReadAndWr i t eXMLDat a_Exi t :
On Er r or GoTo 0
ReadAndWr i t eXMLDat a = Tr ue
Exi t Funct i on

ReadAndWr i t eXMLDat a_Er r :
ReadAndWr i t eXMLDat a = Er r
MsgBox " Fehl er " & Er r . Number & " : " & _
Er r . Descr i pt i on, vbCr i t i cal , _
" modXml I mpor t . ReadAndWr i t eXMLDat a"
Resume ReadAndWr i t eXMLDat a_Exi t

End Funct i on

Funct i on MakeQuot es( ByVal psVal ue As St r i ng) As St r i ng

' / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' / / Met hode | ber pr f t Text auf Anf hr ungszei chen
' und wandel t di esen i n ei ne kor r ekt en
' Schr ei bwei se um
' / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' / / Par amet er | psVal ue - Text i nhal t
' / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' / / Rckgabe | SQL- St r i ng- I nhal t
' / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' / / Er st el l t | Manuel a Kul pa
' / / | EDV I nnovat i on & Consul t i ng - Dor magen
' / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' / / Bei spi el auf r uf :
' I nhal t des Dat enbankf el des Kunde = Hung " Owl " Al l Ni ght
' / / sSql = " . . . Wher e Fi r ma = " & MakeQuot es( Kunde)
' / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Di msOut As St r i ng
Di msChar As St r i ng
Di mi Found As I nt eger

For i Found = 1 To Len( psVal ue)
sChar = Mi d$( psVal ue, i Found, 1)
I f Asc( sChar ) = 34 Then
sOut = sOut & Chr ( 34) & " & " & St r i ng$( 4, Chr ( 34) ) & " & " & Chr ( 34)
El se
sOut = sOut & sChar
End I f
Next

MakeQuot es = Chr ( 34) & sOut & Chr ( 34)

End Funct i on

ManuelaKulpa2006http://www.kulpaonline.com Seite4von5
XML Fhi gkei t en i n Ac ces s
ErklrungderCodeZeilen:
AmAnfangdeklarierenwirdieObjekte,dieberdenVerweisaufdenXMLParserverfgbar
gemacht wurden. Dann wird die XMLDatei Kundenliste in die Objektvariable xml_obj gela
denundanschlieenderfolgtdieBearbeitungdereinzelnenKnoten.
Normalerweise bestehen XMLObjekte aus Knoten und Knotenlisten. Eine Liste ist eine
SammlungvonKnoten.BeiunsererKundenListehandeltessichbeidenKnotenumdieKun
denElemente,diedenLandKnoten(mitentsprechendenAttributen)untergeordnetsind.
Die KundenKnoten haben jeweils sieben Elemente: Kundennr, Firma, Kontaktperson, Stras
se, PLZ, Ort und Telefonnummer. Diese untergeordneten Elemente und das bergeordnete
LandElementdienenalsBasiszumErstellenunseresSQLInsertBefehls.
NachdemdieRoutineReadAndWriteXMLDatadurchgelaufenist,wirddieTabelletblKunden
mitdenXMLDatengeflltsein!Eigentlichganzeinfach:),oder?
Schlussbemerkung
Mit dieser kurzen Routine haben Sie nun zwei Dinge erreicht, die normalerweise nicht reali
sierbarerscheinen.ZumeinenkannnichtnurAccess2003gutmitXMLumgehen,zumande
renlassensichauchAttributeverarbeiten.DieRoutineindiesemTippluftmitallenVersio
nen von Access, die auf den Parser verweisen knnen und hat kein Problem damit, einen
WerteinesAttributsineineAccessTabellezukopieren.
ManuelaKulpa2006http://www.kulpaonline.com Seite5von5