ขอไอเดียป้องกันข้อมูลซ้ำ



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

25 ก.ค. 61 , 08:25:16
ตอบกลับ #16

prajak

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #16 เมื่อ: 25 ก.ค. 61 , 08:25:16 »
โค๊ด: [Select]
Private Sub save_Click()
 Dim rstObj As DAO.Recordset, msgStr As String
 Me.Dirty = False
    Set rstObj = CurrentDb.OpenRecordset("FindDuplicate")
    Do While Not rstObj.EOF
        msgStr = msgStr & rstObj.Fields("ID") & vbCrLf
        rstObj.MoveNext
    Loop
    If IsNull(msgStr) Or msgStr = "" Then
    Me.EDTDATE = Now
    DoCmd.RunCommand acCmdSave
    Else
    Call MsgBox(msgStr, , "ตรวจพบ ID ซ้ำกัน !!!!")
    End If
     Set rstObj = Nothing
End Sub
ที่ปุ่ม Save แก้เป็นแบบนี้ครับ
คือถ้าเจอ ID ไหนซ้ำกันก็จะแจ้งเดือน ปกติ ถ้าเพิ่ง Copy มาแล้ว Save แล้วมันจะแจ้งว่า ID ไหน ซ้ำกับ ID ไหน พอเราแก้ไขกดเซฟไปก็จะสามารถเซฟได้แล้วครับ
ลองเอาcodeไปวางไว้ในคำสั่งsaveแล้วได้ผลครับ แต่จะรบกวนคุณปิ่นณรงค์ช่วยอธิบายcodeนี้ให้หน่อยครับ ว่ามันเช็คที่ฟิวด์อะไรบ้างถึงแจ้งว่าซ้ำกันอะครับ พอดีผมดูไม่ออกครับ

 

25 ก.ค. 61 , 08:29:54
ตอบกลับ #17

ปิ่นณรงค์

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #17 เมื่อ: 25 ก.ค. 61 , 08:29:54 »
คำสั่งนี้ไป ดึง Record จากคิวรี่ชื่อ FindDuplicate มาครับ โดยที่คิวรี่นี้ ได้ทำให้ตรวจสอบ Field 4 Field ที่เราจะหาค่าซ้ำกัน
ถ้าที่คิวรี่มีข้อมูลแสดงขึ้นมา(มีค่าซ้ำกัน) โค้ดนี้จะไป ดึงเอา ID มาแสดงข้อความบนฟอร์ม และใช้ในการตรวจสอบการซ้ำกันคือ ถ้าคิวรี่นี้ไม่มีข้อมูล(คือไม่ซ้ำกัน) ก็สามารถเซฟได้ครับ

ถ้าจะดูวิธีการตั้งค่าหาค่าซ้ำกันดูได้ที่คิวรี่ FindDuplicate  เลยครับ

[PD #],[STYLE],[DESCRIPTION],[PIECES]

4 Field ที่ผมดึงมาหาค่าซ้ำครับถ้าอยากได้ Field เพิ่มท่านใส่เพิ่มเอาได้เลย
« แก้ไขครั้งสุดท้าย: 25 ก.ค. 61 , 08:40:55 โดย ปิ่นณรงค์ »
:love: :grin:
 

25 ก.ค. 61 , 09:12:14
ตอบกลับ #18

prajak

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #18 เมื่อ: 25 ก.ค. 61 , 09:12:14 »
อันนี้ผมลองกับฐานข้อมูลจริงเลยครับ ผลเป็นดังรูป

นั่นหมายถึง4ฟิวด์ที่เราใช้ตรวจสอบมีข้อมูลซ้ำหลายrecordมาก ผมคิดดูแล้วจะทำข้อตกลงกับผู้เกี่ยวข้องใหม่ครับว่าจะต้องไม่ให้PD#ซ้ำกันฟิวด์เดียวก็พอ แต่ตอนCopyข้อมูลยอมให้ฟิวด์ PD#ว่างได้( เพราะบางครั้งขณะcopy อาจยังไม่มีเลขPD# อาจมาใส่ทีหลัง) ถ้าเป็นตามแนวทางนี้ code ที่คุณปิ่นณรงค์ให้มาต้องปรับแก้ส่วนไหนบ้างครับ แก้ไขเฉพาะส่วนนี้ใช่ไหมครับ



 

25 ก.ค. 61 , 09:53:14
ตอบกลับ #19

prajak

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #19 เมื่อ: 25 ก.ค. 61 , 09:53:14 »
ที่ปุ่มsave ผมปรับให้เป็นแบบนี้ครับ เช็คเฉพาะPD#ซ้ำ แต่กรณี copy ขณะยังไม่มีเลขPD#ยังสามารถCopyได้อยู่ แต่เดี๋ยวคงต้องบังคับให้ฟิวด์PD# Require = Yes ไปเลย

น่าจะจบได้ใช่ไหมครับแบบนี้

 

25 ก.ค. 61 , 12:00:53
ตอบกลับ #20

ปิ่นณรงค์

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #20 เมื่อ: 25 ก.ค. 61 , 12:00:53 »
ถ้าจะเช็คแค่ PD# ลองดูครับ
แต่ผมว่า Cancel = True  และ  ไม่น่าจะใช้งานได้ เพราะไม่ใช้ Event BeforeUpdate
และ Me.PD_ Undo น่าจะไม่ต้องใช้
ผมว่าพอเราทราบว่าซ้ำกัน ก็ให้ไปตรวจสอบแก้ไข ถ้าคิดว่าไม่เก็บไว้ก็ลบ Order ทิ้งไปได้เลยคับ

ส่วนที่ต้องไปแก้ไข ที่ Query Append ที่ Field PD# ให้เอาออกไปเพื่อให้ตอน Copy PD# จะได้เป็นค่าว่าง
« แก้ไขครั้งสุดท้าย: 25 ก.ค. 61 , 12:04:13 โดย ปิ่นณรงค์ »
:love: :grin:
 

25 ก.ค. 61 , 13:42:42
ตอบกลับ #21

prajak

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #21 เมื่อ: 25 ก.ค. 61 , 13:42:42 »
รบกวนสอบถามเพิ่มเติมนะครับ ปุ่ม save record error หลังจากที่แปลงไฟล์เป็นนามสกุล .accde แล้ว ตามรูปครับ ตอนที่เป็น .accdb สามารถใช้ได้ปกติครับ ไม่ทราบเป็นที่อะไรครับ





 

25 ก.ค. 61 , 14:36:39
ตอบกลับ #22

ปิ่นณรงค์

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #22 เมื่อ: 25 ก.ค. 61 , 14:36:39 »
ใส่โค้ดว่า
DoEvents
แล้วลองเปลี่ยนโค้ด เซฟดูครับว่าได้ไหม

DoEvents
    DoCmd.save acForm, "Merchandiser Key Update"
« แก้ไขครั้งสุดท้าย: 25 ก.ค. 61 , 14:48:08 โดย ปิ่นณรงค์ »
:love: :grin:
 

25 ก.ค. 61 , 15:04:29
ตอบกลับ #23

prajak

: ขอไอเดียป้องกันข้อมูลซ้ำ
« ตอบกลับ #23 เมื่อ: 25 ก.ค. 61 , 15:04:29 »
ใส่โค้ดว่า
DoEvents
แล้วลองเปลี่ยนโค้ด เซฟดูครับว่าได้ไหม

DoEvents
    DoCmd.save acForm, "Merchandiser Key Update"
ได้แล้วครับ ขอบคุณมากครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: Anuwat Jaijomkun


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