สาระเทคนิค access vba
การเปลี่ยนภาพที่ปุ่ม Command Button
- สร้างปุ่ม โดยไม่ใช้ Command Wizard (คลิก Cancel ถ้ามีหน้าจอ wizard)
- คลิกขวาที่ปุ่มเพื่อเปิด Property Sheet เลือก Picture
- ถ้าต้องการใช้รูปที่สร้างเองบนปุ่ม ให้คลิก Broswe ภาพที่จะนำมาใช้งาน ควรเป็นภาพ png ที่มี Transparent และมีขนาดเล็ก
การเรียกใช้หน้าจอ Attach File ด้วย VBA
- สร้างตารางที่มี Field หนึ่ง ที่ data type เป็น Attachment
- สร้างฟอร์ม โดยกำหนดให้ตารางที่สร้างเป็น Record source และลาก Field ที่เป็น Attachment มาวางไว้
- สร้างปุ่ม เพื่อให้คลิกและเรียกใช้งานหน้าจอ Attachment
- และเขียนโค้ดที่ปุ่มที่ on click event
Me.Attachmnt.SetFocus ' Set focus ฟิลด์ Atttachment
RunCommand acCmdManageAttachments ' เรียกใช้งาน - เมื่อคลิกปุ่ม จะเกิดหน้าจอให้กำหนด Attachment ของฟิลด์ในตารางที่สร้าง
การ Disable ไม่ให้สร้าง Record ใหม่ ในฟอร์ม
ปกติฟอร์มที่มีตาราง เป็น Record Source จะมี Navigation ด้านล่างให้สามารถไปยัง Record อื่น ๆ ได้ รวมทั้ง สร้าง Record ใหม่ ด้วย
ถ้าต้องการยกเลิก ไม่ให้มีการสร้าง Record ใหม่ เมื่อเรียกใช้งาน ให้กำหนด AllowAdditions ของฟอร์มนั้น เป็น False ดังนี้
DoCmd.OpenForm "frmTeachers_edit", acNormal
Forms!frmTeachers_edit.AllowAdditions = False
การใช้ Image Control (Access 2007 เป็นต้นไป)
การใช้ Image Control (Access 2007 เป็นต้นไป)
- ถ้ามีฟิลด์ในตารางที่เป็นที่อยู่ของไฟล์ภาพ สามารถกำหนด ฟิลด์ให้เป็น Control Source ได้เลย ภาพจะมาปรากฎทันที
- ถ้าต้องการให้มีภาพ Default ในกรณีไม่มีรูป
- ให้สร้างภาพ Default และกำหนด ภาพในแถบ Format ของ Property Sheet โดยเลือกภาพที่สร้างไว้แล้ว
การอ้างอิงถึง Subform ด้วย VBA
การอ้างถึง Subform ผ่าน controls collection ของ form
Forms!formname!subformname
การอ้างถึง control ใน subform เนื่องจาก Subform จริง ๆ แล้ว เป็น Control ตัวหนึ่งที่มี dependent controls ดังนั้นการอ้างอิงจึงต้องอ้างถึง Subform ก่อน จากนั้นจึงใช้ Form property ของ Subform เพื่อไปยัง control ของ subform อีกครั้งหนึ่ง
Forms!formname!subformname.Form.controlname
ถ้าชื่อมีช่องว่าง ต้องใช้เครื่องหมาย [ ] คร่อม
Forms![form name]![control name].Form.[control name]
ถ้าอยู่ใน Form ปัจจุบัน สามารถใช้ Me แทนได้ เช่น
Me!subformname.Form.controlname
ถ้าต้องการเปลี่ยนข้อมูลในฟอร์ม โดยใช้ข้อมูลจาก Query สามารถสั่งกรองข้อมูลได้ โดยผ่าน RecordSource ของ Subform เช่น
Forms![form name]![control name].Form.RecordSource = "SQL statement"
ตัวอย่าง
Forms!frmTeacher.frmTeacherSubform.Form.RecordSource = "Select * From qryTeacher " & _
"Where teacher_name = '" & tName & "'"
ข้อสังเกต
- frmTeacher และ frmTeacherSubform เป็นชื่อ form และ subform ตามลำดับ
- teacher_name เป็นชื่อ Field ชนิด String จึงต้องอยู่ในเครื่องหมายคำพูด
- tName เป็นตัวแปร ชนิด String
เมื่อกำหนดค่าให้ RecordSource ของ Subform แล้ว ต้องทำการ Requery ให้ก้บ Subform ด้วย มิฉะนั้น จะไม่แสดงผลให้เห็นทันทีทันใด
Forms!frmTeacher.frmTeacherSubform.Requery
การตรวจหาข้อมูลในตาราง อย่างง่าย
ต้องการหาข้อความที่พิมพ์เข้ามาว่า มีอยู่ในตารางหรือไม่ เช่น ตรวจสอบรหัสไปรษณีย์ ในตาราง tblPostalCode เป็นต้น
Private Sub txtProvinceCode_BeforeUpdate(Cancel As Integer)
If CurrentDb.OpenRecordset("Select count(*) from tblPostalCode where postalCode ='" & Me.txtProvinceCode & "' ;").Fields(0) = 0 Then
MsgBox "ไม่พบรหัสไปรษณีย์ ที่ท่านระบุในฐานข้อมูล"
Cancel = True
Exit Sub
End If
End Sub
การอ้างถึง Subform ผ่าน controls collection ของ form
Forms!formname!subformname
การอ้างถึง control ใน subform เนื่องจาก Subform จริง ๆ แล้ว เป็น Control ตัวหนึ่งที่มี dependent controls ดังนั้นการอ้างอิงจึงต้องอ้างถึง Subform ก่อน จากนั้นจึงใช้ Form property ของ Subform เพื่อไปยัง control ของ subform อีกครั้งหนึ่ง
Forms!formname!subformname.Form.controlname
ถ้าชื่อมีช่องว่าง ต้องใช้เครื่องหมาย [ ] คร่อม
Forms![form name]![control name].Form.[control name]
ถ้าอยู่ใน Form ปัจจุบัน สามารถใช้ Me แทนได้ เช่น
Me!subformname.Form.controlname
ถ้าต้องการเปลี่ยนข้อมูลในฟอร์ม โดยใช้ข้อมูลจาก Query สามารถสั่งกรองข้อมูลได้ โดยผ่าน RecordSource ของ Subform เช่น
Forms![form name]![control name].Form.RecordSource = "SQL statement"
ตัวอย่าง
Forms!frmTeacher.frmTeacherSubform.Form.RecordSource = "Select * From qryTeacher " & _
"Where teacher_name = '" & tName & "'"
ข้อสังเกต
- frmTeacher และ frmTeacherSubform เป็นชื่อ form และ subform ตามลำดับ
- teacher_name เป็นชื่อ Field ชนิด String จึงต้องอยู่ในเครื่องหมายคำพูด
- tName เป็นตัวแปร ชนิด String
เมื่อกำหนดค่าให้ RecordSource ของ Subform แล้ว ต้องทำการ Requery ให้ก้บ Subform ด้วย มิฉะนั้น จะไม่แสดงผลให้เห็นทันทีทันใด
Forms!frmTeacher.frmTeacherSubform.Requery
การตรวจหาข้อมูลในตาราง อย่างง่าย
ต้องการหาข้อความที่พิมพ์เข้ามาว่า มีอยู่ในตารางหรือไม่ เช่น ตรวจสอบรหัสไปรษณีย์ ในตาราง tblPostalCode เป็นต้น
Private Sub txtProvinceCode_BeforeUpdate(Cancel As Integer)
If CurrentDb.OpenRecordset("Select count(*) from tblPostalCode where postalCode ='" & Me.txtProvinceCode & "' ;").Fields(0) = 0 Then
MsgBox "ไม่พบรหัสไปรษณีย์ ที่ท่านระบุในฐานข้อมูล"
Cancel = True
Exit Sub
End If
End Sub
หมายเหตุ ฟิลด์ที่เก็บข้อมูลรหัสไปรษณีย์ เป็นลักษณะ TEXT
หรือ อาจจะใช้ฟังก์ชัน DCount() ก็ได้
ความคิดเห็น
แสดงความคิดเห็น