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