สมัครสมาชิก
 

ป้องกันไม่บันทึกฟอร์มขณะทีใส่ข้อมูลไม่หมด



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

06 ส.ค. 62 , 10:57:04
อ่าน 89 ครั้ง

kunlek

ผมมีฟอร์มบันทึกขาย โดยมีส่วนที่เป็น sub-forms มักจะเผลอบ่อยๆๆ save record ขณะป้อนข้อมูล โดยที่บันทึกรายการสินค้าใน sub-forms ไม่เสร็จ  ป้องกันอย่างไรดีครับ

 

06 ส.ค. 62 , 11:41:06
ตอบกลับ #1

PNR

ผมมีฟอร์มบันทึกขาย โดยมีส่วนที่เป็น sub-forms มักจะเผลอบ่อยๆๆ save record ขณะป้อนข้อมูล โดยที่บันทึกรายการสินค้าใน sub-forms ไม่เสร็จ  ป้องกันอย่างไรดีครับ
ใช้ Event BeforeUpdate ก็ได้คับ
โดยสร้าง msgbox สอบถามว่าต้องการบันทึกหรือไม่
ตัวอย่างนะครับ เมื่อกดปุ่มบันทึก
โค๊ด: [Select]
Private Sub Command3_Click() 'ปุ่มบันทึกไว้บนฟอร์มหลัก
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
End Sub

ก่อนบันทึกจะผ่าน Event Before ครับ เอาโค้ดนี้วางไว้ที่ Subform

โค๊ด: [Select]
Private Sub Form_BeforeUpdate(Cancel As Integer)
If MsgBox("ต้องการบันทึกหรือไม่", vbYesNo + vbQuestion, "สอบถาม") = vbYes Then
Cancel = False
Else
Cancel = True
End If
End Sub

ถ้าตอบ Yes ก็จะบันทึก
ถ้าตอบ No ก็จะละเว้นการบันทึกไว้ก่อน จนกว่าจะตอบ Yes ครับ
« แก้ไขครั้งสุดท้าย: 06 ส.ค. 62 , 12:03:09 โดย PNR »
:meaw: :grin: :shout:
 

06 ส.ค. 62 , 12:06:42
ตอบกลับ #2

kunlek

เอา code ไปวางที่ before update ฟอร์มหลัก เมื่อผมป้อนส่วนที่เป็นฟอร์มหลักจบ เวลาจะไปบันทึกใน ส่วน detail ที่เป็น subform มันจะข้อความที่เกิดจาก code นี้ทุกครั้ง  กรณีที่ไม่เผลอกลายเป็นรำคราญ codeนี้  เจตนาจะให้ไปดักลำดับสุดท้ายที่เราป้อนเรคคอร์ด หรือป้อนเรคคอร์ดหมด ก็ยิ่งดีครับ  ขอบคุณครับ

 

06 ส.ค. 62 , 12:22:47
ตอบกลับ #3

PNR

อ้างถึง
ไปวางที่ before update ฟอร์มหลัก
  ไม่ใช่ครับ ไปวางที่ subform ครับวางฟอร์มหลักมันจะถามกวนใจแน่นอน ความต้องการของเราคือ SubForm ครับ กดมุมมองออกแบบของ Subform เลือก Event Before Update ของSubForm ครับ

หรือถ้าต้องการตรวจสอบว่าถ้าป้อนข้อมูลที่ textbox ลำดับสุดท้ายหรือยัง
ก็เช็ค ได้เหมือนกันเช่น
Private Sub Form_BeforeUpdate(Cancel As Integer)
IF isnull(Me.txtLasttextbox) then
MsgBox "กรุณากรอกข้อมูลให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = true
Else
Cancel = False
End If
End Sub

หรือ ถ้าต้องการเช็คว่าทุก Control ป้อนครบแล้วหรือยัง ถ้า Control ไหนไม่ได้กรอกก็จะแจ้งเตือนให้ไปกรอก Control นั้นๆ ครับ

Private Sub Form_BeforeUpdate(Cancel As Integer)
IF isnull(Me.textbox1) then
MsgBox "กรุณากรอกข้อมูล textbox1 ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
elseif isnull(Me.textbox2) then
MsgBox "กรุณากรอกข้อมูลtextbox2 ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
elseif isnull(Me.textbox3) then
MsgBox "กรุณากรอกข้อมูลtextbox3 ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
elseif isnull(.........ฯลฯ.......) then
MsgBox "กรุณากรอกข้อมูลtextboxฯลฯ ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
Else
Cancel = False
End If
End Sub

โค้ดนี้วางใน Subform นะครับท่าน
« แก้ไขครั้งสุดท้าย: 06 ส.ค. 62 , 12:52:23 โดย PNR »
:meaw: :grin: :shout:
 

07 ส.ค. 62 , 12:49:38
ตอบกลับ #4

nonc31

สำหรับผม ผมกำหนดคุณสมบัติของฟิลด์ "ความจำเป็น=ใช่" (มันก็เหมือนกับดอกจันสีแดงบนเว็ป)
ถ้าค่าในฟิลด์นั้นไม่มีข้อมูล เวลาเราบันทึก หรือ รีเฟรชฟอร์ม Access จะส่ง Msg Errorcode 3314
และใน Msg มักจะระบุชื่อฟิลด์ออกมาด้วย เอาข้อมูลจาก Msg ไปจัดการได้เลยครับ ถ้าพบ 3314
จะให้ทำอะไรต่อ ให้กลับไป ณ จุดที่ยังไม่บันทึกข้อมูลก็ได้

 


บอร์ดเรียนรู้ Access สำหรับคนไทย