หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 1 0 9 6 6 9

7 ธันวาคม พ.ศ.2549
318 Users On-Line.
Visitors - Page views
 8 4 0 2 8 2 8
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

เรียนรู้ XML กับ Visual Basic 6.0 ภาค 2

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 5/8/2550 23:59:00
(อ่าน : 16466) 

พี่น้องครับ ... ตามมาทันทีสำหรับภาค 2 เพื่อเข้าสู่ภาคปฏิบัติกันจริงๆจังๆเสียที โปรดอย่าลืมน่ะครับว่านี่มันเป็นการใช้งาน VB 6.0 ซึ่งเป็นเทคโนโลยี COM Component ไม่ใช่เทคโนโลยี .NET Framework ซึ่งตราบใดที่ผมยังไม่สามารถผันตัวเองเป็น Provider ได้ ยังเป็นได้แค่ Consumer อยู่ก็ขอปักหลักมันกับ VB 6.0 ไปก่อนล่ะ ... แบบเจียมตัวน่ะครับ คิดอย่างไม่ยากเลย หากงานที่ทำได้ Output ออกมาแล้วเหมือนกัน แต่ใช้ต้นทุนที่ต่างกัน ผมก็ขอเลือกเครื่องมือที่ต้องใช้ต้นทุนทางความคิด และ เวลาน้อยกว่าเป็นปัจจัยหลัก นี่แหละคือสาเหตุที่ผมยังไม่ยอมย้ายไป .NET เต็มตัวสักที ผมอยากนำเสนอข้อมูลเหล่านี้ ให้กับพ่อแม่พี่น้องที่กำลังคิดตัดสินใจเลือกใช้เครื่องมือต่างๆ และโปรดถามใจตัวเองกันก่อนด้วยว่า ... เครื่องมือที่มีใช้งานน่ะ ใช้มันคุ้มค่ากันหรือยังล่ะครับ ... พี่น้อง ... เอ้า ... HOW TO and DO IT Now


<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>  <!-- Comment: นี่คือ Root หรือ ราก -->
	<CD>  <!-- Comment: Child -->
		<!-- Comment: Sub Child -->
		<TITLE>Empire Burlesque</TITLE>
		<ARTIST>Bob Dylan</ARTIST>
		<COUNTRY>USA</COUNTRY>
		<COMPANY>Columbia</COMPANY>
		<PRICE>10.90</PRICE>
		<YEAR>1985</YEAR>
	</CD>
	<CD>
		<TITLE>Hide your heart</TITLE>
		<ARTIST>Bonnie Tyler</ARTIST>
		<COUNTRY>UK</COUNTRY>
		<COMPANY>CBS Records</COMPANY>
		<PRICE>9.90</PRICE>
		<YEAR>1988</YEAR>
	</CD>
</CATALOG>

จากบทความนี้ผมจะนำเสนอเรื่องราวของ Stream Object ครับ ซึ่ง Object ตัวนี้มันได้ฝังมากับ ActiveX Data Object 2.5 เป็นต้นมา อนึ่งในตำราภาคภาษาอังกฤษมันกล่าวถึงเรื่องของ Stream Binary Data รวมถึง Document และ Folder เอาไว้ ดังนั้นผมขออธิบายความหมายตามแบบฉบับที่ผมเข้าใจให้พี่น้องได้รับฟังกันน่ะครับ ... Stream Object มันเป็น Object ที่ใช้ในการเข้าถึงข้อมูลในลักษณะโครงสร้างแบบต้นไม้ (Tree) แต่เป็นต้นไม้กลับหัวน่ะครับ คือ เอาราก หรือ Root ไปไว้ด้านบนสุด จากนั้นก็แตกกระจายเป็นกิ่ง ก้าน สาขา ลงมา โดยแต่ละจุดที่มันเกิดการแตกกระจาย เราเรียกว่า โหนด (Node) หรือ Child/Sub Child ตามลักษณะของ XML ซึ่ง Stream Object มันสามารถทำงานร่วมกันกับ RecordSet Object ได้ด้วย ... ดังตัวอย่างข้างล่างนี้แหละครับ
อ่านรายละเอียดเพิ่มเติมของ Stream Object ... ที่นี่

เห็นมั้ยครับ ... เข้าทาง XML มันเลย ลองดูรูปแบบของ XML ทางด้านซ้ายมือ เราจะพบว่าตรงตำแหน่งของ <CATALOG> หรือ Root มันก็คือ Recordset (หรือตารางข้อมูลดีๆนี่แหละ) ส่วน <CD> หรือ Child มันก็คือ Record ในแต่ละรายการ ส่วนจะชี้ว่ามี Identifier หรือ Primary Key ใด เราก็สามารถเพิ่มเติมได้จาก Sub Child หรือ กำหนดเป็น Attribute ให้กับ Child โดยตรงเลยก็ได้ เช่น <CD ID="1"> เหอๆๆๆๆ ... ง่ายจัง

   ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6

ตัวอย่างของการแปลงข้อมูลจาก MS Access เป็น XML และนำข้อมูลจาก XML แสดงผลในตารางกริด
เป็นไงล่ะ ... พี่น้อง ... มันน่าสนใจมั้ยครับ


Project --> References
ผมขอเลือก XML 4.0 เอาแบบกลางๆแล้วกันน่ะครับ เพราะบางท่านอาจจะไม่ได้ Update Component ตัวใหม่แบบผมเข้ามา แล้วดาวน์โหลดไปเปิดไม่ได้ ... เดี๋ยวงง

Project --> Components

Design - ออกแบบ

Option Explicit

' ประกาศตัวแปรสำหรับ ADO Stream Object
Dim strData As New ADODB.Stream

' โปรแกรย่อยที่ใช้ในการแปลงข้อมูล และั ทำการแสดงผล
Private Sub cmdSearch_Click()
Dim Criteria As String
Criteria = Trim(txtSearch.Text)
    Set RS = New Recordset
    
    ' ตัวอย่างเลือกจากการค้นหาข้อมูล
    If Criteria <> "" Or Len(Criteria) <> 0 Then
        ' ตัวอย่างตารางเดียว
        'RS.Open "SELECT * FROM tblCustomer WHERE " & _
                            " [FirstName] " & " Like '%" & Criteria & "%'" & " OR " & _
                            " [LastName] " & " Like '%" & Criteria & "%'" & _
                            " ORDER BY CustomerID ", _
                            ConnMyDB, adOpenForwardOnly, adLockReadOnly, adCmdText
        
        ' QUERY
        RS.Open " SELECT tblCustomer.*, tblTitle.TitleName, tblProvince.ProvinceName " & _
                            " FROM (tblCustomer INNER JOIN tblProvince ON tblCustomer.ProvinceID = tblProvince.ProvinceID) " & _
                            " INNER JOIN tblTitle ON tblCustomer.TitleID = tblTitle.TitleID " & _
                            " WHERE " & _
                            " [CustomerID] " & " Like '%" & Criteria & "%'" & " OR " & _
                            " [FirstName] " & " Like '%" & Criteria & "%'" & " OR " & _
                            " [LastName] " & " Like '%" & Criteria & "%'" & " OR " & _
                            " [TitleName] " & " Like '%" & Criteria & "%'" & _
                            " ORDER BY CustomerID ", _
                            ConnMyDB, adOpenForwardOnly, adLockReadOnly, adCmdText

    Else
        ' ตัวอย่างตารางเดียว
        'RS.Open " SELECT * FROM tblCustomer " & _
                            " ORDER BY CustomerID ", _
                            ConnMyDB, adOpenForwardOnly, adLockReadOnly, adCmdText
        RS.Open " SELECT tblCustomer.*, tblTitle.TitleName, tblProvince.ProvinceName " & _
                            " FROM (tblCustomer INNER JOIN tblProvince ON tblCustomer.ProvinceID = tblProvince.ProvinceID) " & _
                            " INNER JOIN tblTitle ON tblCustomer.TitleID = tblTitle.TitleID " & _
                            " ORDER BY CustomerID ", _
                            ConnMyDB, adOpenForwardOnly, adLockReadOnly, adCmdText
    End If
    
    ' กำหนดให้ RecordSet เพื่อรับค่ารูปแบบของ XML อันนี้ต้อง Define ก่อนใช้ Method - SaveToFile
    RS.Save strData, adPersistXML
    
    ' บันทึกผลที่ได้ไปสู่เอกสาร XML ตามที่ระบุไว้
    ' adSaveCreateOverWrite เพื่อสร้างไฟล์ใหม่หากไม่มีไฟล์นั้นๆ และเขียนทับลงไปหากมีไฟล์เดิมอยู่แล้ว
    strData.SaveToFile App.Path & "\MyDB.xml", adSaveCreateOverWrite
    
    ' นำไฟล์ XML มาแสดงผลบน Web Browser
    webXML.Navigate App.Path & "\MyDB.xml"
    
    ' นำไฟล์ XML มาแสดงผลในตารางกริด
    Set DS = New Recordset
    DS.Open App.Path & "\MyDB.xml", "Provider=MSPersist;", _
            adOpenForwardOnly, adLockReadOnly, adCmdText
    ' ผูก Control เข้ากับแหล่งข้อมูล
    Set fg.DataSource = DS
    
    ' ปิดการใช้งาน
    DS.Close: Set DS = Nothing
    RS.Close: Set RS = Nothing
    strData.Close: Set strData = Nothing

End Sub

Private Sub Form_Load()
    Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
    Me.Height = Me.ScaleHeight
    Me.Width = Me.ScaleWidth
    
    txtSearch.Text = ""
    ' ให้แสดงหน้า HTML ว่างเปล่า
    webXML.Navigate App.Path & "\Blank.html"
    
    ' เชื่อมต่อไฟล์ฐานข้อมูล MS Access ... เข้าสู่ Module หากินอีกแล้ว 55555
    Call OpenDataBase
End Sub

Private Sub Timer1_Timer()
    ' แสดงเวลาแบบ Real Time
    staProgram.Panels(3).Text = Format(Hour(Time), "00") & ":" & _
                                                              Format(Minute(Time), "00") & ":" & _
                                                              Format(Second(Time), "00") & "  " & _
                                                              FormatDateTime(Now(), vbShortDate)
End Sub

Private Sub txtSearch_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        ' ปิดเสียงลำโพง ... หนวกหู
        KeyAscii = 0
        Call cmdSearch_Click
    End If
End Sub

ลักษณะโครงสร้างของเอกสาร XML

จากโปรแกรม ... ให้สังเกตว่าขนาดของไฟล์ XML จะมีขนาดเล็กกว่าไฟล์ MDB หลายเท่าตัว อันนี้ตอบได้อย่างไม่ยากเลย (หากมองย้อนกลับเข้าหาทฤษฎีด้วย) เพราะว่า XML มันเก็บเพียงเนื้อหาข้อมูลแบบเนื้อๆเน้นๆ เท่านั้นเอง ... และจากการแสดงผล ประมาณได้ว่ามันไม่ต่างไปจากการใช้ Data Control สำหรับฐานข้อมูลเลย คือ ง่ายต่อการนำข้อมูลออกมาแสดงผล แต่ยากสำหรับการควบคุม แต่นั่นมันไม่ใช่ประเด็นที่ผมจะกล่าวถึง ประเด็นที่ผมจะสื่อสารไปยังพี่น้องก็คือ ...

  • การนำข้อมูลจาก MS Access มาแปลงเป็น XML ด้วย VB 6.0 ... ก็วัตถุประสงค์หลักของเราก็เพื่อทำการแลกเปลี่ยนข้อมูลนี่นา แล้วข้อมูลที่ว่ามันก็คือ DataBase ทั้งนั้นแหละ ... พี่น้อง ซึ่งในปัจจุบันนี้มันมีทั้งโปรแกรม และ ActiveX ที่สามารถนำมาใช้ในการแปลงข้อมูลจาก Source ที่หลากหลายให้เป็น XML ได้เยอะมากๆ ... แต่อย่างไรก็ตามเอกสาร XML จะต้องมีการบรรยาย หรือ กำหนดคุณลักษณะต่างๆให้เข้าใจตรงกัน ซึ่งหากผมจะส่งเอกสารนี้ไปให้กับ PHP Programmer เหอๆๆๆ งงตายล่ะ ... ซึ่งรอบหน้าก็จะมาว่ากันต่อครับ ... พี่น้อง

    อีกหนึ่งตัวอย่างของการแปลง Access เป็นเอกสาร XML

  • สามารถนำข้อมูลจากเอกสาร XML มายัดใส่ไว้ Control แบบตารางกริด ได้อย่างไม่ยากเย็น ... นั่นคือเมื่อเราได้ข้อมูล XML มาแล้ว แล้วเราจะหาทางนำเสนอข้อมูลที่มีอยู่ออกมาแสดงผล หรือ นำไปทำประโยชน์อย่างอื่นได้ยังไงล่ะ ?????
  • นี่มันเป็นเพียงแค่ ... จุดเริ่มต้น เองครับ ... พี่น้อง

 


จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560