เรื่อง ชื่อ และ นามสกุล ซ้ำ
กระทู้เก่าบอร์ด อ.Yeadram

 2,771   6
URL.หัวข้อ / URL
เรื่อง ชื่อ และ นามสกุล ซ้ำ

รบกวนถามครับ
คือผมมี tableชื่อ Person ที่มีฟิล์ด Firstname(ชื่อ) และ มีฟิล์ด LastName(นามสกุล) มีที่อยู่และอื่นๆ

โดนสร้างเป็น Form ชื่อ FmPerson และโดยมี txtFirstNameเพื่อเอาไว้ใส่ชื่อ และมีฟิล์ด txtLatName เอาไว้ใส่นามสกุล

ทีนี้ผมอยากทราบโค๊ต ที่แจ้งเตือนว่า "มีชื่อ และนามสกุลนี้อยู่แล้ว" เมื่อมีการลงชื่อ และนามสกุลนี้ เข้าไปใหม่ จะต้องเขียนโค๊ตอย่างไรครับ

ลองประมาณนี้ แล้วมันไม่ได้ครับ

Private Sub FirstName_BeforeUpdate(Cancel As Integer)
if not isnull(dlookup("FirstName", "TbPerson", "[FirstName] Like '" & txName & "' AND [LastName] Like '" & txLastname "'")) then
MsgBox "มีชื่อ และนามสกุลนี้อยู่แล้ว"
End If
End Sub

เขียนโค๊ตยังไงดีครับ

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

1 @R03744
ผมว่า ลองแมโคร ดูมั้ย น่าลองนะ Event......BeforeUpdate

DCount("[ฟิลด์ที่ต้องการตรวจสอบ]","ชื่อตาราง","[ฟิลด์ที่ต้องการตรวจสอบ]=Forms![ชื่อฟอร์ม]![ชื่อช่องรายการ ส่วนมากจะเป็นแบบ textbox นะครับ]")>0

-----------------ที่แมโคร จะมีที่สร้างอยู่ครับ
เงื่อนไข
DCount("[ฟิลด์ที่ต้องการตรวจสอบ]","ชื่อตาราง","[ฟิลด์ที่ต้องการตรวจสอบ]=Forms![ชื่อฟอร์ม]![ชื่อช่องรายการ ส่วนมากจะเป็นแบบ textbox นะครับ]")>0

แอคชั่น
CancelEvent

msgbox
ข้อมูลมีอยู่แล้ว ตรวจสอบใหม่อีกครั้ง

หวังว่าคง ไม่งง น้อ
2 @R03745
ครับผม ขอบคุณครับ เดี่ยวพรุ่งนี้ลองต่อนะครับ แล้วเดี๋มาแจ่งผลนะครับ ขอบคุณครับ :-)
3 @R03757
ถามหน่อยครับผม
คือ ถ้าสร้างแม็คโครนี้แล้ว จะตรวจสอบทั้งชื่อและนามสกุลพร้อมกันหรือเป่าครับ คือผมถามไม่ระเอียด คือว่า

เมื่อใส่ชื่อนี้แล้ว มันมีซ้ำก็จริง แต่ไม่เป็นไร (รอดูว่านามสกุลจะตรงกันอีกไหมก่อน)
แต่เมื่อใส่นามสกุล เข้าไปและกด Enter แล้ว ถ้าชื่อ + นามสกุล 2ฟิล์ดนี้ ซ้ำกัน ให้แจ้งว่า "มีชื่อ และนามสกุลนี้อยู่แล้ว" ประมาณนี้ครับ ไม่รู้ว่าต้องทำอย่างไรดีครับ

หรือจับทำฟิล์ดเดียวเลยง่ายกว่าครับ (คือมีชื่อ เว้นวรรค และนามสกุลไปเลย)
ขอบคุณครับ
4 @R10405
อยากรู้เหมือนกันครับๆ รบกวนช่วยตอบทีครับ
5 @R10418
จริงๆแล้วควรจะออกแบบให้มีหมายเลข ID ของแตะคน แล้ว Set ค่า ID นี้ให้เป็น Primay Key ก็จบเรื่องไม่ต้องเขียน code ตรวจสอบค่าอีก
แต่เอาละคุณอาจจะมีเหตุผลอื่นๆ ถ้าต้องการแบบที่เขียนมาจริงๆผมขอแนะนำอย่างนี้ครับ
1. ง่ายที่สุดเลยคือ Set field Firstname, Lastname ให้เป็น Primary key ทั้งคู่ (มุมมองออกแบบตาราง เลือกทั้ง 2 ฟิลด์พร้อมกันแล้วกดรูป กุญแจ)
2. ถ้ามีฟิลด์อื่นเป็น Primary key อยู่แล้วก็ลองแบบนี้
   2.1 เอา code ที่คุณเขียนไว้มาใช้ละครับ
     if not isnull(dlookup("FirstName", "TbPerson", "[FirstName] Like '" & txName & "') then
             if not isnull(dlookup("LasttName", "TbPerson", "[LastName] Like '" & txLastName & "')
            MsgBox "มีชื่อ และนามสกุลนี้อยู่แล้ว"
             End If
       end if
   2.2 นำ code ทั้ง 2 มาต่อกันโดยใช้คำเชื่อม AND ก็ได้ ซึ่งคงจะยาวเกินหน้าจอ แต่ลองดูได้ไม่เสียหายครับ
6 @R10510
ตามที่ คุณ NOva ว่าไว้ก็ดีครับ ใช้ Primary Key ขอแสดงความคิดเห็นนะครับ คุณ BenTen การป้องกันชื่อ นามสกุลซ้ำ ไม่น่าจะใช่วิธีการที่ถูกต้อง เพราะคนที่มีชื่อ และนามสกุลซ้ำกัน มีเยอะนะครับ....อย่างพื้นที่ๆผมอยู่   คนที่ชื่อ หมี แซ่้ลี มี 100 กว่าคน ซึ่งเป็นชื่อนามสกุลเดียวกัน ผมใช้ เลขประชาชน 13 หลักเป็น Primary Key แทนครับ....แต่ถ้าคนที่ไม่มี เลขประชาชน 13 หลัก ก็ต้องกำหนด ID ของแต่ละคนไม่ให้ซ้ำกันครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.4157s