วันพุธที่ 7 กันยายน พ.ศ. 2554

การเชื่อมต่อฐานข้อมูลโดยใช้ ADO Data control

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 ทำงาน


ไม่มีความคิดเห็น:

แสดงความคิดเห็น