Transcript Document

บทที่ 8
การเขียนโปรแกรมฐานข้ อมูลด้ วย Data
Control
สื่ อชุดนี้เป็ นลิขสิ ทธิ์ของสำนักพิมพ์วงั อักษร ใช้ประโยชน์เพื่อกำรศึกษำเท่ำนั้น
ความรู้ ทวั่ ไปเกีย่ วกับ Relational Database


Relational Database คือกลุ่มของข้ อมูลทีส่ ั มพันธ์ กนั (Relation) ซึ่ง
จัดเก็บอยู่ในรูปของตาราง (Table) แต่ ละตารางจะประกอบไปด้ วยกลุ่ม
ของ Record โดยแต่ ละ Record จะประกอบไปด้ วยกลุ่มของ Field
ดังนั้นจึงอาจกล่าวได้ ว่าแต่ ละตารางก็เปรียบเสมือนกับ Spread Sheet ที่
มี Record แสดงอยู่ในรูปของแถว (Row) และ Field แสดงอยู่ในรูปของ
สดมภ์ (Column)
ประเภทของความสั มพันธ์ ระหว่ าง Table แบ่ งออกเป็ น 3 ประเภทคือ






ประเภทที่ 1
ความสั มพันธ์ แบบ One-to-Many
หมายถึง ข้ อมูล 1 Record ใน Table หนึ่งจะมีความสั มพันธ์ กบั ข้ อมูลในอีก Table
หนึ่งมากกว่ า 1 Record เช่ น เจ้ าของบัญชีเงินฝากธนาคาร 1 คน สามารถมีบัญชี
เงินฝากได้ มากกว่ า 1 บัญชี
ประเภทที่ 2
ความสั มพันธ์ แบบ One-to-One
หมายถึง ข้ อมูลแต่ ละ Record ใน Table หนึ่งจะมีความ สั มพันธ์ กบั ข้ อมูลในอีก
Table หนึ่งเพียง Record เดียว เช่ น กรณีมกี ารกาหนดให้ บัญชีเงินฝากธนาคารแต่
ละบัญชีจะมีเจ้ าของบัญชีได้ เพียงคนเดียว
ประเภทที่ 3
ความสาพันธ์ แบบ Many-to-Many
หมายถึง หลาย Record ใน Table หนึ่งจะมีความสั มพันธ์ กบั อีกหลาย Record ใน
อีก Table หนึ่ง เช่ น เจ้ าของบัญชีเงินฝาก 1 คน สามารถเป็ นเจ้ าของบัญชีเงินฝาก
ได้ มากกว่ า 1 บัญชี และแต่ ละบัญชีเงินฝากสามารถมีเจ้ าของบัญชีได้ มากกว่ า 1 คน
ตารางหรือ Table

Table เป็ นพืน้ ทีท่ ใี่ ช้ ในการเก็บข้ อมูลจริงๆ ในฐานข้ อมูล แต่ ละตารางจะ
อยู่ในรูปของตารางขนาด 2 มิติ โดยทีแ่ ต่ ละแถวหรือ Row ได้ แก่ Record
ส่ วนสดมภ์ หรือ Column จะได้ แก่ Field หรือ Attribute ซึ่งจะต้ องมี
คุณสมบัติทปี่ ระกอบไปด้ วย ชื่อ ประเภทของข้ อมูล และขนาด ดังรูป
Data Control


Visual Basic จะอาศัย Control ชื่อ "Data" (มักจะเรียกว่ า "Data Control") ใน
การทางานร่ วมกับ Database โดยที่ 1 Data Control จะใช้ อ้างถึง 1 Table หรือ
มากกว่ าใน
ฐานข้ อมูล (กรณีทอี่ ้างถึงมากกว่ า 1 Table จะหมายถึง การนาเอา Table ต่ างๆ ที่
สั มพันธ์ กนั มา Join กัน) ข้ อมูลทีถ่ ูกอ่ านจาก Table มาเก็บไว้ ใน Data Control จะ
เรียกว่ า "Recordset" ดังนั้นจึงอาจกล่าวได้ ว่า Recordset ได้ แก่ กลุ่มของ Record
ใน Table ซึ่งอาจมาจาก 1 หรือมากกว่ า 1 Table ทีถ่ ูกอ่ านเข้ ามาเก็บไว้ ในตัว Data
Control ตามเงือ่ นไขทีก่ าหนด ในการอ้างถึง Recordset ใน Data Control ให้ เขียน
อยู่ในรู ปแบบ ดังนี้
datacontrol.Recordset.methodperty
Data Control นีจ้ ะอยู่ในรู ปแบบของ VCR-Style ซึ่งประกอบด้ วย
ปุ่ มลูกศร จานวน 4 ปุ่ ม ทั้ง 4 ปุ่ มนีจ้ ะใช้ สาหรับเลือ่ น Pointer ของ
Record ดังนี้
 -ปุ่ มหมายเลข 1 ใช้ สาหรั บเลือ
่ น Pointer ไปยัง Record แรกใน
Recordset
 -ปุ่ มหมายเลข 2 ใช้ สาหรั บเลือ
่ น Pointer ไปยัง Record ก่ อนหน้ า
Record ปัจจุบันใน Recordset
 -ปุ่ มหมายเลข 3 ใช้ สาหรั บเลือ
่ น Pointer ไปยัง Record ถัดจาก
Record ปัจจุบันใน Recordset
 -ปุ่ มหมายเลข 4 ใช้ สาหรั บเลือ
่ น Pointer ไปยัง Record สุ ดท้ ายใน
Recordset

Method ทีใ่ ช้ ในการจัดการข้ อมูล

ในการเพิม่ ข้ อมูลเข้ าไปยัง Table ต่ างๆ ใน Database จะอาศัย Method
"Addnew" เพือ่ สร้ าง Record ว่ างต่ อเพิม่ เข้ าไปใน Recordset
recordset.AddNew

Method ทีใ่ ช้ ในการบันทึกข้ อมูลทีม่ ีการแก้ไข ได้ แก่ Method "Update"
โดยจะบันทึกข้ อมูลทีป่ รากฏอยู่ใน Oject ที่เป็ น Bound Control กลับลง
ไปยัง Record ปัจจุบันใน Recordset รูปแบบของคาสั่ งเป็ นดังนี้
recordset.Update

Method ทีใ่ ช้ สาหรับลบข้ อมูล Record ปัจจุบันออกจาก Recordset ได้ แก่
Method ’Delete“
recordset.Delete

ในการลบ Record ทุกครั้งหลังจากลบ ควรทีจ่ ะมีการขยับ Pointer เนื่องจาก
Record ปัจจุบันได้ ถูกลบไปเพือ่ ป้องกันการสั บสนว่ า Pointer ชี้ไปที่ Record
ใด สาหรับ Method ที่ใช้ ในการเลือ่ น Pointer ได้ แก่ Method"MoveFirst",
"MoveNext", "MoveLast" และ "MovePrevious





ทั้ง 4 Method นี้ จะมีรูปแบบของคาสั่ งเช่ นเดียวกัน สาหรับหน้ าทีข่ องแต่
ละ Method มีดังนี้
1. MoveFirst ใช้ สั่งให้ Data Control เลือ่ น Pointer ไปยัง Record แรก
ใน Recordset
2. MoveLast ใช้ สั่งให้ Data Control เลือ่ น Pointer ไปยัง Record
สุ ดท้ ายใน Recordset
3. MoveNext ใช้ สั่งให้ Data Control เลือ่ น Pointer ไปยัง Record ถัดไป
ใน Recordset
4. MovePrevious ใช้ สั่งให้ Data Control เลือ่ น Pointer ไปยัง Record
ก่อนหน้ า ใน Recordset

1.
2.
3.
4.
Method ทีใ่ ช้ ในการค้ นหาข้ อมูลใน Recordset จะประกอบไปด้ วย
EindFirst ใช้ สาหรับค้ นหา Record โดยทิศทางในการหาจะเริ่มจาก
Record แรก ไปยัง Record สุ ดท้ ายใน Recordset จนกระทั่งพบ Record
ซึ่งตรงกับเงื่อนไขในการค้นหา
FindLast ใช้ สาหรับค้ นหา Record โดยทิศทางในการหาจะเริ่มจาก
Record สุ ดท้ ายไปยัง Record แรกใน Recordset จนกระทั่งพบ Record ซึ่ง
ตรงกับเงื่อนไขในการค้ นหา
FindNext ใช้ สาหรับค้ นหา Record โดยทิศทางในการหาจะเริ่มจาก
Record ปัจจุบันไปยัง Record สุ ดท้ ายใน Recordset จนกระทั่งพบ Record
ซึ่งตรงกับเงื่อน ไขในการค้ นหา
FindPrevious
ใช้ สาหรับค้ นหา Record โดยทิศทางในการหาจะเริ่ม
จากRecord ปัจจุบันไปยัง Record แรกใน Recordset จนกระทั่งพบ Record
ซึ่งตรงกับเงื่อนไขในการค้นหา
DBCombo และ DBList


DBCmbo และ Control ที่มีลกั ษณะการทางานคล้ายกับ ComboBox
เช่ น ComboBox
ส่ วน DBList เป็ น Control ที่มีลกั ษณะการทางานคล้ายกับ ListBox แต่
ต่ างกันทีท่ ้งั 2 Control นี้ จะสามารถเข้ าถึงข้ อมูลใน Recordset ได้
โดยตรง แต่ เนื่องจากทั้ง 2 Control นี้ ไม่ ได้ เป็ น Bound Control
มาตรฐาน ดังนั้น จึงต้ องเพิม่ เข้ ามาไว้ ใน Toolbox ก่อน โดยมีข้นั ตอน
ดังนี้
1.
เลือกเมนู Project และ Components ตามลาดับ จะปรากฏจอภาพ
Components ให้ เลือก "Microsoft Data Bound List Control 6.0"
ดังรูป

คลิกทีป่ ุ่ ม OK จะปรากฏ 2 Control ใหม่ ซึ่งได้ แก่ DBList และ
DBCombo ใน Toolbox ดังรูป
DBGrid

DBGrid เป็ น Control ทีใ่ ช้ นาเสนอข้ อมูลในลักษณะของ Spreadsheet
และเป็ นอีก Control หนึ่งทีไ่ ม่ ใช่ Bound Control มาตรฐาน ดังนั้น จึง
ต้ องเพิม่ เข้ ามาไว้ ใน Toolbox โดยเลือก "Microsoft Data Bound Grid
Control (SP3)" ในจอภาพ Components สาหรับ Icon ที่ใช้ แทน
DBGrid ใน Toolbox (ลูกศรชี้) จะมีลกั ษณะดังรูป
การเข้ าถึงข้ อมูลใน Field โดยไม่ ต้องใช้ Bound Control

การเข้ าถึงข้ อมูลใน Field นอกเหนือจากการใช้ Bound Control แล้ว เรา
ยังสามารถเข้ าถึงข้ อมูลได้ โดยการเขียนโปรแกรม เช่ น การนาค่ า Field
มาเก็บไว้ ในตัวแปร เป็ นต้ น ในการเข้ าถึงข้ อมูลใน Field จะต้ องอาศัย
Property "Value" ซึ่งรูปแบบในการอ้างถึงดังนี้
Datacontrol.Recordset.field.Value
Event "Reposition"



จะเกิดอะไรขึน้ เมื่อมีการเลือ่ น Pointer ของข้ อมูล ซึ่งอาจเกิดจากการ
คลิกทีป่ ุ่ มทั้ง 4 ปุ่ มของ Data Control หรือเกิดการใช้ Method ที่
ก่อให้ เกิดการเลือ่ น Pointer ของข้ อมูลขึน้ เช่ น Method "MoveFirst",
'MoveLast", "FindFirst", "FindLast" เป็ นต้ น
Data Control กับ SQL
SQL จะประกอบไปด้ วย 2 ส่ วนคือ Data Definition Language (DDL)
ซึ่งใช้ สาหรับสร้ างฐานข้ อมูล และ Date Manipulation Language
(DML) ซึ่งใช้ สาหรับจัดการกับฐานข้ อมูล แต่ ในทีน่ ี้ เราจะให้ เกิดความ
สนใจเฉพาะในส่ วนของ DML คาสั่ งของ SQL ในส่ วนของ DML มักจะ
อยู่ในรูป
SELECT fieldlist FROM tablelist WHERE condition
การใช้ งาน SQL

ในการใช้ งาน SQL กับ Data Control จะใช้ การกาหนดประโยคคาสั่ งที่
เขียนขึน้ ด้ วย SQL ลงใน Property "RecordSource" Data ของ
Control แทนการกาหนดชื่อ Table ในลักษณะเดิม แล้วจึงใช้ Method
"Refresh" เพือ่ สั่ งให้ Data Control ทางานตามคาสั่ งทีก่ าหนด
Recordset.Refresh

การเชื่อมโยงของข้ อมูลระหว่ าง Table ที่สัมพันธ์ กนั ภายในภาษา SQL จะ
อาศัยคาสั่ ง INNER JOIN ซึ่งมีรูปแบบดังนี้
INNER JOIN table ON relaterfield