การเขียนโปรแกรมจัดการฐานข้อมูลด้วยแมโคร
เรื่องของตัวแปร
ตัวแปรของ VBA แบงออกเปนหลายประเภท ตัวแปรที่ ควรรูจัก มีดังนี้เรื่องของ Object Object หรือวัตถุจะมีคุณลักษณะ property ซึ่งจะบอกใหทราบถึงลักษณะของวัตถุนั้น ๆ ใน MS Access ฟอรมถือเปนวัตถุๆ หนึ่ง รายงาน ก็เป็นวัตถุ ๆ หนึ่ง นอกจากนี้ Controls ตาง ๆ ที่อยูบนฟอรม ก็เปนวัตถุ ๆ หนึ่งเชนกัน และจะมี property หรือคุณสมบัติที่แตกตางกันออกไป เชน สีของ background ของ Control นั้น ๆ คา หรือ value ที่มีอยูใน control นั้น เป็นต้น แตละ object จะมีmethod หรือ สิ่งที่วัตถุนั้น ๆ ทําไดเชน ฟอรมสามารถจัดเรียงข้อมูล ใหมไดโดยมีmethod ชื่อrequery ซึ่งสามารถสังเกตไดดังนี้ Forms!frmCustomer.requery นอกจากน ี้ แตละ object ยังมีevent หรือ เหตุการณของวัตถุนั้น ๆ เชน เมื่อมีการเปด ฟอรม หรือปดฟอรม หรือเมื่อมีการคลิกเมาสที่ฟอรม หรือที่ control เปนตน ในแตละ event จะมีproperty ควบคูกันไป event property นี้สามารถดูไดจาก Event category ใน Property Sheet ของแตละ Object ดังภาพขางลางนี้
Objects และ Collections
ใน Access วัตถุหรือ Object สวนใหญจะรวมกันอยู่เป็นหมู่ๆ เราเรียกแตละหมูวาเปน
collection เชน ฐานขอมูลจะประกอบไปดวย collection ของ ฟอรม ซึ่งจะมีอยูหลายฟอรม โดยที่
แตละฟอรม ก็คือ Object หรือเปนวัตถุ ๆ หนึ่ง ซึ่ง ก็จะประกอบไปดวย collection ของ controls
ตาง ๆ ที่อยูบนฟอรมนั้น ๆ เชน ปุมสงขอมูล (Command Button) ชองสําหรับกรอกขอมูล (Text
Box) กรอบขอความ (Label) และ Combo Box เปนตน
ตัวอยาง Form Collection ของฐานขอมูล
การอ้างถึง Objects
การจัดการขอมูลตาง ๆ โดยใช VBA จะต้องมีการอางถึง objects ตาง ๆ ใหถูกตองจึงจะ
สามารถทําการเปลี่ยนแปลงแกไขไดการอางอิง เราใชเครื่องหมาย! และเครื่องหมายจุด . โดยมี
หลักดังนี้ 1. ใชเครื่องหมายตกใจ ! คั่น ระหวาง collection กับ object ดังนี้ collection_name!object_name
2. ใชเครื่องหมายจุด . คั่น ระหวาง Object และ Collection ดังนี้ object_name.collection_name
การอ้างถึง Form หรือ Report
สมมุติในโปรแกรมฐานขอมูลของเรา มีฟอรม ชื่อfrmCustomer และ มีแบบรายงาน หรือ
report ชื่อrptCustomer Report เราจะอางถึงดังนี้ การอางถึงฟอรม frmCustomer จะเริ่มจาก Application Object ดังนี้ Application.Forms!frmCustomer
การอางถึงรายงาน อางดังนี้ Application.Reports![rptCustomer Report]
การสร้าง Procedure
Procedure คือกลุมคําสั่งที่อยูรวมกันเพื่อทํางานอยางใดอยางหนึ่งตั้งแตการทํางานอยาง
งายเชนการเปด หรือปดฟอรม ไปจนกระทงซับซอนมาก ๆ เชน การจัดการขอมูล หรือจัดเก็บขอมูลลงฐานขอมูลเปนตน Procedure สามารถรับขอมูลจากภายนอกเพื่อนํามาจดการอย่างใด
อยางหนึ่งได
ประเภทของ Procedures ที่ควรทราบ
1. Sub Procedures เปนการทํางานของกลุมคําสั่งโดยที่ไมมีการสงคาคืนออกมา สวน
ใหญใชSub Procudures เพื่อรับกับเหตุการณหรือ events ของ ฟอรม หรือรายงาน หรือของ
control ตาง ๆ รูปแบบของ Sub procedures มีดังน
ี้
Private Sub ชื่อ ([คาที่สงเขาไปใน Sub])
คําสั่ง
คําสั่ง
...
End Sub
Sub Procedure ที่ใชกับ event ของ ฟอรม หรือรายงาน หรือของ Control ตาง ๆ เรา
เรียกวาเปน event procedure โดยจะมีคําวา Form หรือ Report หรือช
ื่
อของ control และตอดวย
event นั้น ๆ เชน
Private Sub Form_Load() หรือ
Private Sub cmdOK_Click()
2. Function Procedures เปน Procedure ที่คืนคาอยางใดอยางหนึ่งออกมาจาก Procedure
เราใช Function สําหรับการกระทําที่ทําซ้ำๆ กัน แตมีการเปลี่ยนแปลงขอมูลเราสามารถสราง
Function ขึ้นใชเอง Function มักจะมีการรบคั าจากภายนอกเพื่อนําไปประมวลผลบางอยางและ
สงคาคืนกลับออกไป รูปแบบของ Function มีดังนี้
Private Function_name ([คาที่สงเขาไปใน Sub]) ประเภทขอมูลที่สงออกมา
คําสั่ง
คําสั่ง
...
Function_name = expression
End Function
ตัวอยาง Private Function addit(firstNum AS integer, secondNum AS integer) AS Integer
ใหสรางฟอรม ชื่อform1 และนํา Control มาวางไวดังภาพ
วิธีทํา
สราง Sub และfunction ตามขางลางนี้
Private Sub Command2_Click()
Dim thisR As Long
Dim fNum As Long
Dim sNum As Long
fNum = Me.Text0
sNum = Me.Text3
putText "ทานพิมพ " 'เวลาเรียก sub ที่สรางเองอยาใสเครื่องหมายวงเล็บครอม parameter
' ถาเปนตัวเลขก็ใสเฉยๆเชน addme 3, 5
'มิฉะนั้น จะนึกวาเปน function ซึ่งตองมีการรับคา เพราะจะสงคาคืนมา
' จึงถามหาเครื่องหมายเทากับ
thisR = addThem(fNum, sNum)
Me.Text7 = thisR
End Sub
Function addThem(first As Long, second As Long) As Long
Dim result As Long
result = first + second
addThem = result
End Function
Sub putText(thisText As String)
Dim f, s As Long
f = Me.Text0
s = Me.Text3
Me.Text5 = thisText & f & "และ " & s
End Sub
เรื่อง Control Structure
Control Structure เปนโครงสรางในการควบคุมการทํางานของโปรแกรม เชน มีการ กําหนดเงื่อนไขการควบคุมการทํางานซ้ำเปนตน การควบคุมเหลานี้ในโปรแกรม VBA ใช โครงสรางเชนเดียวกับ Visual Basic โครงสรางที่นาสนใจ มีดังนี้
1. การกําหนดเงื่อนไข
1.1 การใชif … then … else เปนการกําหนดเงื่อนไขการทํางาน ถาเงื่อนไขเปนจริง ใหทําอะไรถาไมเปนจริงใหทํา อะไร สวนของ else จะมีหรือไมมีก็ไดถาเราไมสนใจวาถาไมเปนไปตามเงื่อนไขที่กําหนดจะใหทําอะไร ไมจําเปนตองมีelse โครงสรางการใชมีดังนี้
If (เง ื่อนไข) then คําสั่ง [else คําสั่ง ]
(เครื่องหมาย[ และ] แสดงวาส ิ่ งท ี่ อยูขางใน จะมหรี ือไมมีก็ไดเครื่องหมายนไม่ได้เป็นสวนหนึ่งงของโปรแกรม)
รูปแบบที่ 2 (หลายบรรทัด)
If (เง ื่อนไข) Then
คําสั่ง
คําสั่ง
......
[Else
คําสั่ง
คําสั่ง
.........]
End If
รูปแบบที่ 3 เปนการก ําหนดเง ื่อนไขซอนกนหลายเง ั ื่อนไข
If (เงื่อนไข) Then
คําสั่ง
คําสั่ง
...... [ElseIf (เง ื่อนไข) Then
คําสั่ง
....... ]
[Else
คําสั่ง
คําสั่ง
.........]
End If
การตรวจสอบเงื่อนไขในลกษณะนี้ จะตรวจสอบทีละเงื่อนไขตามลำดับ ถาเงื่อนไขไหน เปนจริง ก็จะทําคําสั่ง และจะออกจากการตรวจสอบ ถาไมมีเงื่อนไขใดเปนจริงเลย ก็จะทําตาม คําสั่ง ในสวนของ Else ดังนั้น จึงควรพิจารณาดูกอนวา เงื่อนไขใดมีแนวโนมที่จะเปนจริงมากที่สุด ก็ใหตรวจสอบกอน จะทําใหโปรแกรมมประสิทธิภาพดีขึ้นตัวอย่าง (_if_exercise.mdb)
ใหสรางฟอรมใหมดังภาพข้างล่าง เมื่อผูใชเลือก radio button แลวคลิกปุมสงขอมูลให บอกวา เขาคลิกเลือกอะไรหนาจอเมื่อคลิกปุมสงขอมูลแลว
วิธีการทํา
ที่ปุม on click ของปุม สงขอมูลใหเขียน code ดังนี้
Dim numOfChildren As Byte
numOfChildren = Me.frmNumOfChildren.Value
If numOfChildren = 1 Then
MsgBox ("คุณมีบุตร 1คน")
ElseIf numOfChildren = 2 Then
MsgBox ("คุณมีบุตร 2 คน")
ElseIf numOfChildren = 3 Then
MsgBox ("คุณมีบุตร 3 คน")
Else
MsgBox ("คุณมีบุตร มากกวา 3 คน") End If
End Sub
เรื่องของ DAO (Data Access Object)
ฐานขอมูลของ Access คือ Jet Database Engine: (Jet ยอมาจาก Joint Engine Technology) ซึ่งเปนหัวใจสาคัญที่เก็บรักษาขอมูลตาง ๆ ตัว Access เปนเพียงการสรางหนาจอเพื่อ รับขอมูลเทานั้น เราใช้ VBA เพื่อจัดการกับวัตถุของ Access เชน แบบฟอรม และรายงาน เปนตน สําหรับ ตัวเชื่อมระหว่าง Jet Database Engine และ Access ก็คือ DAO หรือ Data Access Object ซึ่งมีสภาพเปน วัตถุๆ หนึ่ง ประกอบขึ้นด้วยวัตถุยอย ๆ อีกหลายวัตถุ
ปจจุบัน Microsoft ไดจัดทํา ADO (ActiveX Data Objects) แตในการอบรมครั้งนี้จะ เลือกใช DAO เนื่องจาก DAO ไดถูกออกแบบมาใชกับ Access และ Jet Database ซึ่งมีการ เชื่อมตอกันอยางเหนียวแน่น และมีประสิทธิภาพ อีกทั้งยังรวดเร็วกวาการตอเชื่อมผาน ADO อยางไรก็ตาม ถาในอนาคต จะมีการเลือกใชฐานขอมูลจากภายนอก ที่ไมใช Jet Database แลวละก็ ADO จะกลายเปนตัวเลือกแทนที่ DAO ทันที
MS Access 2003 จะมีDAO 3.6 มาพรอมดวยแลว DAO 3.6 ออกแบบมาใหใชกับ Jet 4.0 Database engine อยางไรก็ตาม กอนที่จะมีการเรียกใชงานไดเราตองเพิ่ม DAO 3.6 Object Library เสียก่อนโดยการเปิดหน้าจอ Code แลวไปที่ Tools > References แลวเลือก Microsoft DAO 3.6 Library จึงจะสามารถใชงานได Database Access Object Model
DAO Model มีแผนผังดังนี้
Workspaces
Workspaces collection ประกอบไปดวย Workspace objects ใน Workspace object แต ละตัวเป็นขอบเขตการทำงานของผูใชแตละคน การกําหนดสิทธิและความปลอดภัยของแตละคน มี อยูใน Workspace ของแตละคน
Databases
Databases Collections ประกอบด้วยฐานขอมูลตาง ๆ หลายฐานข้อมูล ใน Workspaces ของผูใชนั้น ๆ ฐานขอมูลอาจจะเปน Jet Databases หรือฐานข้อมูลภายนอกก็ได Database Object แตละตัว ก็คือฐานข้อมูลแตละฐาน ถาตองการอางถึง database ที่ใชในปจจุบันขณะนั้น เรา สามารถใชฟงชั่น CurrentDB() แทนได้
TableDefs
TableDefs collect ประกอบไปดวยตารางตาง ๆ ในฐานขอมูลนั้น ๆ ทั้งที่กําลังเปดใชงาน อยูและทั้งท ี่ไมไดเปด TableDefs จะบรรจุรายละเอียดข้อมูลของตารางแตละตาราง
QueryDefs
QueryDefs collect ประกอบไปดวย queries .ในฐานขอมูลนั้น ๆ Code ขางลางจะพิมพ รายชื่อ queries และคําสั่ง SQL ของ Query นั้น ๆ
Fields
Field collection มีอยูใน TableDef, QueryDef และ Recordset objectsการหา รายละเอียดของ Field สามารถทําไดโดยการอางอิงจาก TableDef, QueryDef และ Recordset objects
Recordsets
Recordset Object เปนกลุมของ Records ที่มาจากตารางตาง ๆ Recordset collection จะประกอบไปดวย Recordset Objects ที่กําลังเปดอยูในฐานขอมูลปจจุบัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น