การกำหนดจำนวน record ใน form
กระทู้เก่าบอร์ด อ.Yeadram

 3,003   16
URL.หัวข้อ / URL
การกำหนดจำนวน record ใน form

คือผมจะทำ form ใบกำกับภาษีโดยมี subform เป็นรายการและจำนวนสินค้า
โดยต้องการให้จำนวน record ใน subform สามารถใส่ได้ไม่เกิน 10 รายการ
ไม่ทราบว่าจะกำหนดจำนวน record ใน form ได้ยังไรครับ

ขอบคุณครับ

16 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R14961
ไม่รู้ว่าตรงความต้องการหรือเปล่า ลองใส่โค๊ดประมาณนี้ลงใน On Current ของ Subform ครับ

    If Me.RecordsetClone.RecordCount > 9 Then ' หากนับเรคคอร์ดมากกว่า 9
        If Me.AllowAdditions <> False Then
            Me.AllowAdditions = False ' ปิด Property การเพิ่มเรคคอร์ด
        End If
    Else
        If Me.AllowAdditions <> True Then
            Me.AllowAdditions = True ' เปิด Property การเพิ่มเรคคอร์ดหากยังไม่ถึง 10
        End If
    End If
2 @R14970
ผมได้ทำตามสรุปใช้งานได้ครับ แต่พอขึ้น record ใหม่ของ form
ไม่สามารถเพิ่มรายการได้ครับ

ขอบคุณครับ
3 @R14972
Sub Form_OnCurrent()
    Me.AllowAdditions = Not (Me.Recordset.RecordCount = 10)
End Sub
4 @R14976
Sub Form_OnCurrent()
    Me.AllowAdditions = Me.Recordset.RecordCount < 9
End Sub
5 @R14980
ผมลองทำตามแล้วครับ ใน form เลขที่เดิมสามารถ lock จำนวน record
ใน subform ได้ตามที่ต้องการ แต่จะมีปัญหาไม่สามารถเพิ่ม record ของ
subform ใน form เลขที่ต่อไปได้ครับ




6 @R14981
อืม...คือมันน่าจะนำค่าเดิมไว้ เมื่อขึ้นเรคคอร์ดใหม่เราก็ต้องแก้มันกลับด้วยครับ
เพิ่มโค๊ดดู ดังนี้ครับ
สมมุติ เมนฟอร์มคุณชื่อ Form1 และ ซับฟอร์มคุณชื่อ Form2 นะครับ
1. ที่ On Current ของ เมนฟอร์ม ใส่โค๊ดดังนี้
    If Me.NewRecord Then
        Forms![Form1]![Form2].Form.AllowAdditions = True
    Else
        If Forms![Form1]![Form2].Form.RecordsetClone.RecordCount > 9 Then
            If Forms![Form1]![Form2].Form.AllowAdditions <> False Then
               Forms![Form1]![Form2].Form.AllowAdditions = False            End If
        Else
            If Forms![Form1]![Form2].Form.AllowAdditions <> True Then
               Forms![Form1]![Form2].Form.AllowAdditions = True            End If
        End If
    End If


ประมาณนี้ ปรับดูนะครับ ผมเขียนแบบไม่ได้ทดสอบเลยนะครับ ทดสอบดูก่อนครับ
7 @R14982
แก้ไข End If ด้วยนะครับ (ทำไมโค๊ดมันเลื่อนก็ไม่รู้ สงสัยผมลืม Enter ? ผมเปลี่ยนมาใช้ IE9 แล้วฟอต์นไม่เพี้ยนๆอ่ะครับ มีปัญหามากกับการพิมพ์ไทย)
8 @R14983
ขอบคุณครับ ผมลองแล้วครับแต่ติด error ครับ เดี๋ยวผมจะลองปรับดูอีกทีครับ


9 @R14984
ผมแก้ code แล้วครับ ไม่ติด error แล้ว แต่ record ไม่สามารถ lock ได้ครับ
10 @R14985
11 @R14986
ดูแล้วก็น่าจะถูกแล้วนะครับ สรุปใหม่นะครับ
1.เมนฟอร์ม ที่ On Current คุณใส่โค๊ดตามรูป
2. ซับฟอร์ม ที่ On Current คุณใส่โค๊ดเหมือนเดิมด้วยนะครับ
    If Me.RecordsetClone.RecordCount > 9 Then ' หากนับเรคคอร์ดมากกว่า 9
        If Me.AllowAdditions <> False Then
            Me.AllowAdditions = False ' ปิด Property การเพิ่มเรคคอร์ด
        End If
    Else
        If Me.AllowAdditions <> True Then
            Me.AllowAdditions = True ' เปิด Property การเพิ่มเรคคอร์ดหากยังไม่ถึง 10
        End If
    End If

คุณใส่ทั้งสองที่ใช่หรือไม่ครับ
12 @R14987
ได้แล้วครับ ผมคิดว่าต้องเอา On Current ของ subform ออกน่ะครับ

ขอบคุณครับ
13 @R14988
เราไม่ควรใช้ Form_Current event นะครับ ผมว่าไม่เหมาะสม ควรต้องใช้ Form_Dirty event ในการตรวจสอบมากกว่า

Private Sub Form_Dirty(Cancel As Integer)
   Dim RS as DAO.Recordset

   If Me.NewRecord then
      set RS = Me.RecordsetClone
      If RS.RecordCount > 0 then
        RS.MoveLast
        If RS.RecordCount >= 10 then
            Msgbox "Limit to 10 records only "
            cancel = true
        end if
      end if
      RS.Close: Set RS = Nothing
   end if
End Sub

14 @R14989
@ อ.สันติสุข ขอบคุณที่แนะนำครับ
แต่เหตุการณ์ใน Dirty มันจะเกิดหลังจากต้องการมีคีย์ข้อมูลอ่ะครับ คือผู้ใช้ต้องคีย์ข้อมูลลงในเรคคอร์ดที่ 11 ก่อน ถึงจะรู้ (มันจะดูขัดๆเวลาใช้งานจริง) แต่ On Current มันแค่คลิ๊กก็รู้เลยอ่ะครับ
15 @R14990
ป.ล. แต่จริงๆแล้ว หากใช้ในเหตุการณ์ที่มีการ Cancel ได้จะดีที่สุดอย่างที่ อ.สันติสุข แนะนำครับ
สังเกตุว่าการเขียนเหตุการณ์ ผมจึงพยายามเขียนเงื่อนไขตรวจสอบก่อนเสมอ เช่น
    If Me.RecordsetClone.RecordCount > 9 Then
        If Me.AllowAdditions <> False Then
            Me.AllowAdditions = False ' ปิด Property การเพิ่มเรคคอร์ด
        End If
    Else
หากมีค่าเป็นอย่างที่ต้องการแล้วก็ไม่ต้องทำอีก สำหรับเหตุการณ์ประเภทที่ต้องเกิดขึ้นบ่อยๆครับ
16 @R14991
ผมขอขอบคุณอาจารย์ทั้งสองท่านที่ให้คำแนะนำครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2387s