กระทู้เก่าบอร์ด อ.Yeadram
3,069 16
URL.หัวข้อ /
URL
การกำหนดจำนวน record ใน form
คือผมจะทำ form ใบกำกับภาษีโดยมี subform เป็นรายการและจำนวนสินค้า
โดยต้องการให้จำนวน record ใน subform สามารถใส่ได้ไม่เกิน 10 รายการ
ไม่ทราบว่าจะกำหนดจำนวน record ใน form ได้ยังไรครับ
ขอบคุณครับ
โดยต้องการให้จำนวน record ใน subform สามารถใส่ได้ไม่เกิน 10 รายการ
ไม่ทราบว่าจะกำหนดจำนวน record ใน form ได้ยังไรครับ
ขอบคุณครับ
16 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R14970
ผมได้ทำตามสรุปใช้งานได้ครับ แต่พอขึ้น record ใหม่ของ form
ไม่สามารถเพิ่มรายการได้ครับ
ขอบคุณครับ
ไม่สามารถเพิ่มรายการได้ครับ
ขอบคุณครับ
3 @R14972
Sub Form_OnCurrent()
Me.AllowAdditions = Not (Me.Recordset.RecordCount = 10)
End Sub
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 เลขที่ต่อไปได้ครับ
ใน subform ได้ตามที่ต้องการ แต่จะมีปัญหาไม่สามารถเพิ่ม record ของ
subform ใน form เลขที่ต่อไปได้ครับ
6 @R14981
อืม...คือมันน่าจะนำค่าเดิมไว้ เมื่อขึ้นเรคคอร์ดใหม่เราก็ต้องแก้มันกลับด้วยครับ
เพิ่มโค๊ดดู ดังนี้ครับ
สมมุติ เมนฟอร์มคุณชื่อ Form1 และ ซับฟอร์มคุณชื่อ Form2 นะครับ
1. ที่ On Current ของ เมนฟอร์ม ใส่โค๊ดดังนี้
ประมาณนี้ ปรับดูนะครับ ผมเขียนแบบไม่ได้ทดสอบเลยนะครับ ทดสอบดูก่อนครับ
เพิ่มโค๊ดดู ดังนี้ครับ
สมมุติ เมนฟอร์มคุณชื่อ 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
คุณใส่ทั้งสองที่ใช่หรือไม่ครับ
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 มันแค่คลิ๊กก็รู้เลยอ่ะครับ
แต่เหตุการณ์ใน 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
หากมีค่าเป็นอย่างที่ต้องการแล้วก็ไม่ต้องทำอีก สำหรับเหตุการณ์ประเภทที่ต้องเกิดขึ้นบ่อยๆครับ
สังเกตุว่าการเขียนเหตุการณ์ ผมจึงพยายามเขียนเงื่อนไขตรวจสอบก่อนเสมอ เช่น
If Me.RecordsetClone.RecordCount > 9 Then
If Me.AllowAdditions <> False Then
Me.AllowAdditions = False ' ปิด Property การเพิ่มเรคคอร์ด
End If
Else
หากมีค่าเป็นอย่างที่ต้องการแล้วก็ไม่ต้องทำอีก สำหรับเหตุการณ์ประเภทที่ต้องเกิดขึ้นบ่อยๆครับ
16 @R14991
ผมขอขอบคุณอาจารย์ทั้งสองท่านที่ให้คำแนะนำครับ
Time: 0.8918s
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