Access'te öznitelik merkezli XML'i içeri aktaramazsınız
Gelişmiş: Uzman kodlama, birlikte çalışabilirlik ve çok kullanıcılı beceriler gerektirir.
Bu makale, Microsoft Access veritabanı (.mdb) dosyası veya Microsoft Access veritabanı (.accdb) dosyası için geçerlidir.
Belirtiler
XML belgesini içeri aktardığınızda, en az bir boş tablo içeri aktarılır veya verilerin tümü içeri aktarılmaz. XML belgesinin yapısına bağlı olarak, aslında birden fazla tablo içeri aktarılabilir.
Neden
Boş bir tablo içeri aktarılırsa, genellikle kaynak XML belgesinin verilerinin öznitelik merkezli olduğunu gösterir. Microsoft Access yalnızca öğe merkezli XML'i destekler. ADO kayıt kümelerinden kalıcı olan XML, öznitelik merkezli XML'de oluşturulur.
Çözüm
Bu makalede, bir ADO Kayıt Kümesini XML biçiminde kalıcı hale getirmekle oluşturulan XML verilerini içeri aktarma işlemi gösterilmektedir. Bu makalede sağlanan dönüştürme, ADO XML kalıcı biçimi için geçerlidir.
Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna zımni garantiler, satılabilirlik veya belirli bir amaca uygunluk da dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler. Öznitelik merkezli XML'yi Access'e aktarmak için önce kaynak belgeye xml dönüşümü (XSLT) oluşturup uygulamanız gerekir. Bu işlem, öğe merkezli ve Access'e aktarılabilir yeni bir XML belgesi oluşturur.
ADO'dan XML Belgesi Oluşturma
Yeni bir boş veritabanı oluşturun ve ImportADOXML.mdb olarak adlandırlayın.
Ekle menüsünden Modül'e tıklayın.
Not Access 2007'de, Oluştur sekmesinin Diğer grubunda Makro'ya ve ardından Modül'e tıklayın.
Visual Basic Düzenleyici aşağıdaki kodu yazın veya yeni modüle yapıştırın:
Sub CreateADOXML() 'Persists an ADO recordset to XML Dim cn As ADODB.Connection Dim rs As ADODB.Recordset 'Open an ADO Connection object 'If the path to Northwind differs on your machine, you will need to 'adjust the Data Source property accordingly. Set cn = New ADODB.Connection With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=C:\Program Files\Microsoft " & _ "Office\Office10\Samples\Northwind.mdb" .Open End With 'Open an ADO Recordset Set rs = New ADODB.Recordset With rs Set .ActiveConnection = cn .Source = "SELECT * FROM Customers WHERE Country='UK'" .CursorLocation = adUseServer .CursorType = adOpenForwardOnly .LockType = adLockReadOnly .Open 'persist the recordset to XML .Save "C:\ado_customersUK.xml", adPersistXML .Close End With 'Cleanup cn.Close Set rs = Nothing Set cn = Nothing End Sub
Modülü basCreateADOXML olarak kaydedin.
Visual Basic Düzenleyici, Görünüm menüsünde Hemen Pencere'ye tıklayarak Anında penceresini açın.
Hemen penceresine aşağıdaki kodu yazın ve ENTER tuşuna basın:
CreateADOXML
XSL Dönüşümü Oluşturma
ADO tarafından tanımlanan ad alanları Access tarafından tanınmadığından, aşağıdaki dönüşüm bu ad alanlarını tanımlar, ancak sonuçta elde edilen çıktının dışında tutar.
Not Defteri'ni başlatın ve aşağıdaki XSLT kodunu yazın:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rs="urn:schemas-microsoft-com:rowset" exclude-result-prefixes="rs"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <!-- root element for the XML output --> <rootElement xmlns:z="#RowsetSchema" xsl:exclude-result-prefixes="z"> <!-- for each z:row element in the ADO output --> <xsl:for-each select="/xml/rs:data/z:row"> <!-- This will be used for the table name imported into Access. Change this name to suit your needs. --> <TableName> <!-- for each attribute of the z:row element in the ADO XML document --> <xsl:for-each select="@*"> <!-- dynamically create elements and fill with attribute value using the XPath name() function --> <xsl:element name="{name()}"> <xsl:value-of select="."/> </xsl:element> </xsl:for-each> </TableName> </xsl:for-each> </rootElement> </xsl:template> </xsl:stylesheet>
Belgeyi ADOXMLToAccess.xsl olarak ImportADOXML.mdb veritabanını kaydettiğiniz klasöre kaydedin.
Dönüştürme ve İçeri Aktarmayı Uygulama
XSL dönüşümünü uygulamak için, Microsoft Office XP ile yüklenen Microsoft MSXML3 işlemcisi gibi bir XSLT işlemci kullanmanız gerekir. Aşağıdaki adımlarda, daha önce oluşturduğunuz dönüşümü bir ADO XML belgesine uygulamak ve Access'e aktarmak için XML Belge Nesne Modeli kullanılır.
Not
Bu makaledeki örnek kod XML Belgesi Nesne Modeli'ni kullanır. Bu kodun düzgün çalışması için Microsoft XML 3.0 kitaplığına başvurmanız gerekir. Bunu yapmak için Visual Basic Düzenleyici Araçlar menüsünde Başvurular'a tıklayın ve Microsoft XML, v3.0 onay kutusunun seçili olduğundan emin olun.
Microsoft Access'i başlatın ve daha önce oluşturduğunuz ImportADOXML.mdb veritabanını açın.
Veritabanı penceresinde, Nesneler'in altında Modüller'e ve ardından Yeni'ye tıklayın.
Not Access 2007'de, Oluştur sekmesinin Diğer grubunda Makro'ya ve ardından Modül'e tıklayın.
Visual Basic Düzenleyici aşağıdaki kodu modüle yazın veya yapıştırın:
Sub ImportXMLFromADO() 'Uses the XML DOM to transform XML from ADO 'to element-centric XML and imports into Access Dim domIn As DOMDocument30 Dim domOut As DOMDocument30 Dim domStylesheet As DOMDocument30 Set domIn = New DOMDocument30 domIn.async = False 'Open the ADO xml document If domIn.Load("C:\ado_customersUK.xml") Then 'Load the stylesheet 'In this example you will need to change <PathToStylesheet> to 'the actual path where you stored the ADOXMLToAccess.xsl file. Set domStylesheet = New DOMDocument30 domStylesheet.Load "<PathToStylesheet>\ADOXMLToAccess.xsl" 'Apply the transform If Not domStylesheet Is Nothing Then Set domOut = New DOMDocument30 domIn.transformNodeToObject domStylesheet, domOut 'Save the output domOut.Save "c:\customersUK.xml" 'Import the saved document into Access Application.ImportXML "c:\customersUK.xml" End If End If 'Cleanup Set domIn = Nothing Set domOut = Nothing Set domStylesheet = Nothing MsgBox "done!", , "ImportXMLFromADO" End Sub
Visual Basic Düzenleyici, Görünüm menüsünde Hemen Pencere'ye tıklayarak Anında Pencere'yi açın.
Anlık Pencere'ye aşağıdaki kodu yazın ve ENTER tuşuna basın:
ImportXMLFromADO
TableName> için <belirttiğiniz ada sahip Birleşik Krallık müşterilerini içeren bir tablonun Access'e aktarıldığını unutmayın. İsteğe bağlı olarak, dönüştürme sırasında oluşturulan öğe merkezli XML belgesini silebilirsiniz.
Durum
Bu davranış tasarımdan kaynaklanır.
Başvurular
ADO Kayıt Kümesini XML'de kalıcı hale getirmek hakkında ek bilgi için bkz . Kayıtları XML biçiminde kalıcı hale getirmek.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin