VB=>Next3

การแทรกและลบ 

ผู้ใช้สามารถลบแถว 1 แถว หรือมากกว่า โดยเลือกแถวที่ต้องการแล้วกดปุ่ม Delete ซึ่งจะเกิด BeforeDelete event และ AfterDelete event จากนั้นจะเกิดคู่ของ BeforeUpdate event และ AfterUpdate event 

‘ dgdProduct As DataGrid
Private Sub dgdProduct_BeforeDelete(Cancel As Integer)
   ’ ปฏิเสธการลบ สินค้าถ้ามี เรคคอร์ดใน OrderDetail ชี้มาที่สินค้านั้น
   Dim rs As ADODB.Recordset, rsorderdetail As ADODB.Recordset, sql As String
   ’ ดึงเรคคอร์ดทั้งหมดใน OrderDetails ที่อ้างอิงสินค้านี้
   Set rs = adoProduct.Recordset
   sql = “Select * FROM [Order Details] WHERE [Order Details].ProductID = ” & rs(”ProductID”)
   Set rsorderdetail = rs.ActiveConnection.Execute(sql)
   ’ ถ้า recordset เก้นเรคคอร์ดใดๆ ปกิเสธการลบ
   If Not rsorderdetail.EOF Then Cancel = True
End Sub 

ถ้าคุณสมบัติ AllowAddNew เป็น True การมีแถวเปล่าเกิดขึ้นใน DataGrid และมีลักษณะดอกจันจากนั้นผู้ใช้สามารถป้อนข้อมูลเข้าสู่แถวใหม่ ตัว control จะเกิด BeforeInsert event แล้วตามด้วย AfterInsert event แล้วเกิด OnAddNew event 

การเรียงข้อมูล 

DataGrid ไม่มีฟังก์ชันการเรียงข้อมูล แต่สามารถใช้ HeadClick event และคุณสมบัติ Sort ของ Recordset 

Private Sub dgdProduct_HeadClick(ByVal ColIndex As Integer)
   ’ เรียงคอลัมน์ที่คลิก
   Dim rs As ADODB.Recordset
   Set rs = adoProduct.Recordset 

   If rs.Sort dgdProduct.Columns(ColIndex).DataField & ” ASC” Then
      ’ เรียงตามลำดับจากน้อยไปมาก – บล๊อกนี้ได้รับการประมวลผล
      ’ ถ้า grid ไม่มีการเรียงหรือเรียงด้วยฟิลด์อื่น หรือเรียงจากมากไปน้อย
      rs.Sort = dgdProduct.Columns(ColIndex).DataField & ” ASC”
   Else
   ’ เรียงจากมากไปน้อย
      rs.Sort = dgdProduct.Columns(ColIndex).DataField & ” DESC”
   End If
   ’ ไม่ต้อง refresh ข้อมูลของ Data grid
End Sub 

Oct 09

DataCombo และ Data List

หัวข้อพิเศษไอที, VB 6.0 No Comments »

Visual Basic 6 ได้เพิ่ม DataCombo และ DataList ซึ่งเป็น bound control (เป็นตัว control ที่ต้องรวมกับข้อมูล) ตัว control กลุ่มนี้แตกต่างจาก List box และ Combo box เพราะสามารถรวมกับ ADO Data control ที่ต่างกัน 2 ตัว control โดย Data control แรกหาค่าที่เลือกในตัว control (เช่นเดียวกับ List box และ Combo box) และ Data control ที่สองเป็นการเพิ่มข้อมูลเข้ามาเป็นรายการ
DataCombo และ DataList มี lookup ที่ใช้ในการแปลงคำสั่งให้เป็นฟอร์ม เช่น การเลือกข้อมูลจาก table “Products” ในฐานข้อมูล Nwind.mdb โดยให้ฟิลด์ CategoryID มีค่าตรงกับฟิลด์ CategoryID ของ table “Categories” เพื่อแสดงสารสนเทศของสินค้า ด้วยการใช้คำสั่ง INNER JOIN ในการดึงข้อมูลทั้งหมด  

SELECT ProductName,CategoryName FROM Products INNER JOIN Categories
ON Products.CategoryID = Categories.CategoryID 

คำสั่งข้างต้นสามารถใช้ได้กับการประมวลผลข้อมูลด้วยคำสั่ง แต่ไม่สามารถใช้ได้กับตัว control แบบ bound เช่น เมื่อมีการให้ผู้ใช้สามารถปรับปรุงค่าในฟิลด์ CategoryID ของสินค้าจะต้องมีการอินเตอร์เฟซให้มีการ โหลดข้อมูลจาก Table “Categories” ไปสู่ List box หรือ Combo box เพื่อทำให้ผู้ใช้ไม่สามารถป้อนชื่อ Category ที่ผิด ซึ่งจำเป็นต้องมีการเปิด Recordset อันดับสอง 

Dim rsCat As New ADODB.Recordset
rsCat.Open “SELECT ProductName,CategoryName FROM Categories”, cn
lstCategories.Clear
Do until rsCat.EOF
lstCategories.AddItem rsCat(”CategoryName”)
lstCategories.ItemData (lstCategories.NewIndex) = rsCat(”CategoryID”)
Loop
rsCat.Close 

การแสดงค่าลักษณะดังกล่าวทำได้สะดวกใน DataCombo และ DataList ด้วยการตั้งค่า คุณสมบัติจำนวนหนึ่งในเวลาออกแบบ
DataCombo และ DataList อยู่ในไฟล์ MSDATLST.ocx ซึ่งต้องกระจายไปกับโปรแกรมประยุกต์ที่ใช้ตัว control นี้ 

Note: DataCombo และ DataList มีการทำงานคล้ายกับ DbCombo และ DbList (แนะนำใน Visual Basic 5) แต่ต่างกันที่ DataCombo และ DataList ทำงานกับ ADO Data control ส่วน DbCombo และ DbList ทำงานกับ Data control และ Remote Data control 

การตั้งคุณสมบัติเมื่อออกแบบ 

การประยุกต์เครื่องมือ lookup table กับ DataCombo และ DataList จำเป็นต้องวาง ADO Data control 2 ตัวลงบนฟอร์ม ตัวหนึ่งสำหรับชี้ไปที่ table หลัก (ตามตัวอย่างคือ Products ) และอีกตัวชี้ไปที่ lookup table (ตามตัวอย่างคือ Categories ) แล้วตั้งค่าคุณสมบัติ ดังนี้ 

– DataSource อ้างถึง ADO Data control หลัก ที่ชี้ไปยัง table หลัก 

– DataField เป็นชื่อของฟิลด์ใน Table ที่อ้างถึงโดยคุณสมบัติ DataSource และเป็นข้อมูลที่รวมกับตัว control ฟิลด์ที่จะได้รับการปรับปรุงเพื่อค่าใหม่ ได้รับการเลือกในรายการ 

– RowSource เป็นการอ้างถึง ADO Data control ตัวที่สอง ที่ชี้ไปยัง lookup table แสดงรายการของตัว control ที่จะได้รับการเติมข้อมูลจาก lookup table 

– BoundColumn เป็นชื่อของฟิลด์ใน lookup table เพื่อผู้ใช้เลือกค่าในรายการฟิลด์ DataField ใน table หลักจะได้รับค่าจากคอลัมน์นี้ ถ้าไม่กำหนดค่าให้คุณสมบัตินี้ จะใช้ชื่อฟิลด์เดียวกับคุณสมบัติ ListField 

1. ให้สร้างADO Data control (adodc1) ตั้งค่าชี้ไปที่ table “Products” ของฐานข้อมูล NWind.mdb ในแท็บ RecordSource ของ Property Pages
แล้วเพิ่ม Text box จำนวนหนึ่งเพื่อแสดงข้อมูลของฟิลด์ จาก table โดย Text box ทุกตัวให้กำหนด DataSouce เป็น Adodc1 ส่วน DataField ขึ้นกับการแสดงข้อมูลของฟิลด์ เช่น ชื่อสินค้า ให้กำหนดด้วยฟิลด์ “ProductName” ราคาต่อหน่วยกำหนดด้วยฟิลด์ “UnitPrice” 

 

2. ADO Data control อีก 1 ตัว (Adodc2) และตั้งค่าให้ดึงข้อมูลจาก table “Categories” แล้วเพิ่ม DataList ตั้งชื่อว่า “dblCategory” และตั้งคุณสมบัติตามนี้ DataSource = adodc1, DataField = CategoryID, RowSource = adodc2, BoundColumn = CategoryID, ListField = CategoryName 

3. ใน table “Products” มี Foreign key คือ SupplierID ซึ่ง Suppliers สามารถสร้างกลไกการ lookup คือ 1 ชุดโดยการเพิ่ม ADO Data control (Adodc3) ตั้งค่าชี้ไปที่ table “Suppliers” และ DataCombo ตั้งชื่อว่า “dblSupplier” และกำหนดคุณสมบัติดังต่อไปที่ DataSource = adodc1, DataField = SupplierID, RowSource = adodc3, BoundColumn = SupplierID, ListField = CompanyName 

Note: DataCombo และ DataList มีคุณสมบัติอีก 2 อย่าง คือ DataMember และ RowNumber ซึ่งจะมีการกำหนดเมื่อใช้ อ๊อบเจค Command ของ DataEnvironment designer ในฐานะ data source หลักหรืออันดับที่สอง 

การทำงานเมื่อเรียกใช้ 

การทำงาน DataCombo และ DataList ในเวลาเรียกใช้คล้ายกับ Combo box และ List box แต่มีความแตกต่างเล็กน้อย เช่น ไม่มีคุณสมบัติ ListIndex และ ListCount หรือ เมรอด AddItem สำหรับการเพิ่มข้อมูลในรายการ เมื่อเรียกใช้ การเพิ่มรายการทำได้ด้วยการใช้ ADO Data control หรือ แหล่งข้อมูลอื่น ๆ เช่น Recordset หรือ instance ของ DataEnvironment
DataCombo และ DataList มีคุณสมบัติพิเศษ ได้แก่ คุณสมบัติ MatchWithList ซึ่งเป็นคุณสมบัติอ่านอย่างเดียว ส่งออกค่า True ถ้าค่าที่ป้อนใน DataCombo ตรงกับข้อมูลในรายการ คุณสมบัตินี้เป็น True เสมอ ถ้าคุณสมบัติ Style ของ DataCombo และ DataList เป็น 2-dbcDropDownList คุณสมบัติ BoundText ส่งออกหรือตั้งค่าของชื่อฟิลด์ตามคุณสมบัติ BoundColumn ซึ่งเป็นค่าที่จะกำหนดให้กับคอลัมน์ DataField ใน table หลัก 

‘ ในส่วนการประกาศของโมดูลฟอร์ม
Dim rsCategory As New ADODB.Recordset
Dim rsSupplier As New ADODB.Recordset 

‘ ใน sub procedure
rsCategory.Open “Categories”, adoProducts.Recordset.ActiveConnection, _
adOpenDynamic, adLockOptimistic
Set dblCategory.RowSource = rsCategory
rsSupplier.Open “Suppliers”, adoProducts.Recordset.ActiveConnection, _
adOpenDynamic, adLockOptimistic
Set dbcSupplier.RowSource = rsSupplier 

การแสดงสารสนเทศ lookup เบื้องต้น 

คุณสมบัติ SelectedItem ส่งออก bookmark ไปที่ lookup table ที่ตรงกับข้อมูลที่ไฮไลต์ในรายการ ตามปกติการใช้คุณสมบัติเพื่อแสดงสารสนเทศเพิ่มเติมเกี่ยวกับข้อมูลที่เรียก 

Private Sub dbcSupplier_Click(Area As Integer)
‘ ย้ายไปที่เรคคอร์ดที่ถูกต้องใน lookup table.
‘ หมายเหตุ: ฟิลด์ ContactName
‘ ต้องรวมอยู่ในรายการของฟิลด์ที่ส่งออกโดย adoProducts
   ShowSupplierInfo
End Sub 

Click และ Dblcick event ของ DataCombo รับพารามิเตอร์ Area เพื่อระบุตำแหน่งของตัว control ที่ได้รับการเลือก ค่าของพารามิเตอร์ได้แก่ 0-dbcAreaButton, 1-dbcAreaEdit และ 2-dbcAreaList 

กรณีที่ไม่เกิดขึ้น Click event ของ DataCombo เมื่อมีการแสดงเรคคอร์ดในฟอร์ม การแก้ไขต้องใช้การจับ MouseComplete event ของ ADO Data control อันดับแรก 

Private Sub adoProducts_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
‘ บังคับให้ปรับปรุง DataCombo
On Error Resume Next
   dbcSupplier.BoundText = adoProducts.Recordset(”SupplierID”)
   ShowSupplierInfo
End Sub 

การบันทึก Connection 

ADO Data control มีการใช้ทรัพยากร Connection น้อยกว่า Data control ซึ่งการติดต่อของ Data control ในกรณีที่เป็นหลาย Data control ไม่สามารถพื้นที่เดียวกับของทรานแซคชัน และแต่ละ Connection ต้องใช้ทรัพยากรของเครื่องแม่ข่าย ในขณะที่ ADO Data control ลดการใช้ทรัพยากรลง เช่น DataCombo และ DataList ไม่จำเป็นต้องมองเห็น Data control เพราะผู้ใช้ไม่เคยเลื่อนดู lookup table ดังนั้น สามารถให้ผลลัพธ์เดียวกันด้วยการใช้อ๊อบเจค ADO Recordset ตั้งค่าคุณสมบัติของ DataCombo และ DataList ให้รวม ADO Data control สำหรับ lookup table แต่ทำให้คุณสมบัติ RowSource ว่างโดยการกำหนดคุณสมบัตินี้ในเวลาเรียกใช้หลังจากการสร้าง
อ๊อบเจค Recordset ใช้ Connection ร่วมกับ ADO Data control หลัก 

‘ ในส่วนการประกาศของโมดูลฟอร์ม
Dim rsCategory As New ADODB.Recordset
Dim rsSupplier As New ADODB.Recordset 

Private Sub Form_Load()
   adoProducts.ConnectionString = “Provider=Microsoft.Jet.OLEDB.3.51; Persist Security Info=False;Data Source=” & DB_PATH
   adoProducts.Refresh 

   rsCategory.Open “Categories”, adoProducts.Recordset.ActiveConnection, adOpenDynamic, adLockOptimistic
   Set dblCategory.RowSource = rsCategory
   rsSupplier.Open “Suppliers”, adoProducts.Recordset.ActiveConnection, adOpenDynamic, adLockOptimistic
   Set dbcSupplier.RowSource = rsSupplier
   ShowSupplierInfo 

   ’ เริ่มต้นทรานแซคชัน
   adoProducts.Recordset.ActiveConnection.BeginTrans
   IsDirty = False
End Sub 

Oct 09

Data Environment

หัวข้อพิเศษไอที, VB 6.0 No Comments »

DataEnvironment designer เป็นส่วนการทำงานใหม่ใน Visual Basic 6 ที่น่าสนใจมาก โดยระหว่างเวลาออกแบบจะนำเสนออ๊อบเจค ADO ซึ่งมีอีกวิธีที่จะสร้างในขณะเรียกใช้ ความสามารถที่น่าสนใจ คือ สามารถนำแบบการเขียนโปรแกรมไปยังการพัฒนาฐานข้อมูล ทำให้การเขียนโปรแกรมง่ายและสะดวก 

การประยุกต์ DataEnvironment designer สามารถใช้กำหนดพฤติกรรมของ ADO Connection, Command และอ๊อบเจค Recordset การตั้งค่าคุณสมบัติและเมธอดในเวลาออกแบบให้กดปุ่ม F4 เพื่อเปิดตารางคุณสมบัติหรือใช้ property page ของอ๊อบเจค เช่นเดียวกับการทำงานกับฟอร์มและตัว control 

ข้อได้เปรียบอีกประการของอ๊อบเจค DataEnvironment ในเวลาออกแบบ แทนที่การสร้างอ๊อบเจค ADO คือ instance ของ Data Environment เป็น entity ที่เพียงพอในตัวเองที่สามารถเก็บอ๊อบเจคอื่นและคำสั่งที่ใช้จัดการ สามารถเพิ่มคุณสมบัติและเมธอด แบบ public ใน Data Environment designer ทำให้สามารถปรับปรุงการนำมาใช้ใหม่ เหมือนกับ class module เฉพาะที่ใช้ทำงานกับฐานข้อมูล 

การเพิ่ม Data Environment designer ให้กับ project ปัจจุบัน มีวิธีการดังนี้ 

วิธีที่ 1 – ที่เมนู Project เลือกคำสั่ง Add Data Environment (Project เ Add Data Environment)
ถ้าไม่พบคำสั่งนี้ให้เพิ่ม Reference ของ Microsoft Data Environment Instance 1.0 Library ที่เมนู Project เลือกคำสั่ง Reference 

วิธีที่ 2 – ที่ Window ของ Data View คลิกปุ่ม Add Data Environment designer 

วิธีที่ 3 – เมื่อสร้าง Project ใหม่ให้เลือก Data Project จากรายการของ New Project 

อ๊อบเจค Connection 

อ๊อบเจคหลักใน Data Environment designer คือ อ๊อบเจค Connection ซึ่งคล้ายกับอ๊อบเจคฟอร์มใน Form designer ในความหมายที่เป็นอ๊อบเจคระดับบน แต่ต่างกันที่ instance ของ Data Environment designer สามารถเก็บอ๊อบเจคแบบหลาย Connection 

การสร้าง Connection สามารถทำได้ดังนี้ 

วิธีที่ 1 – เมื่อมีการสร้าง DataEnvironment จะมีค่าเริ่มต้นของอ๊อบเจค Connection ให้กำหนดคุณสมบัตินี้ของอ๊อบเจค 

วิธีที่ 2 – กดปุ่ม F 4 เพื่อเปิดตารางคุณสมบัติมาตรฐาน 

วิธีที่ 3 – คลิกเมาส์ปุ่มขวาบนอ๊อบเจค แล้วเลือกคำสั่ง Properties เพื่อเปิด Property Page 

การกำหนด Connection มีวิธีการเดียวกับการตั้งค่าคุณสมบัติ Data Link ใน Window ของ Data View และการสร้างคุณสมบัติ ConnectionString ของ ADO data control
ตารางคุณสมบัติมาตรฐานมีคุณสมบัติจำนวนหนึ่งที่ไม่ปรากฏใน Property page ได้แก่คุณสมบัติ Designer UserName และ DesignPassword ที่ให้ผู้ใช้ตั้งค่าชื่อผู้ใช้และรหัสผ่าน เมื่อต้องการสร้างอ๊อบเจค Data Environment ในส่วน RunUserName และ RunPassword เป็นชื่อผู้ใช้และรหัสผ่านเมื่อประมวลผล คุณสมบัติ DesignPrompBehavior และ RunPrompBehavior สามารถกำหนดได้เป็น 1-adPromptAlways (แสดงไดอะล๊อกบ๊อกซ์ login เสมอสำหรับการแก้ไขข้อมูลการ login), 2-adPromptComplete (แสดงไดอะล๊อกบ๊อกซ์ login เมื่อพารามิเตอร์บางตัวหายไป), 3-adPrompt CompleteRequired (คล้ายกับ 2-ad Prompt Complete แต่ยินยอมให้ผู้ใช้ป้อนพารามิเตอร์ที่ต้องการ), 4-adPrompt Never (ไม่แสดงไดอะล๊อกบ๊อกซ์ login และส่งออกค่าผิดพลาดไปที่โปรแกรมประยุกต์ ถ้าพารามิเตอร์หายไป) ตามปกติ จะตั้งค่าคุณสมบัติ DesignPromptBehavior เป็น adPromptComplete และ RunPromptBehavior เป็น adPrompt Never สำหรับคุณสมบัติ DesignSaveAuthentication และ RunSaveAuthentication เป็นการหาสารสนเทศ login ที่บันทึกใน VBP และไฟล์ EXE 

อ๊อบเจค Command 

อ๊อบเจค Command ใน Data Environment designer เป็นการเสนอการทำงานของฐานข้อมูลอ๊อบเจค Command เป็นลูกของอ๊อบเจค Connection เสมอเช่นเดียวกับตัว control เป็นลูกของฟอร์ม 

การสร้างอ๊อบเจค Command 

การสร้างอ๊อบเจค Command ทำได้ โดยการ drag อ๊อบเจคได้แก่ table, view หรือ stored procedure จาก Window ของ Data View ไปที่ Window ของ Data Environment จากนั้น Visual Basic จะสร้างอ๊อบเจค Command ตรงตาม table, view หรือ stored procedure และสร้าง Connection ที่เป็นแม่ ถ้าจำเป็นอ๊อบเจค Command สามารถเป็นลูกเฉพาะ Connection ที่อ้างถึงฐานข้อมูลของตัวเอง ยังสมมารถสร้างอ๊อบเจค Command จับคู่กับ stored procedure ในฐานข้อมูลโดยการคลิกปุ่ม Insert Stored Procedure บนแถบเครื่องมือ Data Environment 

การอ๊อบเจค Command ภายใน DataEnvironment designer 

1. เลือกอ๊อบเจค Connection แล้วคลิกที่ปุ่ม Insert Command บนแถบเครื่องมือของ DataEnvironment designer 

2. จะมีไอคอนอ๊อบเจค Command ภายในอ๊อบเจค Connection ให้คลิกเมาส์ปุ่มขวา แล้วเลือก Properties จากเมนู popup 

3. จะปรากฏไดอะล๊อกบ๊อกซ์ Property page ของอ๊อบเจค Command ที่เลือก เพื่อกำหนดข้อมูลของ อ๊อบเจค Command ได้แก่ ชื่อ Connection และแหล่งข้อมูล จาก ฐานข้อมูล หรือการใช้คำสั่ง SQL เมื่อกำหนดเสร็จแล้ว ให้คลิก Apply หรือ OK จะปรากฏอ๊อบเจค Command ตามรายละเอียดบน DataEnvironment designer 

อ๊อบเจค Command มี 2 ชนิด คือ ชนิดหนึ่งส่งคืนเป็น Recordset อีกชนิดไม่ส่งคืนเป็น Recordset โดยชนิดแรก คือ คิวรี่ของ SQL, stored procedure, table หรือ view ที่ส่งค่าเป็น Recordset ชนิดที่สองคือคำสั่งของ SQL หรือ stored procedure ในการแทรก ลบ หรือปรับค่าในฐานข้อมูลแต่ไม่มีการส่งคืนค่าเป็นกลุ่มของเรคคอร์ด
คุณสมบัติทั้งหมดของอ๊อบเจค Command สามารถตั้งค่าได้ภายใน property page และไม่จำเป็นต้องเปิดตารางคุณสมบัติมาตรฐาน ที่แท็บ General ให้เลือกอ๊อบเจคฐานข้อมูล เช่น table, view stored procedure หรือ synonym ที่ตรงกับ Command หรือใช้คำสั่ง SQL
ถ้ามีคำสั่ง normal, nonparameterized และ nonhierarchical สามารถข้ามไปที่แท็บ Advanced สำหรับการเลือกประเภท cursor และที่ตั้ง, ประเภทการล๊อก, ขนาดของ cache, ค่า timeout ของคำสั่ง และจำนวนเรคคอร์ดมากที่สุด ที่คิวรี่สามารถส่งออกได้ ซึ่งค่านี้เป็นการป้องกันมาถึงจำนวนเรคคอร์ดมากเกิน ที่อาจจะนำมาสู่ปัญหาการติดต่อของเครือข่าย มีคุณลักษณะเดียวของหน้านี้ ที่ไม่สัมพันธ์กับคุณสมบัติ ADO คือ check box ของ Recordset Returning 

คำสั่ง Parameterized 

การใช้พารามิเตอร์ จะเพิ่มความยืดหยุ่นอย่างมากให้กับอ๊อบเจค Command การสร้างคำสั่ง Parameterized สามารถแบ่งออกเป็น 2 ประเภท คือ พารามิเตอร์แบบ SQL Query และ stored procedure
คำสั่งพารามิเตอร์แบบ SQL Query เป็นการใช้เครื่องหมายคำถามเป็นตำแหน่งของพารามิเตอร์ ในคำสั่ง SQL Query เช่น 

SELECT * FROM Products; 

หลังจากที่ป้อนคิวรี่ในแท็บ General ของไดอะล๊อกบ๊อกซ์ Properties เปลี่ยนไปที่แท็บ Parameter และตรวจ Data Environment ได้จัดการเพิ่มพารามิเตอร์ให้กับคิวรี่แล้ว ในแท็บนี้สามารถกำหนดชื่อให้แต่ละพารามิเตอร์, กำหนดประเภทข้อมูลและขนาดและอื่น ๆ พารามิเตอร์ทั้งหมดในคิวรี่ประเภทนี้เป็นพารามิเตอร์นำเข้า
คำสั่งพารามิเตอร์แบบ stored procedure สร้างโดยการคลิกปุ่ม insert stored procedure และเลือก stored procedure ที่ต้องการใช้งาน ตามปกติ Data Environment สามารถดึงไวยากรณ์ stored procedure และจัดกลุ่ม Collection ให้กับคำสั่งพารามิเตอร์ได้ แต่ต้องระวังเกี่ยวกับคุณลักษณะ Direction ซึ่งบางครั้งอาจผิดพลาดได้เนื่องจาก Data Environment อาจจะไม่ทราบพารามิเตอร์ส่งออก แต่แก้ไขได้ที่คุณลักษณะ Direction 

การรวมข้อมูลด้วย DataEnvironment Designer 

DataEnvironment designer สามารถทำงานในฐานะแหล่งข้อมูล ADO ที่ปรากฏใน Combo box ของคุณสมบัติ DataSource ในตารางคุณสมบัติขณะที่ออกแบบ เมื่อมีการรวมตัว control กับ DataEnvironment designer และต้องตั้งค่าคุณสมบัติ DataMember ของตัว control ชนิด Data-aware ด้วยชื่อของอ๊อบเจค Command ที่เจาะจง มีเฉพาะอ๊อบเจค Command แบบส่งออก Recordset สามารถทำงานในฐานะแหล่งข้อมูล 

ฟิลด์ และตาราง 

การสร้างตัว control บนฟอร์มและรวมเข้ากับอ๊อบเจค DataEnvironment ทำได้โดยการ drag-and-drop 

1. สร้าง Project ใหม่ จะปรากฏฟอร์มเปล่า 

2. ที่เมนู View เลือกคำสั่ง Data View เมื่อปรากฏ Window ของ Data View ให้คลิกที่ปุ่ม Add Data Environment 

3. เมื่อ Window ของ Data Environment เปิดขึ้นมาให้สร้างอ๊อบเจค Command ของ table ชื่อ Customers โดยการเลือก table นี้ใน Window ของ Data View แล้ว drag ไปวางไว้ใน Window ของ Data Environment ซึ่ง Visual Basic จะสร้างอ๊อบเจค Command ให้ชื่อ Customers แบบใช้ Data Source ให้พร้อมสร้างอ๊อบเจค Connection ให้ใหม่ 

4. เลือกอ๊อบเจค Command ใน Window ของ Data Environment มาวางบนฟอร์ม เมื่อวางลงจะปรากฏ Text Box ของแต่ละฟิลด์ในอ๊อบเจค Command บนฟอร์ม 

5. ให้สร้างตัวเลื่อนเรคคอร์ด โดยวาด command button 2 ตัว control ให้ตั้งชื่อว่า cmdNext สำหรับการเลื่อนไปเรคคอร์ดต่อไป และ cmdPreview สำหรับเลื่อนย้อนไปหาเรคคอร์ดก่อนหน้าและกำหนดคำสั่ง 

Private Sub cmdNext_Click()
   DataEnvironment1.rsProducts.MoveNext
End Sub 

Private Sub cmdPrevious_Click()
   DataEnvironment1.rsProduct.MovePrevious
End Sub 

การเลือกประเภทฟิลด์ 

เมื่อวางอ๊อบเจค Command บนฟอร์มแล้ว Data Environment designer จะสร้าง Text Box เป็นค่าเริ่มต้นตามประเภทข้อมูลของฟิลด์ การเปลี่ยนค่าเริ่มต้น ทำได้ดังนี้ 

– คลิกปุ่ม Options บนแถบเครื่องมือ Data Environment จะปรากฏไดอะล๊อกบ๊อกซ์ Options ที่สามารถเลือกซึ่งตัว control จะสร้างขึ้นเมื่อวางฟิลด์ตามประเภทที่กำหนดให้ ประเภทฟิลด์ของ ADO ได้รับการจัดกลุ่มเป็น category แต่สามารถเลือกให้แสดงประเภทข้อมูลทั้งหมดที่ show All Data Type สำหรับแต่ละประเภทฟิลด์ สามารถเลือกให้ตรงกับตัว control แบบ instrinsic และตัว control แบบ ActiveX Drag and Drop Field Caption สามารถเลือกเพื่อใช้สร้าง Label ให้แต่ละฟิลด์ โดย Data Environment designer 

– สามารถเลือกจากประเภทฟิลด์พิเศษ 2 ประเภท Caption เป็นการระบุให้ตัว control เป็น Label ของตัว control อื่น Multiple เป็นตัว control ที่ใช้เมื่อ drag อ๊อบเจค Command ด้วยการใช้เมาส์ปุ่มซ้าย และสามารถระบุเป็นตัว control แบบตาราง 

– สามารถเลือกตัว control สำหรับแต่ละฟิลด์ของอ๊อบเจค Command ที่เจาะจง ด้วยการคลิกเมาส์ปุ่มขวา ใน Data Environment designer คลิกคำสั่ง Properties Menu แล้วเลือกประเภท control และ Caption ที่ใช้เมื่อวางฟิลด์บนฟอร์ม 

Hierarchical Command 

DataEnvironment designer มีการอินเตอร์เฟซ ระหว่างการออกแบบที่มีประโยชน์ของ ADO คือการสร้างโครงสร้างลำดับชั้น (hierarchy) ของ Recordset โดยโครงสร้างนี้มีกลุ่มของเรคคอร์ด ซึ่งอาจจะมี Recordset ที่เป็นลูก เช่น การสร้างรายชื่อลูกค้า จากฐานข้อมูล Nwind.mdb และลูกค้ามีการสั่งสินค้าหลายใบสั่งซื้อ สารสนเทศ เหล่านี้สามารถดึงมาด้วยคำสั่ง SQL แต่การแสดงด้วยโครงสร้างลำดับชั้นของ Recordset (hierarchical Recordset) 

ความสัมพันธ์ของ Hierarchy 

การสร้าง Hierarchical Recordset ภายใน Data Environment designer เป็นคู่ของวิธีการที่แตกต่างกัน สิ่งแรกต้องการแสดงคุณสมบัติความสัมพันธ์ของอ๊อบเจค Command ที่ตรงตาม table หลักในความสัมพันธ์ วิธีการทำ 

1. เปิด Connection ของฐานข้อมูล Nwind.mdb ใน Window ของ Data View เลือก table ชื่อ Categories แล้ว drag ไปที่ Window ของ Data Environment แล้วตั้งชื่อว่า CategoryList 

2. สร้าง Command ลูกโดยเลือก table ชื่อ Product แล้ว drag ไปที่ Window ของ Data Environment ภายในโครงสร้างของ CategoryList เมื่อวางลง Command ลูกจะอยู่ต่อจากรายการฟิลด์ของ List_Customers แล้วตั้งชื่อว่า ProductList 

3. จากนั้นกำหนดความสัมพันธ์ของCommand ลูก ด้วยการเปิด Property page ของอ๊อบเจค List_Customers แล้วเปลี่ยนไปที่แท็บ Relation ให้คลิกเลือก Relation To a Parent Command Object เพื่อปรับค่าตัว control แล้วเลือก Parent Command ในกรณีนี้เลือก CategoryList 

4. ในกรอบ Relation Definition เลือกฟิลด์ที่อ๊อบเจค Command ทั้งสองสัมพันธ์กัน ซึ่งฟิลด์ที่ primary key อยู่ใน Command แม่และฟิลด์ดีเป็น Foreign key อยู่ใน Command ลูกในตัวอย่างนี้คือฟิลด์ CategoryID คลิกปุ่ม Add 

5. จะปรากฏชื่อฟิลด์ทั้งสองในรายการฟิลด์ แล้วคลิก OK 

การปรับปรุงตัวอย่างโดยการสร้าง Command ชื่อ OrderByProduct และให้เป็นลูกของอ๊อบเจค ProductList 

1. คลิกเมาส์ปุ่มขวาบน Command ชื่อ ProductList แล้วเลือก Add Child Command Object 

2. เมื่ออ๊อบเจค Command 1 ได้รับการสร้างให้สร้างเปลี่ยนชื่อเป็น OrderByProduct 

3. เปิด Property page ของ OrderByProduct แล้วเลือกเรคคอร์ดจาก table ชื่อ Order Detail 

4. เปลี่ยนไปที่แท็บ Relation คลิกที่ check box ของ Relate to a Parent Command Object แล้วกำหนดความสัมพันธ์ของ Command ทั้งสองคือ ProductList และ OrderByProduct มีความสัมพันธ์ด้วยฟิลด์ ProductID 

5. ไปที่แท็บ Grouping ให้เลือกฟิลด์ที่ใช้จัดกลุ่ม ให้เลือกฟิลด์ ProductID ต้องคลิกเลือก Group Command Object ที่ check box 

6. ไปที่แท็บ Aggregate เลือกฟิลด์ที่ใช้หาผลรวม ให้เลือก Sum ฟิลด์ Quantity และ Count ฟิลด์ OrderID 

7. คลิกปุ่ม Add เพื่อระบุฟิลด์ในรายการฟิลด์ แล้วคลิก OK 

ทดสอบอ๊อบเจคที่สร้างขึ้น ให้เพิ่ม Microsoft Hierarchical Flex Grid control โดยการเพิ่ม component นี้ 

1. ไปที่เมนู Project คลิกที่ Component เมื่อไดอะล๊อกบ๊อกซ์ของ Component แสดงขึ้น ให้เลือก Microsoft Hierarchical Flex Grid control แล้วคลิก OK 

2. สร้างฟอร์มใหม่ 

3. เลือก CategoryList แล้ว drag ด้วยการคลิกเมาส์ปุ่มขวา แล้วลงบนฟอร์ม 

4. จะปรากฏฟอร์มแบบ Master/Detail โดย CategoryList จะเป็นฟอร์ม Master และ ProductList เป็นฟอร์ม Detail ของ HierarchicalFlexGrid แสดงผลรวมด้วย OrderByProduct_Grouping และรายละเอียดของแต่ละกลุ่มด้วย OrderByProduct ภายใน HierarchicalFlexGrid ของ ProductList 

5. ทำการซ่อนบางคอลัมน์ด้วยคลิกเมาส์ปุ่มขวาบนตาราง เลือกคำสั่ง Retrieve Command คลิกเมาส์ปุ่มขวาเพื่อแสดงไดอะล๊อกบ๊อกซ์ Properties แล้วเปลี่ยนไปที่แท็บ Bands 

6. ในแท็บ Bands ใช้กำหนดฟิลด์ที่ให้เห็นได้บนฟอร์มของ Recordset สามารถเปิดดูความสัมพันธ์ในแต่ละ Band เช่น Band0 (ProductList) Band1 (OrderByProduct_Grouping) Band2 (OrderByProduct) โดยให้คลิกที่ check box หน้าฟิลด์ 

7. เรียกใช้โปรแกรมประยุกต์ จะปรากฏตารางข้อความตามความสัมพันธ์ โดยผู้ใช้สามารถขยายหรือลดแถวโดยการคลิกเครื่องหมายบวก และลบใกล้ขอบด้านซ้ายของตาราง 

Grouping Hierarchy 

Data Environment designer สนับสนุน hierarchy 2 ประเภท คือ Grouping hierarchy และ Aggregate hierarchy แนวคิดของ Grouping hierarchy เป็นแนวคิดที่ง่าย เริ่มต้นด้วยอ๊อบเจค Command และสร้าง Command แม่ที่จัดกลุ่มเรคคอร์ดของ Command เดิมด้วยฟิลด์ 1 ฟิลด์ หรือมากกว่า ตัวอย่างเช่น การสร้างกลุ่มของ ProductID ด้วย วาง table ชื่อ Order Detail บน Window ของ Data Environment แล้วเปิด Property page ของ Grouping ให้เลือก Group Command Object เพื่อทำให้ตัว control เข้าถึงได้ ในหน้านี้ คลิกเลือกฟิลด์ ProductID จากรายการด้านซ้าย มายังด้านขวา แล้วปิดไดอะล๊อกบ๊อกซ์ ใน Data Environment designer จะมีอ๊อบเจค Command เพิ่มขึ้นใต้ Connection หลักชื่อ OrderByProduct_Grouping และไดเรคทอรี 1 ไดเรคทอรี ข้างใต้ ไดเรคทอรี หนึ่งเก็บฟิลด์ ProductID อีกไดเรคทอรีเก็บฟิลด์ของ Command เดิมไว้ 

 

Aggregate hierarchy 

ฟิลด์ aggregate เป็นฟิลด์คำนวณที่คำนวณด้วย expression พื้นฐาน (sum, count, overage เป็นต้น) ให้กับฟิลด์ที่กำหนดทุกแถวของ Recordset การเพิ่มฟิลด์ aggregate ทำเมื่อมีการใช้ grouping hierarchy จากตัวอย่างใน Grouping hierarchy ให้นับจำนวนใบสั่งซื้อ ด้วยการ Count ฟิลด์ OrderID ภายใต้กลุ่มของแต่ละ ProductID และ เพิ่มฟิลด์ SumQty เพื่อหาผลรวมของฟิลด์ Quantity ภายใต้กลุ่มของแต่ละ ProductID 

ฟิลด์ aggregate กำหนดในแท็บ Aggregate ของไดอะล๊อกบ๊อกซ์ คลิกปุ่ม Add เพื่อฟิลด์ aggregate ใหม่ ตั้งชื่อและเลือกฟังก์ชันที่มีให้ คือ COUNT, SUM, AVERAGE, MINIMUM, MAXIMUM, STANDARD DEVIATION หรือ ANY โดย Combo Box ของ Aggregate On จะหาฟิลด์ aggregate และประเมินให้เป็นอย่างใดอย่างหนึ่งจาก Grouping, Grand Total หรือชื่อของ Command ลูก ถ้าเลือก Grand Total จะสามารถป้อนชื่อของฟิลด์ได้ 

Oct 09

Data View

หัวข้อพิเศษไอที, VB 6.0 No Comments »

Visual Basic 6 มีเครื่องมือ Visual Database ในชุด Professional ซึ่งเป็นชุดของเครื่องมือสำหรับการทำงานกับฐานข้อมูลใน IDE ในขณะที่ Visual Basic 5 มีให้ในชุด Enterprise สำหรับ Database Designer window และ Query Designer Window มีให้เฉพาะ Visual Basic 6 ชุด Enterprise 

Data View Window 

การเข้าไปใช้เครื่องมือ Visual Database ต้องเข้าผ่าน window ของ Data View ซึ่งการเปิด window ใช้คำสั่งในเมนู View หรือคลิกบนปุ่มสีเหลืองบนแถบเครื่องมือมาตรฐาน Window ที่เป็นรวมสำหรับการติดต่อฐานข้อมูล และสามารถแสดง table, view, ไดอะแกรม และ stored procedure ในฐานข้อมูล (ในฐานข้อมูล Oracle สามารถมองเห็นไดเรคทอรีอีก 2 ไดเรคทอรี คือ Function และ Synonyms) ผู้ใช้สามารถขยายโหนดของ table หรือ view เพื่อดูฟิลด์ภายใน table หรือ view ของ Data View สามารถนำไปประยุกต์ได้ คือ
การเปิด Data View Windows ให้ไปที่เมนู View เลือก Data View Window จะปรากฏ window ของ Data View บนหน้าจอ การประยุกต์บน window ของ Data View สามารถสรุปได้ คือ 

 

– สร้างการเชื่อมข้อมูล (Data Link) และเพิ่มเข้าไปยัง Window ของ Data View โดยการคลิกปุ่มขวาสุด บนแถบเครื่องมือของ Data View จากนั้นจะปรากฏไดอะล๊อกบ๊อกซ์ของ Data Link Properties สำหรับกำหนดการเชื่อมต่อกับฐานข้อมูล ผู้ใช้สามารถลบการเชื่อมข้อมูลที่มีอยู่ หรืออ๊อบเจคที่ปรากฏ อยู่ใน Window โดยการคลิกที่การเชื่อมข้อมูลหรืออ๊อบเจค แล้วกดปุ่ม Del บนแป้นพิมพ์ หรือคลิกเมาส์ด้านขวาแล้วเลือกคำสั่ง Remove บนเมนู popup การสร้าง connection ของการเชื่อมข้อมูลเป็นการเก็บใน Registry ของระบบและไม่สัมพันธ์กับ Project ของ Visual Basic 

– การดูข้อมูลของ table หรือ view โดยเลือกชื่อ table หรือ view แล้วดับเบิลคลิกหรือเลือกคำสั่ง Open บนเมนู popup 

– สร้าง table ของฐานข้อมูลใหม่ โดยการสร้างคลิกเมาส์ปุ่มขวาบนโฟลเดอร์ของ table แล้วเลือกคำสั่ง New table ในเมนูเดียวกับผู้ใช้สามารถเลือกสามารถแสดงหรือซ่อน system table หรือกรอง table แต่ความสามารถที่ไม่ได้สนับสนุนโดยฐานข้อมูลทุกประเภท เช่น provider ของ SQL Server สนับสนุนในขณะที่ provider ของ Jet ไม่สนับสนุน 

– การเปลี่ยนผังของ table โดยการคลิกเมาส์ปุ่มขวาแล้วเลือกคำสั่ง Design ซึ่งความสามารถนี้ได้รับการสนับสนุนจากฐานข้อมูลบางประเภท 

– การดู Attributes ให้การคลิกเมาส์มุ่มขวาบนอ๊อบเจค และเลือกคำสั่ง Properties ผู้ใช้สามารถใช้ประโยชน์ในการเปลี่ยนค่าสำหรับการติดต่อ ความเป็นเจ้าของในแต่ละ table และประเภทของคอลัมน์ 

– การสร้าง stored procedure ใหม่หรือแก้ไข ซึ่ง stored procedure เป็นอนุกรมของคำสั่งฐานข้อมูลที่เก็บในฐานข้อมูลในการคอมไฟล์ และกำหนดค่าเหมาะสมให้ฟอร์ม stored procedure ยอมรับพารามิเตอร์ และส่งออกกลุ่มของเรคคอร์ด และ stored procedure สามารถแก้ไขใน SQL Editor และเครื่องมือในชุดเครื่องมือ Visual Database 

– การเพิ่ม Trigger ใหม่ให้กับ table ที่มีอยู่ โดยการเลือกคำสั่ง New Trigger จากเมนู pop-up ซึ่ง Trigger เป็น Store Procedure พิเศษ ที่ประมวลผลอัตโนมัติ เมื่อเรคคอร์ดใน table มีการปรับปรุง เพิ่มหรือลบ 

– สร้างไดอะแกรมของฐานข้อมูลใหม่หรือแก้ไข โดยการเลือกคำสั่งจากเมนู pop-up เมื่อคลิกเมาส์ปุ่มขวาที่ไดเรคทอรี Database Diagram หรือบนอ๊อบเจค Database Diagram ที่มีอยู่ ไดอะแกรมของฐานข้อมูลเป็นมุมมองของกราฟฟิก ของ table ทั้งหมดหรือบางส่วนในฐานข้อมูลที่แสดงความสัมพันธ์ (Relationships) ระหว่างอ๊อบเจค 

การสร้าง Connection ใหม่
การทำงานฐานข้อมูลใน Window ของ Data View ต้องมีการสร้างการเชื่อมข้อมูลไปยังฐานข้อมูล การเชื่อมข้อมูลประกอบด้วยสารสนเทศหลายอย่าง เช่น ชื่อของ OLE DB provider ที่ใช้ในการติดต่อกับ engine ของฐานข้อมูล ซึ่งของฐานข้อมูลที่เจาะจงในการติดต่อ และการข้อมูลของการ login เช่น ชื่อผู้ใช้และรหัสผ่าน 

1. การสร้างการเชื่อมข้อมูลใหม่ ทำได้โดยการคลิกปุ่มขวาสุด บนแถบเครื่องมือของ Data View หรือโดยการคลิกคำสั่ง Add a Data Link จากเมนู popup จากนั้นจะปรากฏไดอะล๊อกบ๊อกซ์ของ Data Link Properties สำหรับกำหนดการเชื่อมต่อกับฐานข้อมูล 

2. ที่แท็บ Provider ของไดอะล๊อกบ๊อกซ์ Data Link Properties ให้เลือก provider ที่ต้องการใช้ติดต่อกับฐานข้อมูล ค่าเริ่มต้น ของ ADO ใช้ Microsoft OLE DB provider for ODBC drivers (MSDASQL ซึ่งให้ผู้ใช้ติดต่อกับฐานข้อมูลแบบสัมพันธ์และ ISAM สำหรับแหล่งข้อมูลบางประเภทให้เลือก provider เฉพาะเพื่อสร้างข้อมูล เมื่อเลือก provider ตามที่แสดงให้เห็นในรายการ ตามตัวอย่างเลือก Microsoft Jet 3.5.1 OLE DB provider แล้วคลิกปุ่ม Next หรือแท็บ Connection 

3. ที่แท็บ Connection โดยรายละเอียดของแท็บขึ้นกับ provider ที่เลือกกำหนดการเชื่อมต่อ ให้กำหนดฐานข้อมูล ในช่อง1. Select or enter a database name ในช่อง 2. การ login ขึ้นกับการประยุกต์ อาจจะทดสอบการเชื่อมต่อด้วยการคลิกปุ่ม Test Connection ถ้าการเชื่อมต่อถูกต้อง จะมีไดอะล๊อกบ๊อกซ์แจ้งว่า “Test connection succeeded” ถ้าติดต่อไม่ได้ จะมีข้อความแจ้งว่า “Test connection failed” พร้อมสาเหตุ แล้วคลิกปุ่ม OK 

4. แท็บ Advance ใช้ในกรณีที่มีเงื่อนไขการเข้าถึงเพิ่มเติม เช่น การเข้าถึงฐานข้อมูล และป้องกันความผิดพลาด timeout โดยการตั้งค่าคุณสมบัติ timeout สูงขึ้น 

5. All เป็นการสรุปคุณสมบัติทั้งหมดของการติดต่อ รวมถึงคุณลักษณะ และสามารถเข้าไปแก้ไขข้อมูลได้ โดยเลือกรายการข้อมูลและคลิกที่ปุ่ม Edit Value
ตามปกติข้อมูลพื้นฐานในการสร้างการเชื่อมกับข้อมูลอยู่ที่แท็บ Provider และ Connection ซึ่งเพียงในการทำงาน
ถ้าเป็นการเลือก provider อื่นๆ เช่น การเลือก ODBC เมื่อมาที่แท็บ Connection จะมีข้อมูลคือ การเลือก Data Source ในช่อง1. Specify source of data และระบุพาร์ทของฐานข้อมูล ในช่อง 3. Enter initial catalog to use ส่วนช่อง 2. Enter information to login ขึ้นกับการประยุกต์
ถ้าเป็นการเลือกเมื่อการมีการติดต่อกับฐานข้อมูล SQL Server ใช้ Microsoft OLE DB Provider for SQL Server 6.5 โดยผู้ใช้สามารถเลือกชื่อแม่ข่าย ป้อนข้อมูลการ login และเลือกชื่อฐานข้อมูล (ADO เรียกว่า initial catalog) ในกรณีที่ SQL Server ใช้ชื่อและรหัสผ่านในเวลา login เพื่อตรวจสอบสอนสิทธิ์ในการเข้าถึงแม่ข่าย คลิกปุ่ม Test Connection เพื่อตรวจสอบทุกอย่าง 

ถ้าใช้ Microsoft OLE DB provider for ODBC drivers ข้อมูลในแท็บ Connection จะแตกต่างออกไป ในกรณีนี้สามารถเลือก DSN หรือ ข้อความการติดต่อ (สำหรับ DSN-Lass Connection) ถ้าเลือกใช้ Connection String ผู้ใช้สามารถสร้างการเริ่มต้นด้วย DSN ที่มีอยู่หรือสร้างใหม่ และสามารถป้อนค่าคุณสมบัติอื่นใน ไดอะล๊อกบ๊อกซ์ ซึ่งมีรายละเอียดตามไดร์ฟเวอร์ของ ODBC ถ้ามีการป้อนค่าของชื่อผู้ใช้รหัสอ่านและชื่อฐานข้อมูล ใน ไดอะล๊อกบ๊อกซ์ ผู้ใช้ไม่จำเป็นต้องป้อนค่าอีกใน Wizard ต่อไป 

Oct 09

Data Form

หัวข้อพิเศษไอที, VB 6.0 No Comments »

Data Form Wizard 

Wizard ของ Data Form เป็นฟอร์มที่เชื่อมต่อกับฐานข้อมูลที่มีให้ใน add-in ของ Visual Basic 6 ซึ่งสามารถใช้สร้างฟอร์มโดยอัตโนมัติด้วยกลุ่มของตัว control ที่รวมเข้ากับแหล่งข้อมูล และสร้างปุ่มคำสั่งสำหรับการทำงานปกติ เช่น การเพิ่มหรือลบเรคคอร์ด วิธีรวมกับแหล่งข้อมูล สามารถเลือกเป็น ADO Data control, ADO Recordset หรือ class modules 

วิธีการสร้างฟอร์มด้วย Data Form Wizard 

ที่เมนู Project เลือกคำสั่ง Add Form จะปรากฏไดอะล๊อกบ๊อกซ์ Add Form ให้เลือก VB Data Form Wizard แล้วคลิก Open เพื่อเข้าสู่การสร้างฟอร์มด้วย Data Form Wizard มีขั้นตอน คือ 

1. Wizard ขั้นตอนที่ 1 Introduction เพื่อให้ถึง Profile มาใช้งาน คลิก Next เพื่อไปที่ขั้นตอนที่ 2 

2. Wizard ขั้นตอนที่ 2 Database Type เลือกประเภทฐานข้อมูลจากรายการ คลิก Next เพื่อไปที่ขั้นตอนที่ 3 

3. Wizard ขั้นตอนที่ 3 ชี้ตำแหน่งของฐานข้อมูล (ตามตัวอย่างเลือก Access) ถ้าเป็นการเลือก ODBC จะต้องกำหนดรายละเอียดข้อมูลการติดต่อผ่าน ODBC คลิก Next เพื่อไปที่ขั้นตอนที่ 4 

4. Wizard ขั้นตอนที่ 4 ให้กำหนดประเภทของฟอร์ม และการรวมกับข้อมูล คลิก Next เพื่อไปที่ขั้นตอนที่ 5 

 

5. Wizard ขั้นตอนที่ 5 การสร้างฟอร์ม ด้วยการเลือก table แล้วเลือกฟิลด์จากช่องด้านซ้าย และคลิกปุ่มการเลือกให้มาอยู่ในช่องด้านขวา ตามตัวอย่างเป็นในขั้นตอนที่ 4 เป็นการเลือก Master/Detail ขั้นตอนนี้จึงเป็นการเลือกแหล่งข้อมูลและฟิลด์สำหรับฟอร์มที่เป็น Master 5 แล้วคลิก Next เพื่อไปขั้นตอนต่อไป 

6. Wizard ขั้นตอนนี้ เป็นการสร้างฟอร์มที่เป็น Detail ซึ่งให้ทำการกำหนดและเลือกตามข้อ 5 แต่ถ้าเป็นการเลือกฟอร์มประเภทอื่นๆ จะไม่มีขั้นตอนนี้ แล้วคลิก Next เพื่อไปขั้นตอนต่อไป 

7. Wizard ขั้นตอนนี้ เป็นระบุฟิลด์ที่เชื่อมระหว่างฟอร์ม Master กับ Detail แล้วคลิก Next เพื่อไปขั้นตอนที่ 6
ขั้นตอนนี้เหมือนกับข้อ 7 คือ มีเฉพาะฟอร์มประเภท Master/Detail 

8. Wizard ขั้นตอนที่ 6 กำหนดปุ่มคำสั่งบนฟอร์ม คลิก Next เพื่อไปขั้นตอนที่ 7 

9. Wizard ขั้นตอนที่ 7 ฟอร์มได้รับการสร้างเสร็จเรียบร้อย ขั้นตอนนี้เป็นการเก็บเป็น profile แล้วคลิกปุ่ม Finish เพื่อออกจาก Wizard 

10. เมื่อออกจาก Wizard แล้วจะพบฟอร์มที่สร้างเสร็จเรียบร้อยแล้ว 

Oct 09

ADO Data Control

หัวข้อพิเศษไอที, VB 6.0 No Comments »

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 คุณสมบัติ การตั้งค่า

อ๊อบเจค ตัว 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 ทำงาน

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s