กระทู้เก่าบอร์ด อ.Yeadram
1,160 4
URL.หัวข้อ /
URL
ไม่อยากให้เพิ่ม Record เมื่อกดออกจาก form
ผมสร้าง form แบบ datasheet view เปิดให้ Add & Edit ได้
(Default View เป็น Continuous form)
โดยการกรอกข้อมูลผมจะตั้ง Require field ไว้ 3-4 field
ตั้งจาก Event Form_BeforeUpdate ถ้า Require field ไม่มีข้อมูล จะแจ้งเตือน Msgbox และ
Cancel = True
ปัญหาที่พบ
ใน Form นี้มีปุ่ม Cancel และปุ่ม Close form
ปุ่ม Cancel จะอยู่ท้าย Record ทุก Record
ส่วนปุ่ม Close จะอยู่ที่ Form Footer
1. เมื่อกดปุ่ม Close โดยที่กรอกข้อมูลไว้บางส่วน และไม่ได้กรอกใน Require Field จะแจ้งเตือนแล้วออกจาก form ไป *ออกจาก Form แต่ยังบันทึกข้อมูลลงในตารางโดย Require Field ที่ต้องการเป็นค่าว่าง
2. ส่วนปุ่ม Cancel เมื่อข้อมูลยังไม่ได้บันทึกลงตารางเมื่อกดแล้วระบบจะขึ้น Error (หา ID ที่จะ Cancel ไม่ได้) ผมได้ตั้ง error handle ให้ส่งค่าปุ่ม ESC เพื่อยกเลิกรายการครับ (เพื่อให้ user ไม่งงมาก)
If err.Number = 94 Then
SendKeys "{esc}", True
Else
พบว่าบางเครื่องจะมีปัญหาขึ้น error
execution of this application has stopped due to a run-time error
this program can't continue and will be shut down
อยากทราบวิธีแก้ไข 2 เรื่องครับ
1. แก้ให้ไม่ทำการ Insert ข้อมูลกรณีกดปุ่ม Cancel และ Close
2. สงสัยเรื่องที่บางเครื่อง Error ตามที่แจ้งไปครับ (การใช้งานแต่ละเครื่องมีทั้ง windows xp / 7 และ Office Access 2003 / 2010 ครับ
ขอบคุณครับ
(Default View เป็น Continuous form)
โดยการกรอกข้อมูลผมจะตั้ง Require field ไว้ 3-4 field
ตั้งจาก Event Form_BeforeUpdate ถ้า Require field ไม่มีข้อมูล จะแจ้งเตือน Msgbox และ
Cancel = True
ปัญหาที่พบ
ใน Form นี้มีปุ่ม Cancel และปุ่ม Close form
ปุ่ม Cancel จะอยู่ท้าย Record ทุก Record
ส่วนปุ่ม Close จะอยู่ที่ Form Footer
1. เมื่อกดปุ่ม Close โดยที่กรอกข้อมูลไว้บางส่วน และไม่ได้กรอกใน Require Field จะแจ้งเตือนแล้วออกจาก form ไป *ออกจาก Form แต่ยังบันทึกข้อมูลลงในตารางโดย Require Field ที่ต้องการเป็นค่าว่าง
2. ส่วนปุ่ม Cancel เมื่อข้อมูลยังไม่ได้บันทึกลงตารางเมื่อกดแล้วระบบจะขึ้น Error (หา ID ที่จะ Cancel ไม่ได้) ผมได้ตั้ง error handle ให้ส่งค่าปุ่ม ESC เพื่อยกเลิกรายการครับ (เพื่อให้ user ไม่งงมาก)
If err.Number = 94 Then
SendKeys "{esc}", True
Else
พบว่าบางเครื่องจะมีปัญหาขึ้น error
execution of this application has stopped due to a run-time error
this program can't continue and will be shut down
อยากทราบวิธีแก้ไข 2 เรื่องครับ
1. แก้ให้ไม่ทำการ Insert ข้อมูลกรณีกดปุ่ม Cancel และ Close
2. สงสัยเรื่องที่บางเครื่อง Error ตามที่แจ้งไปครับ (การใช้งานแต่ละเครื่องมีทั้ง windows xp / 7 และ Office Access 2003 / 2010 ครับ
ขอบคุณครับ
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R21226
เอาโค้ดในปุ่ม Close และ Cancel มาให้ดูหน่อยครับ ฟังจากอาการแล้วไม่น่าเป็นไปได้เพราะถ้ากำหนดพารามิเตอร์ Cancel ให้เท่ากับ True แล้ว ยังไงมันก็ไม่บันทึกการแก้ไข/เพิ่มเรคอร์ดเข้าไปนะครับ
2 @R21234
มี หลักๆ 3 SUB นะครับ
ส่วนใน Msgbox เป็นแค่ Message แจ้งเฉยๆครับ
Private Sub btnCancelRec_Click()
On Error GoTo err:
If MsgBox("µéͧ¡Òà Cancel ÃÒ¡ÒùÕéËÃ×ÍäÁè", vbYesNo) = vbYes Then
intRecID = Me.ReceiveID.value
DoCmd.SetWarnings False
DoCmd.OpenQuery "qryUpdate_CancelRec"
DoCmd.SetWarnings True
MsgBox "Record is Cancelled.", vbOKOnly, "Result"
Me.Requery
End If
ext:
Exit Sub
err:
If err.Number = 94 Then
SendKeys "{esc}", True
Else
MsgBox err.Description
End If
Resume ext
End Sub
Private Sub btnClose2_Click()
On Error GoTo Err_Click
DoCmd.Close
DoCmd.OpenForm "frmMain"
ext:
Exit Sub
Err_Click:
MsgBox err.Description
Resume ext
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo err
If Me.Amount.value = 0 Or IsNull(Me.Amount.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Amount ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.Amount.SetFocus
ElseIf Me.BankAcct.value = "" Or IsNull(Me.BankAcct.value) = True Then
MsgBox "¡ÃسÒÃÐºØ BankAcct ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.BankAcct.SetFocus
ElseIf Me.RType.value = "" Or IsNull(Me.RType.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Receive Type ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.RType.SetFocus
ElseIf Me.RDate.value = "" Or IsNull(Me.RDate.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Receive Date ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.RDate.SetFocus
ElseIf Me.Remark.value = "" Or IsNull(Me.Remark.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Remark ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.Remark.SetFocus
End If
Cancel = True
ext:
Exit Sub
err:
MsgBox err.Description
Resume ext
End Sub
ส่วนใน Msgbox เป็นแค่ Message แจ้งเฉยๆครับ
Private Sub btnCancelRec_Click()
On Error GoTo err:
If MsgBox("µéͧ¡Òà Cancel ÃÒ¡ÒùÕéËÃ×ÍäÁè", vbYesNo) = vbYes Then
intRecID = Me.ReceiveID.value
DoCmd.SetWarnings False
DoCmd.OpenQuery "qryUpdate_CancelRec"
DoCmd.SetWarnings True
MsgBox "Record is Cancelled.", vbOKOnly, "Result"
Me.Requery
End If
ext:
Exit Sub
err:
If err.Number = 94 Then
SendKeys "{esc}", True
Else
MsgBox err.Description
End If
Resume ext
End Sub
Private Sub btnClose2_Click()
On Error GoTo Err_Click
DoCmd.Close
DoCmd.OpenForm "frmMain"
ext:
Exit Sub
Err_Click:
MsgBox err.Description
Resume ext
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo err
If Me.Amount.value = 0 Or IsNull(Me.Amount.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Amount ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.Amount.SetFocus
ElseIf Me.BankAcct.value = "" Or IsNull(Me.BankAcct.value) = True Then
MsgBox "¡ÃسÒÃÐºØ BankAcct ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.BankAcct.SetFocus
ElseIf Me.RType.value = "" Or IsNull(Me.RType.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Receive Type ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.RType.SetFocus
ElseIf Me.RDate.value = "" Or IsNull(Me.RDate.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Receive Date ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.RDate.SetFocus
ElseIf Me.Remark.value = "" Or IsNull(Me.Remark.value) = True Then
MsgBox "¡ÃسÒÃÐºØ Remark ¡è͹à¾ÔèÁ¢éÍÁÙÅ"
Me.Remark.SetFocus
End If
Cancel = True
ext:
Exit Sub
err:
MsgBox err.Description
Resume ext
End Sub
3 @R21235
1. แน่ใจหรือว่ามันบันทึก ลองเช็คในเทเบิลดูแน่ชัดหรือยัง !!! เนื่องจากโค้ดใน BeforeUpdate event นั้นท่าทางจะผิด เพราะไม่ว่าคุณจะใส่ข้อมูลในช่อง required field หรือไม่ก็ตาม คุณก็กำหนด Cancel = True เสมอ ดังนั้นมันจะไม่ให้ผ่านไปได้เลย คุณไม่มีทางเพิ่ม/แก้ไขเรคอร์ดอะไรทั้งนั้น แล้วผมจำลองทำดู ก็ไม่มีทางผ่านเช่นกันครับ
2. Error code 94 (Invalid use of Null) , แทนที่จะรอให้เกิดปัญหาแล้วมาเช็ค Error code 94 สิ่งที่ควรจะเป็นคือ ควรเช็คว่าช่องต่างๆที่จำเป็นได้ถูกป้อนข้อมูลก่อนจะ OpenQuery ถึงจะถูก เพราะ Error Handling Routine เรามีไว้เพื่อใช้สำหรับดักข้อผิดพลาดต่างๆที่เราไม่รู้ว่ามันจะเกิดต่างหาก ยกเว้นในบางกรณีที่การเช็คป้องกันข้อผิดพลาดนั้นทำก่อนไม่ได้เลย เพราะไม่มีฟังก์ชั่นให้เช็ค หรือไม่ก็เช็คไม่ได้ง่ายๆครับ
ส่วนการที่ขึ้นข้อความ "execution of this application has stopped due to a run-time error this program can't continue and will be shut down" ให้ลองทำการ Compile ดูก่อนว่ามีอะไรผิดพลาดแฝงไว้ที่ไหนในระบบหรือไม่ ถ้าไม่มีก็ค่อยทำ Decompile ครับ (ลองหาวิธีทำจากกระทู้เก่าๆครับ)
2. Error code 94 (Invalid use of Null) , แทนที่จะรอให้เกิดปัญหาแล้วมาเช็ค Error code 94 สิ่งที่ควรจะเป็นคือ ควรเช็คว่าช่องต่างๆที่จำเป็นได้ถูกป้อนข้อมูลก่อนจะ OpenQuery ถึงจะถูก เพราะ Error Handling Routine เรามีไว้เพื่อใช้สำหรับดักข้อผิดพลาดต่างๆที่เราไม่รู้ว่ามันจะเกิดต่างหาก ยกเว้นในบางกรณีที่การเช็คป้องกันข้อผิดพลาดนั้นทำก่อนไม่ได้เลย เพราะไม่มีฟังก์ชั่นให้เช็ค หรือไม่ก็เช็คไม่ได้ง่ายๆครับ
ส่วนการที่ขึ้นข้อความ "execution of this application has stopped due to a run-time error this program can't continue and will be shut down" ให้ลองทำการ Compile ดูก่อนว่ามีอะไรผิดพลาดแฝงไว้ที่ไหนในระบบหรือไม่ ถ้าไม่มีก็ค่อยทำ Decompile ครับ (ลองหาวิธีทำจากกระทู้เก่าๆครับ)
4 @R21236
1. ผิดจริงครับอันนี้เพิ่มเข้าไปทีหลังครับแก้ไว้ใน if แต่ละตัวแล้วครับ
2. 94 ผมเปลี่ยนเป็นเช็ค Count record >0 แล้วครับ
3. จะลองหาดูครับ
ได้ผลยังไงจะมีแจ้งครับ
ขอบคุณครับ
2. 94 ผมเปลี่ยนเป็นเช็ค Count record >0 แล้วครับ
3. จะลองหาดูครับ
ได้ผลยังไงจะมีแจ้งครับ
ขอบคุณครับ
Time: 0.5129s