Sub Form : Limit Item
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 379   5
URL.หัวข้อ / URL
Sub Form : Limit Item

รบกวน อ.สุภาพ และ อ.BADMAN ด้วยครับ
จาก Form : FrmTbl004_RequireMain
ผมต้องการให้ User Input Data ใน Sub Form ได้แค่ 24 รายการ เท่านั้น
ถ้ามีการ Key รายการที่ 25 เข้าไป จะขึ้น Msg Box มาบอก
ปัญหาของผมคือ เมื่อขึ้น Msg Box มาบอกแล้ว
ต้องการให้ลบรายการที่ 25 ทิ้งออกไป ซึ่งผมใส่ Code ที่ Sub Form : FrmTbl004_RequireSub ดังนี้

Private Sub Form_BeforeInsert(Cancel As Integer)
If TheCounter Mod 24 = 0 Then
MsgBox "จำกัดรายการที่ 24 Triwall / Truck ( 6 ล้อ ) ", vbOKOnly, "Limit Item"
DoCmd.RunCommand acCmdDeleteRecord

Else

End If

End Sub
ปรากฏว่าขึ้น Msg Box มา และยืนยันให้ลบ Record ที่ 25 แต่พอตอบ OK ก็จะมารายการที่ 25 ขึ้นมาอีกครับ
(ใน Report ผมได้นำ Code ของ อาจารย์ ที่ Limit Item Per Page ใส่ไปแล้ว -
แต่ผมอยากบังคับ User ด้วยครับ)
รบกวน อาจารย์ ช่วยแนะนำด้วยครับ
ขอบพระคุณมากๆ ครับ
Suchat
ชลบุรี
ขอบพระคุณมากๆ ครับ

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

1 @R03783
ผมลองเปลี่ยน Code แล้วสามารถแก้ปัญหาได้แล้วครับ
Private Sub Form_BeforeInsert(Cancel As Integer)
If TheCounter Mod 24 = 0 Then

MsgBox "จำกัดรายการที่ 24 รายการ / เที่ยว ( รถ 6 ล้อ ) ", vbOKOnly, "Limit Item"

' ส่วนที่เปลี่ยนแปลง -------------------------------
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings False
DoCmd.GoToRecord , , acPrevious
' -----------------------------------------------------

Else

End If

End Sub

ลองดูนะครับ (ดู Code ลูกทู่งไปหน่อยนะครับ)
ยังงัยรอคำแนะนำจาก อ.สุภาพ กับ อ.BADMAN อีกทีนะครับ
ขอบพระคุณมากๆ ครับ
Suchat
ชลบุรี
(ผมแนบ File ที่แก้ไขแล้ว มาด้วยนะครับ เพื่อเพื่อนๆ จะสนใจ)
2 @R03805
พบ Bug แล้วครับ
จากตัวอย่าง Program ทีผมแนบ File ไว้
กรณี ถ้ามีข้อมูลอยู่แล้ว แล้วเราไปเพิ่มรายการอีก ถ้า เกิน 24 รายการ
ก็จะมี MSGBox ขึ้นมา และ Delete Item ที่ 25 ออก
--------------------------------------------------------------
แต่ ถ้าเป็น การ Key ข้อมูลใหม่ ในรายการแรก
ก็จะขึ้น MSGBox ขึ้นมา และ Delete Item ที่ 1 ออก ให้ไปเริ่มใหม่
เนื่องจาก TheCounter เมื่อเริ่มต้น มีค่าเป็น 0 ดังนั้น
จึงเข้าเงื่อนไขนี้เหมือนกัน คือ
TheCounter Mod 24 = 0
ต้องขอโทษเพื่อนๆ พี่ๆ ด้วยครับ ตอนนี้ผมยังหาทาวแก้ไม่เจอเลย
ขอบพระคุณมากๆ ครับ
Suchat
ชลบุรี
3 @R03815
ลองเปลี่ยนจาก

TheCounter Mod 24 = 0

ไปเป็น

TheCounter > 24

แทน

ไม่ต้องใช้ Mod

ลองดูครับ

4 @R03862
เรียน อ.สุภาพ ครับ ผมลองใช้ TheCounter > 24
แล้วพบว่า TheCounter ไม่ Update เป็น Item ของ Current Record ครับ
เนื่องจาก TheCounter คือ การ Count([Item])
จะทำงานที่ Item ที่ 26 เป็นต้นไป
ผมลองทำใน Access2K และเปลี่ยนเป็น
Private Sub Form_BeforeInsert(Cancel As Integer)
' ส่วนที่เปลี่ยนแปลง -------------------------------
Dim Str1 As String
Str1 = Me.TheCounter + 1
If Me.Str1 > 24 Then
' -----------------------------------------------------
MsgBox "จำกัดรายการที่ 24 รายการ / เที่ยว ( รถ 6 ล้อ ) ", vbOKOnly, "Limit Item"
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings False
DoCmd.GoToRecord , , acPrevious

Else

End If

End Sub
สามารถแก้ปัญหาได้ แล้วครับ
แต่ ผมลอง Convert File เป็น Access97 ก็จะมีปัญหาเหมือนเดิม (งง มาก)
ขอโทษครับ ที่เข้ามารายงานผลช้า
ขอบพระคุณ อ.สุภาพ มากๆ ครับ
Suchat
ชลบุรี
5 @R03864
สาเหตุที่มันจะทำงานในข้อมูลลำดับที่ 26 เพราะว่า เมื่อมีข้อมูลอยู่แล้ว 24 รายการ เงื่อนไขดัง > 24 มันจะยังไม่จริง เพราะยังไม่ได้มีการบันทึกข้อมูลที่ 25 จึงทำให้มันยอมให้ผ่าน พอบันทึกรายการที่ 25 ไปแล้ว เงือนไขดังกล่าวจะเป็นจริงทันที่

วิธีแก้ ต้องขออภัยที่แนะนำตกไปครับ ให้เปลี่ยนเป็น >= 24 จึงจะได้ผลครับ

ส่วนปัญหาที่ใช้กับ Access 97 ไม่ได้ ลองเปลี่ยนเป็น

...
Dim intX As Integer
intX = Me.TheCounter + 1
If Me.intX >= 24 Then
...

ผมไม่รู้ว่าช่อง TheCounter ได้มายังงัย แต่จะลองใช้ DCount("*","ตารางเป้าหมาย") หรือ Me.RecordsetClone.RecordCount แทนก็ได้ครับ


@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0542s