ข้ามไปที่เนื้อหาหลัก

เทคนิคการใช้ Recordset ในการเปิดตารางฐานข้อมูล ของ Access VBA

เทคนิคการใช้ Recordset ของ MS Access
  1. ใช้ DAO หรือ ADO

    ทั้ง DAO และ ADO ต่างก็มีวัตถุ Recordset เหมือนกัน แต่มี method properties และ options ต่างกัน แต่ DAO เป็น native library ที่ของ ACCESS
    MS Access แต่ละรุ่นมีการตั้งค่า Default ของ Library ต่างกัน ดังนั้น ในการกำหนด Dim ต้องกำหนดให้ชัดเจน เช่น

    Dim rst as DAO.Recordset
    ไม่ใช่ Dim rst as Recordset

  2. ควรกำหนด Type ให้กับ Recordset เสมอ

    โดยปกติ Access จะกำหนด Type เป็นแบบ Dynaset (dbOpenDynaset) เมื่อเปิด Query หรือ ตารางเชื่อมโยง และกำหนด Type  เป็นแบบ Table (dbOpenTable)เมื่อเปิดตารางในฐานข้อมูลเดียวกัน ซึ่งทั้งสองประเภทนี้มี Method ที่ต่างกัน เช่น dbOpenTable มี Seek แต่ไม่มี FindFirst เป็นต้น ดังนั้น ถ้าไม่กำหนด Type และเมื่อมีการแยกตารางออกเพื่อให้มี Front End และ Back End จะทำให้เกิด Error ได้
    - ควรกำหนด Type เป็นแบบ Dynaset จะครอบคลุมได้ทุกกรณี
    - dbOpenTable มี Seek method ที่ทำงานได้เร็วมาก แต่จะใช้กับ SQL Statement ไม่ได้
    - ถ้าต้องการความเร็ว และไม่ต้องการแก้ไขข้อมูล ให้กำหนด Type เป็น dbOpenSnapshot

    ตัวอย่าง

    Set rst = db.OpenRecordset("Table1", dbOpenDynaset)

  3. การใช้ Move Method

    การใช้ Move Method (MoveFirst, MoveLast, MoveNext หรือ  MovePrevious) จะเกิด Error ถ้าเปิดตารางแล้วไม่มีข้อมูลใน Recordset ดังนั้นก่อนเรียกใช้ move method จึงต้องตรวจสอบเสียก่อนว่ามีข้อมูลอยู่หรือไม่ เช่น

    If Not (rst.BOF And rst.EOF) Then ' ถ้า จุดเริ่มต้นและจุดสุดท้ายของไฟล์เป็นจริงเหมือนกัน แสดงว่า ไม่มีข้อมูล

    หรือ


    If rst.RecordCount <> 0 Then ' เชื่อถือได้ 100% เมื่อใช้กับ DAO แต่บางครั้ง เมื่อใช้กับ ADO จะให้ค่าออกมาเป็น  -1

  4. การใช้ RecordCount โดยไม่เรียกใช้ Movelast เสียก่อน

    โดยปกติ recordset ที่เปิด Query และตารางเชื่อมโยง RecordCount จะแสดงจำนวน Record ที่ผ่านมา ดังนั้น เมื่อเรียก OpenRecordset() โปรแกรม Access จะเก็บ Record แรกเอาไว้ก่อน ในขณะที่กำลัง load record อื่น ๆ ที่เหลือ ดังนั้น เมื่อเรียกใช้ RecordCount ทันทีหลังจากเรียก OpenRecordset() โปรแกรม Access จะไม่แสดงค่าที่ถูกต้อง คือถ้าไม่มีข้อมูลเลย จะได้ค่า 0 แต่ถ้ามีข้อมูล จะได้ค่าเป็น 1 (ยกเว้น กำหนด Type เป็น dbOpenTable)

    ถ้าเรียกใช้ MoveLast ก่อน จะทำให้ Access รอจนกว่าจะ load ทุก Record เสียก่อน จึงจะนับจำนวน อย่างไรก็ตาม การทำงานก็จะช้าลงด้วย เพราะต้องคอย โดยเฉพาะถ้ามีข้อมูลจำนวนมาก ๆ หรือ มีการเรียกใช้ข้อมูลจากเครือข่าย เป็นต้น


  5. การใช้ MoveNext โดยไม่ตรวจสอบ EOF เสียก่อน

    การใช้ MoveNext โดยไม่ตรวจสอบ EOF เสียก่อน เมื่อไปถึงจุดสุดท้าย จะทำให้เกิด Error ได้
    ควรมีการตรวจสอบ ตามตัวอย่างต่อไปนี้

    Do while Not rst.EOF
          If rst![MyField] <> Something Then 'The real loop exit condition.
                    Exit Do
          End If
                  ' Rest of your code here.

          rst.MoveNext
    Loop


  6. การใช้ Loop โดยไม่มี MoveNext

    การใช้ Loop โดยไม่มี MoveNext จะทำให้โปรแกรมวนแบบไม่รู้จบ โปรแกรมจะไม่ทำงานอย่างอื่น ต้องกด Ctrl + Break เพื่อหยุด เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น จึงต้องกำหนดให้เลื่อนตำแหน่งไปยัง Record อื่นด้วยเสมอ


  7. การใช้ Seek หรือ FindFirst โดยไม่ตรวจสอบ NoMatch

    การใช้ Seek หรือ FindFirst โดยไม่ตรวจสอบ NoMatch จะเกิด Error ถ้าหาไม่พบ ดังนั้น ต้องมีการตรวจสอบ NoMatch ด้วย เช่น
    rst.FindFirst "City = ""New York"""
          If Not rst.NoMatch Then
                  'It's okay to keep processing.
          End If


  8. การใช้ AddNew โดยไม่เรียก LastModified

    การเพิ่มข้อมูลใน Record โดยปกติ Access จะไม่กำหนด Record ที่เพิ่มใหม่เป็น Record ปัจจุบันให้โดยอัตโนมัติ ถ้าจะทำงานกับ Record ใหม่ที่เพิ่มเข้าไป ต้องกำหนด Bookmark เป็น Record ที่เพิ่งสร้างใหม่ ดังนี้

    rst.AddNew 'Assign fields here.
    rst.Update
    rst.Bookmark = rst.LastModified
         ' Work with the new record here.


  9. ควรปิด Recordset เมื่อใช้งานเสร็จแล้ว เสมอ เพื่อล้างหน่วยความจำ ดังนี้

       Sub MyProc
        On Error Goto Err_MyProc
            Dim db as Database
            Dim rst As Recordset

            Set db = CurrentDb()
            Set rst = db.OpenRecordset("MyTable")
                   'Useful code here.
            rst.Close            'ปิด recordset ที่เปิดใช้งาน

        Exit_MyProc:
            Set rst = Nothing    'ยกเลิก Object จาก หน่วยความจำ
            Set db = Nothing
            Exit Sub

        Err_MyProc:
            'Error handler here.
            Resume Exit_MyProc
        End Sub



ที่มา
http://allenbrowne.com/ser-29.html


ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แนวข้อสอบ เงื่อนไขสัญลักษณ์

ครั้งที่แล้ว ได้แนะนำหลักการทำ ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ มา แล้ว ถ้าใครยังไม่ได้อ่าน ก็คลิกกลับไปอ่านได้
ความจริง ข้อสอบเงื่อนไขสัญลักษณ์ เป็นข้อสอบไม่ยาก ถ้าเข้าใจหลักการ และมีทักษะความชำนาญ ใจเย็น ๆ อย่าตื่นเต้น โดยเฉพาะการดูเครื่องหมายต่าง ๆ อย่าดูผิด เช่น เครื่องหมายมากกว่า (>) น้อยกว่า (<) เป็นต้น เพราะการแก้ปัญหาโจทย์เงื่อนไขสัญลักษณ์ หรือ inequality ก็คล้ายกับการแก้ปัญหาสมการโดยทั่วไป นั่นเอง คือ สามารถบวก ลบ คูณ หาร ด้วยจำนวนที่เท่ากัน ทั้งสองข้างของเครื่องหมายได้ กลับเศษเป็นส่วนได้ แต่ก็มีบางเรื่อง บางรายละเอียดที่แตกต่างกันบ้าง ซึ่งอ่านได้จาก ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ นะครับ ครั้งนี้ จึงเป็นการนำแนวข้อสอบ เงื่อนไขสัญลักษณ์ เพื่อนำมาฝึกทำให้เกิดทักษะความชำนาญ เพื่อจะได้ทำข้อสอบได้รวดเร็วขึ้น เพราะในห้องสอบ เวลาจัดได้ว่ามีค่ามาก ยิ่งทำเร็วและถูกต้อง ยิ่งดี คำสั่ง

เลือกตอบข้อ 1. ถ้าข้อสรุปทั้งสอง ถูกด้องหรือเป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 2. ถ้าข้อสรุปทั้งลอง ผิดหรือไม่เป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 3. ถ้าข้อ…

อุปมา อุปไมย สำนวนการเปรียบเทียบ ของไทย

การเตรียมสอบ ก.พ. ภาค ก. เพื่อสอบบรรจุเข้ารับราชการ มีการทดสอบความสามารถทั่วไป มักจะมี
ข้อสอบที่เกี่ยวกับอุปมาอุปไมย  ข้อสอบมีลักษณะ ให้หาตัวเลือกที่มีความหมาย ความสัมพันธ์คล้ายคลึง หรือเหมือนกับที่โจทย์กำหนดให้มา  หรือเติมข้อความที่มีความหมายสอดคล้องกับคำอุปมาอุปไมยที่ยกมาให้ เป็นต้น ดังนั้น การเข้าใจความหมายของคำอุปมาอุปไมย จึงช่วยให้ทำข้อสอบได้ดียิ่งขึ้น

คำอุปมาอุปไมย หมายถึง ถ้อยคำที่เป็นสำนวนพวกหนึ่ง กล่าวทำนองเปรียบเทียบ ให้เห็นจริง เข้าใจแจ่มแจ้งชัดเจน และสละสลวยน่าฟังมากขึ้น การพูดหรือการเขียน นิยมหาคำอุปมาอุปไมยมาเติมให้ได้ความชัดเจนเกิดภาพพจน์ เข้าใจง่าย เช่น

คนดุ หากต้องการให้ความหมายชัดเจน น่าฟัง และเกิดภาพพจน์ชัดเจนก็ต้องอุปมาอุปไมยว่า “ดุ เหมือน เสือ”
ขรุขระมาก การสื่อความยังไม่ชัดเจนไม่เห็นภาพ ต้องอุปมาอุปไมยว่า “ขรุขระเหมือนผิวมะกรูด” หรือ “ขรุขระเหมือนผิวพระจันทร์” ก็จะทำให้เข้าใจ ความหมายในรูปธรรมชัดเจนมากยิ่งขึ้น

คำอุปมาอุปไมยที่ควรรู้จัก (พิมพ์คำ/ข้อความ แล้วกดปุ่ม "ค้นหา")

เทคนิคการทำ ข้อสอบ อนุกรม ของ ก.พ.

|ประเภทของอนุกรม เทคนิคการทำโจทย์เลข อนุกรม ข้อแนะนำเพิ่มเติม |


ข้อสอบเลขอนุกรม ของ ก.พ. ต้องการวัดความถนัดทางด้านตัวเลข โดยการจัดทำตัวเลขเป็นชุด ๆ ที่มีความสัมพันธ์กันบางอย่าง โดยให้ผู้เข้าสอบได้แสดงความถนัดด้านตัวเลข ในการวิเคราะห์และแก้ปัญหาตามที่โจทย์ระบุ


ประเภทของอนุกรม รูปแบบความสัมพันธ์ของตัวเลขอนุกรมเท่าที่พบบ่อย ๆ มีหลายประเภท เช่น

ก. อนุกรมเชิงเดี่ยว 

ได้แก่ชุดตัวเลขที่เป็นอนุกรมเพียงชุดเดียว เช่น
ค่าของตัวเลขเพิ่มขึ้นต่อเนื่องอย่างเป็นระบบ โดยการบวก หรือ คูณ ตัวเลขก่อนหน้า เช่น บวกด้วยตัวเลขที่เป็นค่าคงที่ เช่น    5   10   15   20   ...?...
บวกด้วยตัวเลขที่มีระบบ เช่น     1    2    5    10   ...?...
คูณด้วยค่าคงที่ เช่น   1   3   9   27   ...?...
มีทั้ง บวก ลบ คูณ หรือหาร สลับกัน เช่น บวกแล้วคูณด้วยค่าคงที่สลับกัน ดังตัวอย่าง  5   7    14   16  32   ...... มีการ บวก ลบ คูณ หรือ หาร ร่วมกัน เช่น  15   31   63   127   255  ...?...
ในตัวอย่างนี้ จะเห็นว่า ตัวเลขตัวแรกคูณด้วย 2 และบวกด้วย 1 จะได้ตัวเลขตัวถัดไป คูณด้วยค่าคงที่ที่เป็นเศษส่วน ให้สังเกตความสัมพันธ์ว่า ตัวเลขก่อนหน้า …