วันอังคารที่ 5 สิงหาคม พ.ศ. 2557

สาระเทคนิค access vba

การเปลี่ยนภาพที่ปุ่ม Command Button
  1. สร้างปุ่ม โดยไม่ใช้ Command Wizard (คลิก Cancel ถ้ามีหน้าจอ wizard)
  2. คลิกขวาที่ปุ่มเพื่อเปิด Property Sheet เลือก Picture
  3. ถ้าต้องการใช้รูปที่สร้างเองบนปุ่ม ให้คลิก Broswe ภาพที่จะนำมาใช้งาน ควรเป็นภาพ png ที่มี Transparent และมีขนาดเล็ก
การเรียกใช้หน้าจอ Attach File ด้วย VBA
  1. สร้างตารางที่มี Field หนึ่ง ที่ data type เป็น Attachment
  2. สร้างฟอร์ม โดยกำหนดให้ตารางที่สร้างเป็น Record source และลาก Field ที่เป็น Attachment มาวางไว้ 
  3. สร้างปุ่ม เพื่อให้คลิกและเรียกใช้งานหน้าจอ Attachment
  4. และเขียนโค้ดที่ปุ่มที่ on click event
            Me.Attachmnt.SetFocus ' Set focus ฟิลด์ Atttachment
            RunCommand acCmdManageAttachments ' เรียกใช้งาน
  5. เมื่อคลิกปุ่ม จะเกิดหน้าจอให้กำหนด 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 เป็นต้นไป)


  1. ถ้ามีฟิลด์ในตารางที่เป็นที่อยู่ของไฟล์ภาพ สามารถกำหนด ฟิลด์ให้เป็น Control Source ได้เลย ภาพจะมาปรากฎทันที
  2. ถ้าต้องการให้มีภาพ Default ในกรณีไม่มีรูป
  3. ให้สร้างภาพ 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

หมายเหตุ ฟิลด์ที่เก็บข้อมูลรหัสไปรษณีย์ เป็นลักษณะ TEXT

หรือ อาจจะใช้ฟังก์ชัน DCount() ก็ได้





ไม่มีความคิดเห็น:

แสดงความคิดเห็น