Visual Basic

Home

Visual Basic Tutorial
Knowledge Developer Database Internet Resource
ฐานข้อมูล
1. การเข้าถึงฐานข้อมูล
2. ADO Data Control
3. Data Form
4. Data View
5. Data Environment
 
Visual Basic Tutorial
1. Visual Basic 6
2. ฟอร์ม
3. Intrinsic Control
4. ตัวแปรและ Procedure
5. Class
6. Common Control1
7. Common Control2
8. ActiveX Control
9. Interface
10. ฐานข้อมูล
11. Database Control
 
Developer
Visual Basic
Microsoft Access
Microsoft Excel
 

ADO Data Control

ADO Data Control เป็นตัว Control ที่ได้รับการออกแบบให้สนับสนุนเทคโนโลยี ADO ซึ่งเป็นเทคโนโลยีใหม่ใน Visual Basic 6

การรวมกับข้อมูล

เทคโนโลยีการรวมข้อมูล หมายถึง เมื่อมีการวางตัว control ลงบนฟอร์มแล้ว และรวมตัว control บางส่วนหรือทั้งหมดเข้ากับตัว control อีกตัว เช่น data control ซึ่งจะทำหน้าที่เชื่อมต่อกับฐานข้อมูล data control ให้ผู้ใช้สามารถเลื่อนไปยังเรคคอร์ดต่างๆ ในฐานข้อมูล เมื่อมีการเรคคอร์ดใหม่ ค่าของฟิลด์จะปรากฏ ตัว bound control เมื่อมีการปรับค่าในตัว control การเปลี่ยนค่าจะส่งไปที่ฐานข้อมูล

การรวมข้อมูลของ ADO เป็นการปฏิวัติ เทคโนโลยีการแสดงข้อมูลจากฐานข้อมูล ประการแรก ผู้ใช้อาจจะไม่ได้ทำงานกับฐานข้อมูลตลอดเวลา ซึ่งใน Visual Basic 6 ไม่ได้กล่าวถึงตัว bound control และ data control แต่กล่าวถึง data consumer ที่ผูกติดกับแหล่งข้อมูล ประการต่อการ Visual Basic มี data consumer หลายประเภท เช่น ตัว intrinsic control หรือตัว control ภายนอก, class, COM, component, ตัว control แบบ Homemade ActiveX (หรือ User control), หรือ Data Report designer และมีแหล่งข้อมูลหลายประเภทที่มีสามารถเลือกได้ เช่น ตัว control แบบ ADO Data, class, COM component, User control หรือ Data Environment designer

การเลือกแหล่งข้อมูลและ consumer จะทำให้แบบแผนการรวมข้อมูลมีความยืนหยุ่นในโปรแกรมประยุกต์ที่ดีกว่า data control แบบดั้งเดิม เมื่อมีการใช้การรวมข้อมูลของ ADO ซึ่งไม่ได้เป็นการเชื่อมแบบสถาปัตยกรรม 2-tier เนื่องจากการประยุกต์ไม่ได้รวมโดยตรงกับฟิลด์ในฐานข้อมูล แต่สามารถใช้ตัวกลาง COM component เพื่อที่จะใช้เครื่องมือสำหรับการออกแบบตามสถาปัตยกรรม 3-tier ที่การประมวลผลสามารถทำได้ที่เครื่องลูกข่าย เครื่องแม่ข่ายหรือเครื่องอื่นได้

กลไกการรวม

ADO Data control สามารถรวมตัว control ที่ต่างกัน และนำไปประยุกต์กับ date source หรือ consumer อื่นเนื่องจาก ADO Data control ไม่ได้เป็นตัว intrinsic control ดังนั้นการนำมาใช้ต้องเพิ่มตัว control เข้ามาด้วยวิธีการดังนี้

1. ที่เมนู Project เลือก Components (Project -> Components) หรือคลิกเมาส์ปุ่มขวาบน Tool Box แล้วเลือก Components จากเมนู popup

2. เมื่อไดอะล๊อกบ๊อกซ์ Components ปรากฏขึ้นให้เลื่อนรายการไปที่ Microsoft ADO data control 6.0 (OLE DB) ให้คลิกที่ check box ด้านหน้า แล้วคลิกปุ่ม OK

3. ADO data control จะได้รับการแทรกที่ Tool Box โดยมีชื่อย่อ Adodc

การเพิ่ม Adodc (ADO data control) บนฟอร์ม

1. สร้าง Project ใหม่ และให้ตั้งชื่อว่า Project เป็น DataFmt.vbp และสร้างฟอร์มใหม่

2. คลิกที่ Tool ของ Adodc บน Toolbox แล้ววางลงบนฟอร์ม ตามปกติควรอยู่ด้านล่างของฟอร์ม แล้วกำหนดคุณสมบัติ Align เป็น 2-vbAlignButton เพื่อทำให้สามารถปรับขนาดตามฟอร์มได้

3. สร้าง Connection

4. ที่เมนู View เลือก Property Pages (View -> Property Pages) หรือคลิกเมาส์ปุ่มขวาแล้วเลือก Property Pages

5. บนไดอะล๊อกบ๊อกซ์ของ Property Pages ที่แท็บ General ให้กำหนดติดต่อกับแหล่งข้อมูลได้ 3 แบบ คือ ไฟล์ Data Link, ODBC Data Source Name (DSN), และ Connection String ในตัวอย่างเลือกใช้ Connection String

ให้คลิกที่ปุ่มตัวเลือกของ Connection String เมื่อช่องข้อความด้านล่าง Connection String เปลี่ยนสีขาวให้คลิกปุ่ม Build ด้านหลัง

6. เมื่อปรากฏไดอะล๊อกบ๊อกซ์ของ Data Link Properties ที่หน้าของแท็บ Provider ให้เลือก Microsoft Jet 3.5.1 OLE DB Provider แล้วคลิกปุ่ม Next

7. ที่แท็บ Connection ให้คลิกที่ปุ่มด้านหลังช่องข้อความของ Select or Enter Database Name จะปรากฏ Window ของ Select Access Database ให้เลือกฐานข้อมูล (ตามตัวอย่างเลือกจาก C:\Program Files\Microsoft Visual Studio\VB98\NWind.mdb) คลิกปุ่ม Open ชื่อของฐานข้อมูลและพาร์ทจะปรากฏในช่องข้อความหมายเลข 1 ของแท็บ Connection หรือพิมพ์พาร์ทและชื่อฐานข้อมูลลงในช่องข้อความเอง

ในช่องข้อความ User Name ใช้สำหรับกำหนดชื่อผู้ใช้ที่สามารถเข้าถึงฐานข้อมูลได้ ในที่นี้กำหนดเป็น Admin หมายถึงผู้ใช้ที่สามารถเข้าถึงทุกส่วนของฐานข้อมูลได้ ส่วนช่อง Password สำหรับการกำหนดรหัสผ่านเข้าฐานข้อมูล

คลิกปุ่ม Test Connection เมื่อทดสอบการติดต่อระหว่าง ADO data control กับฐานข้อมูลที่เลือกถ้าสามารถติดต่อกันได้ จะปรากฏข้อความ "Test Connection Succeeded" ให้คลิกปุ่ม OK

8. ที่ Data Link Properties ให้คลิกปุ่ม OK เพื่อไปยัง Property Page จะปรากฏพารามิเตอร์ของการติดต่อระหว่าง ADO data control กับฐานข้อมูลในช่อง Connection String

9. คลิกที่แท็บ Record source บน Property Page ให้เลือก 2-adCmdTable ในช่อง Command Type เพื่อการติดต่อกับ table จากนั้นช่อง Table or Stored Procedure Name จะเปลี่ยนเป็นสีขาวและมีรายชื่อ table ให้เลือก table ชื่อ Orders

10. คลิกปุ่ม OK

11. วาด text Box , label อย่างละ 4 ตัว และ option button 2 ตัวแต่สร้างเป็น control array โดยอาจจะใช้การสร้างตัวหนึ่งบนฟอร์ม แล้วใช้กับการคัดลอกและวาง ซึ่งจะมีไดอะล๊อกบ๊อกซ์ให้ยืนยันการสร้างชื่อเดียวกัน แต่จะมีการกำหนดคุณสมบัติ Index ตามลำดับให้แล้วกำหนดคุณสมบัติ ดังนี้

อ๊อบเจค ตัว Control หรือ อ๊อบเจค คุณสมบัติ การตั้งค่า
ฟอร์ม Form1 Name Data Format
text box Text1 Name txtOrderID
Text2 Name txtOrderDate
Text3 Name txtShippeddate
Text4 Name txtFreight
option button
Option1 Name optCurrency

ส่วน Label ให้กำหนดคุณสมบัติ caption ตามตำแหน่งที่วางหน้า text box

12. ที่ txtOrderDate ไปที่ตารางคุณสมบัติ ให้กำหนดคุณสมบัติ DataSource เป็น adodc1 และคุณสมบัติ DataField เป็น OrderDate โดยเลือกจากรายการในเมนู drop-down กำหนดคุณสมบัติ DataFormat โดยการที่ปุ่ม build เพื่อเปิด Property pages แล้วเลือกรูปแบบที่เหมาะสมกับประเภทข้อมูล สำหรับ OrderDate เลือกประเภทรูปแบบเป็น Date และกำหนดรูปแบบเป็น d mmmm yyyy

จากนั้น กำหนดค่าคุณสมบัติกับ Text box อื่นๆ ตามค่าคุณสมบัติในตาราง และเลือกคุณสมบัติ DataFormat ที่เหมาะสมของประเภทข้อมูล

ตัว Control คุณสมบัติ การตั้งค่า
txtOrderID DataSource adodc1
DataField OrderID
txtOrderDate DataSource adodc1
DataField OrderDate
txtShippeddate DataSource adodc1
DataField Shippeddate
txtFreight DataSource adodc1
DataField Freight

เนื่องจากมีการใช้อ๊อบเจค StdDataFormat ดังนั้น ต้องเพิ่มการอ้างอิง โดยไปที่ Project Reference แล้วเลือก Microsoft Data Format Object Library จากไดอะล๊อกบ๊อกซ์ References

การตั้งค่าคุณสมบัติให้ Text box ที่เป็นการรวมข้อมูล คือ คุณสมบัติ DataSource ของทุกตัว control ให้ตั้งค่าเป็น Adodc1 (หรือตามชื่อที่ตั้งขึ้น) และคุณสมบัติ DataField ให้เลือกฟิลด์ของ table หรือคิวรี่ ซึ่งได้จากการกำหนด RecordSource ของ ADO data control การตั้งค่าให้เลือกจากรายการด้วยการคลิกที่ปุ่มลูกศรแล้วเลือกค่าที่ต้องการ

ADO Data Control

ภายในตัว ADO Data control ประกอบด้วยคุณสมบัติของ ADOConnection และอ๊อบเจค Recordset สามารถแสดงรายการคุณสมบัติที่สำคัญในการทำงาน

คุณสมบัติ การประยุกต์
ADOConnection
ConnectionString เก็บสารสนเทศในการติดต่อกับแหล่งข้อมูล
User และ Password ตั้งข้อมูลสำหรับการ login
ConnectionTimeout ตั้งค่าการหมดเวลาในการเปิด connection
Mode หาการปฏิบัติที่ยอมให้ในการติดต่อกับแหล่งข้อมูล
   
อ๊อบเจค Recordset
RecordSource ส่งออกเรคคอร์ดจาก table, stored procedure หรือคำสั่ง SQL
CommandType ประเภทของคิวรี่ที่เก็บในคุณสมบัติ RecordSource
CommandTimeout การสิ้นสุดเวลาเป็นวินาทีในการประมวลผลคำสั่ง
CursorLocation ระบุตำแหน่งของ cursor ควรอยู่ที่ลูกข่ายหรือแม่ข่าย
CursorType ประเภทของ cursor เป็นจำนวนของเรคคอร์ดที่อ่านจากฐานข้อมูลในแต่ละทรานแซคชัน
LockType มีผลกับการปรับปรุงข้อมูลในฐานข้อมูล
   

ในขณะเรียกใช้ ADO Data Control จะเกิดได้หลายคุณสมบัติ ทำให้สนับสนุนการเพิ่มเมธอดในการทำงาน เช่น เมธอด Add New และ Delete อาจจะใช้ปุ่มคำสั่งและ event คลิกในการทำงาน

1. สร้าง Project ใหม่ และสร้างฟอร์มใหม่

2. คลิกที่ Tool ของ Adodc บน Toolbox แล้ววางลงบนฟอร์ม ตามปกติควรอยู่ด้านล่างของฟอร์ม แล้วกำหนดคุณสมบัติ Align เป็น 2-vbAlignButton เพื่อทำให้สามารถปรับขนาดตามฟอร์มได้

3. วาด 3 Text box 4 Command button และ 5 Label ลงบนฟอร์ม

อ๊อบเจค ตัว Control หรือ อ๊อบเจค คุณสมบัติ การตั้งค่า
ฟอร์ม Form1 Name frmAdoData
text box Text1 Name txtTitle
MultiLine True
Text2 Name txtYear
Text3 Name txtISBN
Command button Command1 Name cmdAdd
Command2 Name cmdDelete
Command3 Name cmdUpdate
Command4 Name cmdCancel

ส่วน Label ให้กำหนดคุณสมบัติ Caption ตามตำแหน่งที่วางหน้า text box

4. ตั้งค่าการเชื่อมต่อตามขั้นตอนที่ 3 ถึง 10 ของ Project "DataFmt.vbp" โดยตั้งค่าคุณสมบัติ
คุณสมบัติ ConnectionString ด้วย Microsoft Jet 3.5.1 OLEDB provider (ในแท็บ Provider) และชี้ไปที่ฐานข้อมูล Biblio.mdb ใน "C:\Program Files\Microsoft Visual Studio\Vb98" หรือตามตำแหน่งที่เก็บฐานข้อมูล (ในแท็บ Connection)
คุณสมบัติ RecordSource ให้ชี้ไปที่ table ชื่อ Titles (ในแท็บ Record Source)

เมธอดที่นำมาใช้ในการทำงานกับเรคคอร์ด ใน Project นี้ คือ

- เมธอด AddNew สำหรับการเพิ่มเรคคอร์ดใหม่ มีไวยากรณ์ดังนี้

recordset.AddNew

Private Sub cmdAdd_Click()
   Adodc1.Recordset.AddNew
End Sub

- เมธอด Delete สำหรับการลบเรคคอร์ด มีไวยากรณ์ดังนี้

recordset.Delete

Private Sub cmdDelete_Click()
   Adodc1.Recordset.Delete
End Sub

- เมธอด Update สำหรับการบันทึกการเปลี่ยนแปลงค่าของเรคคอร์ด มีไวยากรณ์ดังนี้

recordset.Update

Private Sub cmdUpdate_Click()
   Adodc1.Recordset.Update
End Sub

- เมธอด Cancel สำหรับการลบเรคคอร์ด มีไวยากรณ์ดังนี้

recordset.Cancel

Private Sub cmdCancel_Click()
   Adodc1.Recordset.Cancel
End Sub

อ๊อบเจค Recordset มีชุดของคุณสมบัติและเมธอดที่สามารถใช้ได้จาก ADO Data control เช่น การเรียงหรือการกรอง ในการติดต่ออ๊อบเจค ADO Data control ไม่สามารถรองรับติดต่อโดยตรง แต่ใช้ความสามารถของคุณสมบัติ ActiveConnection ของอ๊อบเจค Recordset ได้

Private Sub Form_Load()
   Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
Persist Security Info=False;Data Source=" & _
"C:\Program Files\Microsoft Visual Studio\Vb98\Nwind.mdb"

   Adodc1.Refresh
   ' เริ่มต้น transaction
   Adodc1.Recordset.ActiveConnection.BeginTrans
   Adodc1.RecordSource = "SELECT * FROM Customers"
End Sub

Private Sub Form_Unload(Cancel As Integer)
   If Not DataChanged Then
      ' no record was changed, do nothing
   ElseIf MsgBox("ยืนยันการเปลี่ยนแปลงข้อมูล?", vbYesNo + vbExclamation) = vbYes Then
      Adodc1.Recordset.ActiveConnection.CommitTrans
   Else
      Adodc1.Recordset.ActiveConnection.RollbackTrans
      Adodc1.Refresh
   End If
End Sub

ADO Data control ใช้ event ของอ๊อบเจค Recordset ในการทำงานตัวอย่าง เช่น MoveComplete, WillChangeRecord และ Error โดย MoveComplete เกิดเมื่อเรคคอร์ดใหม่ เปลี่ยนมาเป็นเรคคอร์ดปัจจุบัน

Private Sub rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.error, _
adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
   ShowEvent txtEvents, "MoveComplete", "adReason", GetReason(adReason), _
"pError", GetError(pError), "adStatus", GetStatus(adStatus)
End Sub

WillChangeRecord เกิดทันทีก่อนที่ ADO data control เขียนข้อมูลลงในฐานข้อมูล

Private Sub rs_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, _
adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
   ShowEvent txtEvents, "WillChangeRecord", "adReason", GetReason(adReason), _
quot;cRecords", cRecords, "adStatus", GetStatus(adStatus)
End Sub

Error เป็น event ไม่ได้ inherited จากอ๊อบเจค Recordset โดย Error เกิดขึ้นเมื่อไม่มีคำสั่งของ Visual Basic ทำงาน

ดาวน์โหลดตัวอย่าง (Adodc.vbp)
ดาวน์โหลดตัวอย่าง (DataFmt.vbp)

 

  

สงวนลิขสิทธิ (C) widebase