Penggunaan data XML semakin popular di kalangan pembangun sistem aplikasi yang menggunakan web sebagai tapak penyimpan. Sifatnya yang mudah dan serasi dengan apa jua model pembangun aplikasi menyebabkan ia mula mendapat tempat dalam dunia aplikasi. Kewujudan "Cloud Computing" telah menjadikan penggunakan kaedah ini semakin popular.
Bagaimanakah data XML ini boleh digunakan di dalam perisan Microsoft Access. Apa yang saya akan lakukan di dalam artikel ini ialah;
- Membaca jadual data daripada SQL Server yang mengandungi data XML yang di simpan dalam bentuk XML Document atau String.
- Tukarkan data XML kepada bentuk DAO.Recordset.
- Paparkan Recordset dalam bentuk Jadual di dalam Form @ Report.
1. Membaca Jadual data daripada SQL Server
Set xmlDoc_ = CreateObject("Microsoft.xmldom")
xmlDoc_.async = False
Dim db As Database
Dim tbl As TableDef
Dim qdf As QueryDef
Dim rs As Recordset
Set db = CurrentDb
Set tbl = db.TableDefs("[dbo_db]")
If tbl.Connect <> vbNullString Then
Set qdf = db.CreateQueryDef("")
qdf.Connect = tbl.Connect
qdf.SQL = "EXEC GetDataLaporan '" & Me.id & "'"
qdf.ReturnsRecords = True
Set rs = qdf.OpenRecordset
Debug.Print "record Count : " & rs.RecordCount
If Not rs.EOF Then
Debug.Print rs!laporanXML
xmlDoc_.loadXML (rs!laporanXML)
End If
rs.Close
qdf.Close
End If
Set xmlDoc_ = CreateObject("Microsoft.xmldom")
Menyediakan pembolehubah untuk XML Document bagi menerima data XML yang diambil dari SQL Server.
Set qdf = db.CreateQueryDef("")Membina Query sementara di dalam Ms Access sebagai pemboleh ubah qbf untuk menyimpan jadual data dari SQL Server.
qdf.Connect = tbl.ConnectMelakukan sambungan kepada SQL Server menggunakan ODBC bagi melaksanakan arahan Store Procedure yang telah dibentuk sebelumnya.
xmlDoc_.loadXML (rs!laporanXML)Memuatkan data XML kedalam pembolehubah xmlDoc_ untuk digunakan dalam peringkat seterusnya.
2. Tukarkan data XML kepada bentuk DAO.Recordset.
Contoh 1.1 - data XML yang terdapat dalam pemboleh ubah xmlDoc_
<laporan>Bagi membolehkan sesuatu data XML diterjemahkan dalam bentuk ia perlulah mempunyai ciri-ciri yang lebih jelas bagi menerangkan fungsi setiap medan data yang wujud seperti nama medan, jenis data, panjang data dan sebagainya.
<pecahan>
<bhg>A</bhg>
<desc>Umur/Bilangan</desc>
<items>
<no>A1</no>
<desc>< 20 Tahun</desc>
<score>23</score>
</items>
<items>
<no>A2</no>
<desc>21 - 30 Tahun</desc>
<score>76</score>
</items>
</pecahan>
<pecahan>
<bhg>B</bhg>
<desc>Bahasa</desc>
<items>
<no>B1</no>
<desc>Melayu</desc>
<score>99</score>
</items>
<items>
<no>B2</no>
<desc>Arab</desc>
<score>0</score>
</items>
</pecahan>
</laporan>
Recordset
Contoh 1.2 - data XML yang lengkap.
<?xml version="1.0"?>Untuk tujuan ini saya menggunakan data XML (contoh 1.1) kerana ia telah wujud dalam sistem yang sedang dipertingkatkan. Data ini perlulah diubah kepada bentuk Recordset terlebih dahulu sebelum ia boleh digunakan bersama element pada form.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Untuk tujuan ini saya menyediakan satu jadual data yang diberi nama mod_peserta_temp bagi menyimpan data sementara sebelum ia dipaparkan pada form dengan menggunakan fungsi PivotTable yang terdapat di dalam Ms Access.
Senarai aturan untuk menukarkan data XML kepada jadual mod_peserta_temp.
Dim xtb As TableDef
Dim addNew() as Variant
Dim fieldIndex as Integer
CurrentDb.Execute ("DELETE From mod_peserta_temp")
Set xrs = CurrentDb.OpenRecordset("mod_peserta_temp")
LoadNodesIntoRs Me.xmlObject.childNodes, xrs, 0
xrs.Close
Private Sub LoadNodesIntoRs(ByRef nodes As Object, rs As Recordset, recordCount As Integer)
Dim xNode As Object
For Each xNode In nodes
recordCount = recordCount + 1
If xNode.nodeType = 3 Then
xNode.nodeType
Select Case xNode.parentNode.nodeName
Case "desc"
If fieldIndex = 2 Then fieldIndex = 3 Else fieldIndex = 1
Case "bhg"
fieldIndex = 0
Case "no"
fieldIndex = 2
Case "score"
fieldIndex = 4
End Select
addNew(fieldIndex) = xNode.nodeValue
If xNode.parentNode.nodeName = "score" Then
fieldIndex = 2
rs.addNew
addNew(4) & """]"
rs(0) = addNew(0)
rs(1) = addNew(1)
rs(2) = addNew(2)
rs(3) = addNew(3)
rs(4) = addNew(4)
rs.Update
End If
End If
If xNode.hasChildNodes Then
LoadNodesIntoRs xNode.childNodes, rs, recordCount
End If
Next xNode
End Sub
3. Paparkan Recordset dalam bentuk Jadual di dalam Form @ Report.
Setelah arahan aturan tersebut selesai satu jadual data akan terhasil dan sedia digunakan untuk dipaparkan pada form melalui berbagai cara. Selain itu anda juga boleh menggunakan kaedah lain yang wujud dimana anda boleh menyediakan jadual sementara dengan menggunakan arahan VBA dan paparkan kepada form. Mungkin akan saya sentuh diartikel yang lain.
Contoh hasil |
1 comment:
www.facebook.com/soul.colours.collection
Post a Comment