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
 

DataEnvironment

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 จะสามารถป้อนชื่อของฟิลด์ได้

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

 

  

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