บังคับให้ INSERT INTO เฉพาะบรรทัดที่มีการกรอกครบอย่างไรครับ



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

15 มี.ค. 64 , 09:06:58
อ่าน 301 ครั้ง

Tatchawin

สวัสดีครับ ขออนุญาตเรียนปรึกษาทุกท่านครับ

ผมต้องการทำฟอร์มขึ้นมาอันนึง โดยเป็น Unbound Form ฟอร์มประกอบด้วยส่วน(โหลดไฟล์มาดูได้นะครับ)
1. กรอกข้อมูลผู้ป่วย(INSERT INTO ลงตาราง tblEmployee)
2. กรอกยาที่จ่าย(INSERT INTO ลงตาราง tblTransactions)
3. กรอกข้อมูลผู้ป่วยจากการซักประวัติ(INSERT INTO ลงตาราง tblDiseaseEmp)

โดยมีโค้ด VBA ด้านล่างนี้

สิ่งที่เกิดขึ้นคือ ในส่วนของ "กรอกยาที่จ่าย" กับ "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" (ซึ่งเป็นตารางฝั่ง Many)
เมื่อเขียน INSERT INTO ปรากฎว่ามัน INSERT ลงตารางให้หมด แม้ช่องนั้นจะยังไม่ได้กรอกอะไรก็ตาม เป็นแค่ค่าว่าง

โดยที่ผมต้องการคือ
1. ในส่วนของ "กรอกยาที่จ่าย" กับ "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" (ซึ่งเป็นตารางฝั่ง Many) ในส่วนบรรทัดที่ยังกรอกไม่ครบทุกช่องให้ซ่อนไว้ก่อน เมื่อครบแล้วแสดงบรรทัดต่อไปให้กรอก
2. ในส่วนของ "กรอกยาที่จ่าย" กับ "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" (ซึ่งเป็นตารางฝั่ง Many) เมื่อ INSERT INTO ลงตาราง ให้ INSERT INTO เฉพาะ บรรทัดที่กรอกครบเท่านั้น(เพื่อป้องกันไม่ให้ INSERT ค่าว่างลงตารางแบบในภาพ)


จะมีวิธีการเขียนโค้ดอย่างไรครับ เพื่อที่จะให้ได้ตามที่ผมต้องการ
ขอบคุณล่วงหน้าสำหรับคำตอบนะครับผม

หมายเหตุ: ผมได้แนบไฟล์ไว้ด้านล่าง และนี่คือ Code ครับ

Private Sub cmdSave_Click()
    On Error Resume Next
    DoCmd.SetWarnings False
   
        DoCmd.RunSQL "INSERT INTO tblEmployee(EmployeeID,NamePrefix,FirstName,LastName,NickName,BloodType) Values ('" & Me.txtEmployeeID1 & "', '" & Me.txtNamePrefix & "', '" & Me.txtFirstName & "', '" & Me.txtLastName & "', '" & Me.txtNickName & "', '" & Me.txtBloodType & "');"
        DoCmd.RunSQL "INSERT INTO tblTransactions(EmployeeID,Unit,Qty,UnitPrice) Values ('" & txtEmployeeID2 & "' ,'" & Me.txtUnit2 & "', '" & Me.txtQty2 & "', '" & Me.txtUnitPrice2 & "');"
        DoCmd.RunSQL "INSERT INTO tblTransactions(EmployeeID,Unit,Qty,UnitPrice) Values ('" & txtEmployeeID3 & "' ,'" & Me.txtUnit3 & "', '" & Me.txtQty3 & "', '" & Me.txtUnitPrice3 & "');"
        DoCmd.RunSQL "INSERT INTO tblTransactions(EmployeeID,Unit,Qty,UnitPrice) Values ('" & txtEmployeeID4 & "' ,'" & Me.txtUnit4 & "', '" & Me.txtQty4 & "', '" & Me.txtUnitPrice4 & "');"
   
        Me.Requery
        DoCmd.Close

End Sub



« แก้ไขครั้งสุดท้าย: 15 มี.ค. 64 , 09:20:47 โดย Tatchawin »

 

15 มี.ค. 64 , 14:18:22
ตอบกลับ #1

PNR

ลองดูครับ
อุตส่าห์อธิบายโจทย์ขนาดนี้พยายามทำให้ละกัน  :cool:
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: aung, Tatchawin

15 มี.ค. 64 , 14:33:31
ตอบกลับ #2

Tatchawin

ลองดูครับ
อุตส่าห์อธิบายโจทย์ขนาดนี้พยายามทำให้ละกัน  :cool:

โอ้ว ขอบคุณมากๆเลยครับ ที่อธิบายเยอะเพราะกลัวคนไม่เข้าใจ 55555
ดูจากโค้ดแล้ว ซับซ้อนมาก ถ้าผมเขียนเองก็คงจะไม่สำเร็จ คงได้เท่าที่เห็น ไปต่อไม่ถูกแล้ว
เพราะผมเองก็ไม่เคยเรียนเขียนโค้ดใดๆเลยครับ หัดเอาจากยูทูป หาเอาจาก Google หรือไม่ก็แกะไฟล์จากเพื่อนๆที่อัพโหลดมาในนี้
เข้าใจบ้าง ไม่เข้าใจบ้าง

แต่ทุกครั้งก็จะพยายามเขียนเองให้ได้ก่อนจะปรึกษาใครครับ ได้บ้างไม่ได้บ้าง เกรงใจผู้อื่นอยู่เวลาต้องถามเขา

ยังไงก็ขอบคุณอีกครั้งนะครับ ช่วยได้เยอะเลยครับ จะลองไปต่อยอดเองต่อไปครับ  :love:
« แก้ไขครั้งสุดท้าย: 15 มี.ค. 64 , 14:41:23 โดย Tatchawin »

 

22 มี.ค. 64 , 15:28:23
ตอบกลับ #3

Tatchawin

ลองดูครับ
อุตส่าห์อธิบายโจทย์ขนาดนี้พยายามทำให้ละกัน  :cool:

ขอสอบถามเพิ่มได้ไหมครับ

หากผมต้องการให้ตรงส่วน "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" มีการเช็คก่อน INSERT ลงตาราง tblDiseaseEmp
ว่าข้อมูลที่กรอกทั้งจาก textbox txtEmployeeID ทั้งสาม และทั้งจาก textbox txtDisease ทั้งสาม นั้นซ้ำกับข้อมูลในตาราง tblDiseaseEmp ที่มีอยู่ก่อนแล้วหรือไม่
(หากซ้ำทั้งคู่ไม่ให้ INSERT แต่หากไม่ซ้ำทั้งคู่หรือซ้ำแค่ฝั่งใดฝั่งหนึ่งสามารถ INSERT ลงไปได้ เพราะตารางใช้ Composite Key)

ผมลองหาโค้ดในยูทูปมาแล้ว มีเจอบ้างแต่ไม่รู้จะ Adapt กับกรณีนี้อย่างไร เพราะมันต้องเช็คทั้งสองค่าน่ะครับ


รบกวนอีกครั้งนึงนะครับ

ขอบคุณมากๆครับ

 


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