บทที่ 4 ประกาศตัวแปร และ ฟังก์ชั่นการจัดการฐานข้อมูล
ขั้นตอนจะเริ่มต้นจากการประกาศตัวแปร และสร้าง ฟังก์ชั่นในการตรวจสอบ ว่าไฟล์ฐานข้อมูลมีอยู่ก่อนหน้าหรือไม่ หากมีไฟล์ฐานข้อมูลอยู่ ฟังก์ชั่นก็จะคืนค่า True (จริง) กลับมา และถ้าหากไม่จริง ก็จะคืนค่า False (เท็จ) กลับมา
จากนั้น จะเป็นการสร้างฟังก์ชั่น ต่างๆที่ใช้กับโปรเจค
- connOpen เป็นฟังก์ชั่น ในการสร้างการติดต่อกับฐานข้อมูล
- connClose เป็นฟังก์ชั่น ในการตัดการติดต่อกับฐานข้อมูล
- ExecSQL เป็นฟังก์ชั่น ในการทำงานตามคำสั่ง SQL ที่ส่งมา
- DBExists เป็นฟังก์ชั่น ในการตรวจสอบไฟล์ฐานข้อมูล ว่ามีการสร้างไว้ก่อนหน้าหรือไม่
- DispErrors() เป็น sub ในการแสดงผลข้อผิดพลาด
- ประกาศตัวแปร เพื่อเก็บค่าของชื่อไฟล์ของฐานข้อมูล ในส่วนของ General Declarations และตัวแปร อื่นๆที่จะนำมาใช้ในโปรเจค ดังตาราง
Option Explicit
Const gDBFileSpec = "\My Documents\test.cdb"
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Public conn As ADOCE.Connection
|
- สร้างฟังก์ชั่น connOpen เพื่อทำการติดต่อกับฐานข้อมูล
Function connOpen() As Boolean
On Error Resume Next
connOpen = True
If conn Is Nothing Then
Set conn = CreateObject("ADOCE.Connection.3.0")
conn.Open gDBFileSpec
If conn.Errors.Count > 0 Then
MsgBox "errors in connOpen", vbOKOnly
DispErrors
connOpen = False
End If
End If
On Error GoTo 0
End Function
|
ฟังก์ชั่น connOpen จะเริ่มต้นจาก การประกาศ On Error Resume Next เพื่อให้โปรแกรมสามารถทำงาน ต่อไป เมื่อเกิดข้อผิดพลาดเกิดขึ้น ต่อจากนั้นจะทำการตรวจสอบว่า มีการติดต่อฐานข้อมูลก่อนหน้าหรือไม่ (ตัวแปร conn มีค่าเป็น ค่าว่างหรือ Nothing) ถ้าไม่การติดต่อฐานข้อมูลอยู่ก่อน ให้ทำการสร้าง การติดต่อผ่านทางการสร้าง ออปเจ็ค ADOCE.Connection.3.0 หลังจากนั้นจะตรวจสอบข้อผิดพลาดว่าเกิดขึ้นหรือไม่ หากเกิดข้อผิดพลาดขึ้น จะทำการแสดงข้อความแจ้ง และแสดงรายละเอียดผ่านทาง DispErrors พร้อมทั้งกำหนดค่าส่งกลับของฟังก์ชั่น เป็นค่า False เพื่อให้ กระบวนการที่เรียกใช้ ฟังก์ชั่น ทราบว่า ไม่สามารถสร้างการติดต่อฐานข้อมูลได้
- สร้างฟังก์ชั่น connClose เพื่อตัดการติดต่อกับฐานข้อมูล
Sub connClose()
On Error Resume Next
conn.Close
Set conn = Nothing
On Error GoTo 0
End Sub
|
การสั่งเพื่อตัดการติดต่อกับฐานข้อมูล ทำโดยสั่งใช้เมธอด Close และ ลบค่าของตัวแปร conn ให้เป็นค่าว่าง
- สร้างฟังก์ชั่น ExecSQL เพื่อให้ฐานข้อมูล ทำตามคำสั่ง SQL ที่ส่งมา
Function ExecSQL(paramSQL As String, paramSuccess As String, paramErr As String) As Boolean
If DBExists(gDBFileSpec) = True Then
connOpen
On Error Resume Next
conn.Execute (paramSQL)
On Error GoTo 0
If conn.Errors.Count > 0 Then
ExecSQL = False
txtDB.Text = paramErr
Else
ExecSQL = True
txtDB.Text = paramSuccess
End If
connClose
Else
MsgBox "Database " & gDBFileSpec & " does not exist!", vbOKOnly, "No database"
End If
End Function
|
การทำงานเริ่มจากการตรวจสอบไฟล์ฐานข้อมูล ว่ามีอยู่หรือไม่ ถ้าไม่มีไฟล์ฐานข้อมูล จะมีการแจ้งข้อผิดพลาด แต่ถ้าหากว่ามีไฟล์ ฐานข้อมูล ก็จะทำการสร้างการติดต่อ หลังจากนั้นจะทำการสั่งให้ฐานข้อมูลทำงานตาม สั่ง SQL ที่ส่งเข้า ทำให้สามารถสั่งให้ฐานข้อมูล เพิ่ม, ลบ, แสดง ข้อมูลออกมาได้
- สร้างฟังก์ชั่น DBExists เพื่อใช้ ในการตรวจสอบไฟล์ฐานข้อมูล ว่ามีการสร้างไว้ก่อนหน้าหรือไม่
Private Function DBExists(paramFileSpec As String) As Boolean
If FileSystem1.Dir(paramFileSpec) <> "" Then
DBExists = True
Else
DBExists = False
End If
End Function
|
การทำงานจะเป็นการตรวจสอบ โดยใช้เมธอด Dir ของ FileSystem1 ที่เราได้ทำการสร้างโดยดับเบิ้ลคลิก มาวางไว์บน Form จากขั้นตอนแรกๆ ที่ผ่านมา ฟังก์ชั่นนี้ จะส่งค่ากลับเป็น True (จริง) เป็นมีไฟล์ฐานข้อมูล และส่งค่ากลับเป็น False (เท็จ) เมื่อ ไม่พบไฟล์ ฐานข้อมูล
- สร้าง Sub DispErrors เพื่อใช้ ในการแสดงผลข้อผิดพลาดที่เกิดขึ้น
Sub DispErrors()
Dim dispErr As String
Dim arb1 As Integer
Dim arb2 As Integer
Dim ADOErr As ADOCE.Error
For arb1 = 0 To conn.Errors.Count - 1
Set ADOErr = conn.Errors(arb1)
dispErr = "desc = " & ADOErr.Description & vbCrLf
dispErr = dispErr & "number = " & Hex(ADOErr.Number) & vbCrLf
dispErr = dispErr & "nativeerror = " & ADOErr.NativeError & vbCrLf
dispErr = dispErr & "source = " & ADOErr.Source
MsgBox dispErr, vbCritical, strTitleBar
Next arb1
End Sub
|
การตรวจสอบข้อผิดพลาด ของ sub นี้จะกระทำผ่านทาง Property ต่างๆของ ADOErr ที่รับค่าจาก ข้อผิดพลาดของ conn (ค่าจาก conn.Errors) ซึ่งมีอยู่หลายรายการ และอาศัยการวนลูป เพื่อดึงรายการข้อผิดพลาดทั้งหมด ขึ้นมาแสดง
มีการใช้งาน On Error Resume Next เพื่อให้โปรแกรม สามารถทำงานต่อไปได้เมื่อเกิดข้อผิดพลาดขึ้น และมีการใช้ On Error GoTo 0 เพื่อสั่งให้สิ้นสุดความพยายามในการทำงานต่อ จากการ Resume Next ทำให้เป็นการสิ้นสุดการทำงาน ดังนั้นจะเห็นได้ว่า มีการสั่งงานของชุดคำสั่งทั้งสอง คู่กันเสมอ ในตัวอย่างนี้
|
|
|