ครั้งใดก็ตามทีที่ผมต้องรับหน้าที่เป็นที่ปรึกษา หรือ ประเมินผลงานโปรเจคนักศึกษา ที่เกี่ยวข้องกับการทำ CAI (Computer Assisted Instruction) หรือ การนำคอมพิวเตอร์มาช่วยทั้งในเรื่องของการเรียน และ การสอน .. ผมจะแจ้งไปยังเด็กนักศึกษาทุกกลุ่มเลยว่า หากจะทำหน้าจอ Login เข้าสู่ระบบ แต่ถ้าไม่สามารถนำข้อมูลมาใช้ประโยชน์อะไรได้เลย (มีแต่สวัสดีครับ สวัสดีค่ะ คุณ ... ) ก็ขอความกรุณาอย่าทำมา เหตุผลสั้นๆคือ ผมรำคาญสายตา 55555+ ... ที่จริงก็เพราะเด็กนักศึกษาเหล่านี้เขา (หรือเธอ) ยังไม่มีประสบการณ์ในงานสอนจริงเลย การที่จะตีความหมายในสิ่งที่จะสอน แล้วต้องเอามันมานำเสนออยู่ในรูปแบบของสื่อคอมพิวเตอร์ ก็ยิ่งยากมากมาย ... ดังนั้นต้องมองประเด็นหลักๆเสียก่อน แต่ ... ผมจะมีตัวอย่างของจริงให้เขาดูในส่วนของการติดต่อกับฐานข้อมูล ... เพื่ออะไร ... ก็เพื่อสร้างแรงจูงใจให้เด็กยังไงล่ะครับ หากเขาสามารถทำงานหลักๆได้สำเร็จ ผมก็จะเจียดเวลา (กินเหล้า 55555+) ของผม มาสอนวิธีการขั้นตอนต่างๆให้ ... หากเขาอยากจะได้ความรู้ และ ประสบการณ์ที่เพิ่มมากขึ้นน่ะ ... แต่ถ้าไม่อยากได้ก็แล้วไป เหอๆๆๆๆ ... ไม่เสียเวลา |
 |
 |
เข้าเรื่อง เข้าประเด็นกันเลย ... บทความชิ้นนี้ ผมก็ไม่ได้เหนื่อย หรือ สิ้นเปลืองเวลาไปมากมายเลย เพราะลอกมาจากงานของ Visual Basic 6 + MS Access ที่ผมเขียนไว้ก่อนหน้านี้แล้ว ในหัวข้อเรื่อง VB6 กับการทำหน้าจอ Login ระดับมืออาชีพ ภาค 1 - ปฐมบท ... ก็นำมาปรับแต่งนิดหน่อย ตามรูปแบบ และ คำสั่งที่ใช้งานของ Visual Basic for Application หรือ VBA สำหรับ PowerPoint ... |
 |
การติดต่อกับฐานข้อมูลด้วย ADO - ActiveX Data Objects
 โดยการเข้าไปที่ Microsoft Visual Basic Editor หรือ กดปุ่ม Alt + F11 จากนั้นให้เลือก Tools --> References ... (ที่เหลือก็ตามภาพครับ) |
 |
การปรับแต่งคุณสมบัติของ Control แบบ Design Time (คือ การตั้งค่าคุณสมบัติต่างๆของ Control ก่อนที่จะสั่ง Run Macro) |
โดยจะมีการตั้งค่า Properties หลักๆดังต่อไปนี้ (ไม่จำเป็นต้องไปตั้งค่าทั้งหมดเลยน่ะครับ) (ข้างล่างนี้คือตัวอย่าง Control บางตัวน่ะครับ)
CommandButon (ปุ่มกด)
- Name = cmdOK (ตัวย่อ cmd เพื่อสื่อถึง Command Button Control)
- Font = Angsana New (หรือเลือกตัวอื่นๆก็ได้)
- Caption = ป้ายบอกชื่อปุ่มว่ากดแล้วไปทำงานอะไร เช่น จบการทำงาน
TextBox (ช่องกรอกข้อมูล)
- Name = txtUserID (ตัวย่อ txt เพื่อสื่อถึง TextBox Control)
- Font = Angsana New (หรือเลือกตัวอื่นๆก็ได้)
- Text = การกำหนดค่าให้กับ TextBox
- BorderStyle = 1 - frmBoderStyleSingle (ใส่กรอบช่องป้อนข้อมูลให้เห็นเด่นชัด)
Label (ป้ายบอก)
- Name = lblUserID (ตัวย่อ lbl เพื่อสื่อถึง Label Control)
- Font = Angsana New (หรือเลือกตัวอื่นๆก็ได้)
- Caption = ป้ายบอก หรือ คำอธิบาย เช่น กรุณาป้อนชื่อผู้ใช้งาน
|
วิธีล็อคการกดคีย์บอร์ด และ คลิ๊กเมาส์บน Slide ของ PowerPoint (ยกเว้นการกดปุ่ม Escape) จุดประสงค์ เพื่อไม่ต้องการให้ User สามารถเข้าถึง Slide อื่นๆได้ จนกว่าจะทำการ Login เข้าสู่ระบบได้เสร็จสมบูรณ์ หรือ หากต้องการ Lock การกดคีย์ได้หมดเลย สามารถดาวน์โหลด Add-In มาใช้งานได้ที่นี่

วิธีการสร้างไฟล์ Module ใหม่ (นามสกุล BAS) คำว่า Module จะเป็นการรวบรวมตัวแปรต่างๆที่จำเป็นต้องใช้งานบ่อยๆ และ ต้องการให้สามารถมองเห็นตัวแปรเพื่อใช้งานได้ทั้งโปรเจค รวมไปถึงการจัดเก็บพวกโปรแกรมย่อยๆ (Sub Program หรือ Function) ที่สำคัญๆเอาไว้ใช้งาน เพื่อที่จะได้ไม่ต้องนั่งมาเขียนโค้ดขึ้นใหม่ตลอดทุกครั้งด้วย ดังนั้นการตั้งชื่อ Module เหล่านี้ เราต้องพยายามตั้งชื่อเพื่อสื่อความด้วย เช่น modDataBase.bas เป็นโมดูลที่เกี่ยวข้องกับการติดต่อกับฐานข้อมูล เป็นต้น
 จากเมนูเลือก Insert --> Module (หลังจากนั้นก็ใส่โค้ดต่างๆลงไป)
 การบันทึกไฟล์ Module เอาไว้เรียกใช้งานในภายหลัง หรือ ในโปรเจคอื่นๆต่อไปได้อีก
 การตั้งชื่อไฟล์ ก็ควรตั้งให้สื่อความหมายในงานนั้นๆด้วยน่ะครับ
VBA สำหรับการเชื่อมต่อไฟล์ฐานข้อมูล Access โดยการบันทึกเป็น Module ลอกจากโค้ดของ Visual Basic 6 มาทั้งอัลบั้มเลยล่ะ ... คิกๆๆๆๆ
' กำหนดให้ต้องประกาศตัวแปร และ ชนิดตัวแปรก่อนใช้งานเสมอ
Option Explicit
' Global เป็นการประกาศตัวแปรที่มองเห็นได้ทั้งหมดในแต่ละโปรเจค
' ตัวแปรเชื่อมต่อไฟล์ฐานข้อมูล MS Access
Global ConnDB As New ADODB.Connection
' ใช้ RecordSet เพื่อติดต่อกับตารางข้อมูล (Table)
Global RS As New ADODB.Recordset
' การสร้าง Query หรือ SQL Statement เพื่อติดต่อกับตารางข้อมูล
Global Statement As String
' หากเข้าสู่ระบบได้ก็จะเก็บชื่อผู้ใช้งานเอาไว้ (หรืออื่นๆ)
' อาทิ เช่น วัน เวลาเข้าสู่ระบบ ตัวแปรเก็บคะแนนทำแบบทดสอบ อะไรประมาณนี้แหละครับ
Global CompleteName As String
' ######################################################
' การเชื่อมต่อไฟล์ฐานข้อมูล MS Access
' ######################################################
Sub OpenDataBase()
On Error GoTo ErrorHandler
Dim DB_File As String
' หาตำแหน่ง Path ปัจจุบันของไฟล์ PowerPoint
' เช่น C:\CAI\PowerPointDB
DB_File = Application.ActivePresentation.Path
If Right$(DB_File, 1) <> "\" Then DB_File = DB_File & "\"
' แล้วตามด้วยชื่อไฟล์ฐานข้อมูล MS Access
' เช่น C:\CAI\PowerPointDB\UserLog.MDB
DB_File = DB_File & "UserLog.MDB"
' เชื่อมต่อไฟล์ฐานข้อมูล MS Access
Set ConnDB = New ADODB.Connection
ConnDB.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DB_File & ";" & _
"Persist Security Info=False"
ConnDB.Open
Exit Sub
ErrorHandler:
' การดัก Error ที่อาจจะเกิดขึ้นในการเชื่อมต่อไฟล์ข้อมูล
MsgBox "Error : " & Err.Number & " " & Err.Description
End
End Sub
' ######################################################
' ปิดการเชื่อมต่อไฟล์ฐานข้อมูล MS Access
' ######################################################
Sub CloseDataBase()
' ตรวจสอบว่ามีการเชื่อมโยง - Connect ข้อมูลหรือไม่
If ConnDB.State = adStateOpen Then
ConnDB.Close
Set ConnDB = Nothing
End If
End Sub
|

VBA สำหรับ Slide1 ซึ่งอาจจะเป็นการอธิบายการเข้าใช้งานให้กับ Users ด้วย
' กำหนดให้ต้องประกาศตัวแปร และ ชนิดตัวแปรก่อนใช้งานเสมอ
Option Explicit
' ######################################################
' เข้าสู่หน้าจอ Slide ในการป้อนข้อมูลการเข้าสู่ระบบ
' ######################################################
Private Sub cmdOpen_Click()
' เปิดการเชื่อมต่อกับไฟล์ฐานข้อมูล MS Access
Call OpenDataBase
' เคลียร์ข้อมูลเดิม
Slide2.txtUserID.Text = ""
Slide2.txtPassword.Text = ""
' เรียกหน้า Slide ของการ Login ขึ้นมาแสดงผล
ActivePresentation.SlideShowWindow.View.GotoSlide (2)
End Sub
' ######################################################
' จบการทำงาน ปิด PowerPoint
' ######################################################
Private Sub cmdExit_Click()
' อ้างอิงชื่อไฟล์ PowerPoint
With Application.Presentations("PowerPoint-Login.ppt")
' สั่งบันทึก (Save) ก่อนออก
.Saved = True
.Close
End With
End Sub
|
 หน้าจอของการออกแบบ หรือ Design Time
 ตัวอย่าง UserID/Password ... admin/admin หรือ student/student
 เมื่อสามารถ Login เข้าสู่ระบบเรียบร้อย ก็จะสามารถผ่านเข้าไปยัง Slide ต่อไปได้
VBA สำหรับ Slide2 ที่อยู่ในโปรแกรม PowerPoint
Option Explicit
' ######################################################
' เริ่มต้นกระบวนการตรวจสอบรายชื่อผู้ใช้ และ รหัสผ่าน
' โดยจะเริ่มการค้นหารายชื่อ User เข้ามาก่อน แล้วค่อยตรวจสอบรหัสผ่านทีหลัง
' เพราะบางครั้งอาจจะมีการเข้ารหัส (Encrypt) รหัสผ่านเอาไว้อีกชั้นหนึ่ง
' ######################################################
Private Sub cmdOK_Click()
' ตัวแปรเก็บค่ารหัสผ่านจากตารางข้อมูล
Dim strPass As String
' ตรวจสอบค่าว่างหรือไม่ ... หากใช่ให้กลับไปป้อนชื่อผู้ใช้ หรือ รหัสผ่านใหม่
If Trim(txtUserID.Text) = "" Or Len(Trim(txtUserID.Text)) = 0 Then
MsgBox "กรุณาป้อนชื่อผู้ใช้ให้เรียบร้อยก่อนด้วย.", vbOKOnly + vbExclamation, "รายงานสถานะ"
' ออกจากโปรแกรมย่อยไปเลย
Exit Sub
ElseIf Trim(txtPassword.Text) = "" Or Len(Trim(txtPassword.Text)) = 0 Then
MsgBox "กรุณาป้อนรหัสผ่านให้เรียบร้อยก่อนด้วย.", vbOKOnly + vbExclamation, "รายงานสถานะ"
' ออกจากโปรแกรมย่อยไปเลย
Exit Sub
End If
' เริ่มตรวจสอบชื่อผู้ใช้งานก่อนว่ามีในระบบหรือไม่
' การกำหนด Set RS = New Recordset หมายถึงการปิด RecordSet เดิมลง (กรณีเปิดค้างไว้)
Set RS = New Recordset
Statement = "SELECT * FROM tblUser WHERE UserID = " & "'" & Trim(txtUserID) & "'"
RS.CursorLocation = adUseClient
RS.Open Statement, ConnDB, adOpenForwardOnly, adLockReadOnly, adCmdText
' การใช้ RecordCount ได้ เราต้องตั้งการอ่านแบบ RS.CursorLocation = adUseClient
If RS.RecordCount > 0 Then
strPass = "" & RS("Password")
' ไม่พบข้อมูลให้กลับไปแก้ไขใหม่
Else
MsgBox "ชื่อผู้ใช้งานไม่ถูกต้อง กรุณาลองใหม่อีกครั้ง.", vbOKOnly + vbExclamation, "รายงานสถานะ"
RS.Close: Set RS = Nothing
Exit Sub
End If
' เมื่อชื่อผู้ใช้ถูกต้องแล้ว ก็ไปตรวจสอบรหัสผ่านในลำดับต่อไป
' ตรวจสอบรหัสผ่านของผู้ใช้งานก่อนว่าตรงกันกับในระบบหรือไม่ โดยปรับตัวอักขระทุกตัวให้เป็นตัวเล็ก (LCase)
If LCase(txtPassword.Text) <> LCase(strPass) Then
MsgBox "รหัสผ่านไม่ถูกต้อง กรุณาลองใหม่อีกครั้ง.", vbOKOnly + vbExclamation, "รายงานสถานะ"
RS.Close: Set RS = Nothing
Exit Sub
End If
' แจ้งการเข้าสู่ระบบ
MsgBox "ยินดีต้อนรับคุณ " & RS("CompleteName") & " เข้าสู่ระบบ.", _
vbOKOnly + vbInformation, "เข้าสู่ระบบเรียบร้อย"
' การเก็บค่าตัวแปร ลักษณะนี้ คือ การเก็บข้อมูลผู้ใช้เอาไว้แสดงผลได้ทุกๆ Slide ครับ
' ในทางปฏิบัติจริง เราอาจจะต้องเก็บค่าอื่นๆที่จำเป็นเอาไว้ด้วย เช่น วัน เวลาที่ Login เข้ามา
CompleteName = "" & RS("CompleteName")
' แจ้งชื่อไปที่หน้า Slide ถัดไป
Slide3.lblWelcome.Caption = "ยินดีต้อนรับคุณ " & CompleteName & " เข้าสู่บทเรียน"
' ตัดการเชื่อมต่อตารางข้อมูล (Table) แต่ยังไม่ได้ปิดไฟล์ฐานข้อมูลน่ะครับ
RS.Close: Set RS = Nothing
' ไปหน้า Slide ต่อไป
ActivePresentation.SlideShowWindow.View.GotoSlide (3)
End Sub
' ######################################################
' จบการทำงาน ปิด PowerPoint
' ######################################################
Private Sub cmdExit_Click()
' เพื่อความปลอดภัยของไฟล์ข้อมูล ต้องปิดการเชื่อมต่อฐานข้อมูลก่อนด้วย
Call CloseDataBase
' เคลียร์ข้อมูลเดิมก่อนปิดไฟล์
Slide2.txtUserID.Text = ""
Slide2.txtPassword.Text = ""
' อ้างอิงชื่อไฟล์
With Application.Presentations("PowerPoint-Login.ppt")
' สั่งบันทึก (Save) ก่อนออก
.Saved = True
.Close
End With
End Sub
|
Conclusion: จะเห็นได้อย่างชัดเจนในแบบรูปธรรมไปเลยว่า หากเราใช้เจ้า PowerPoint เพื่อเชื่อมต่อกับไฟล์ฐานข้อมูลได้แล้ว ก็ย่อมที่จะสามารถนำไปใช้ประโยชนใน์ด้านอื่นๆได้อีก อาทิเช่น เก็บข้อมูลการเข้า ออกของผู้เรียนแต่ละคน เก็บคะแนนการทำแบบทดสอบ ทั้ง Pre-Test/Post-Test หรืออื่นๆอีกเยอะแยะไป เพราะข้อมูลเหล่านี้เราต้องนำไปใช้ในการประมวลผลทางสถิติต่อไป โดยอาศัยข้อมูลจากฐานแห่งความเป็นจริงยังไงล่ะครับ ... พี่น้อง
|