ป้องกันการ Save ข้อมูลอย่างไรครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,548   5
URL.หัวข้อ / URL
ป้องกันการ Save ข้อมูลอย่างไรครับ

มือใหม่มีปัญหาการป้องกันการป้อนข้อมูลที่เหมือนกันในตารางถัดๆไป
อยากทราบว่าจะป้องกันไม่ให้ Save ข้อมูลซ้ำๆกันเข้าไปได้อย่างไรครับท่าน

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

1 @R08481
"การป้อนข้อมูลที่เหมือนกันในตารางถัดๆไป"

ไม่เข้าใจคำถามครับ "ในตารางถัดๆ ไป"   จะพูดว่าในเรคคอร์ดถัดๆ ไปหรือเปล่า
ไม่กล้าตอบ ไม่กล้าอธิบายครับ
2 @R08483
ใช่ครับ
3 @R08504
โปรแกรม Access ที่ลองเขียนนี้เป็น Table ป้อนหัวข้อในการจองห้องอบรมที่มี 6 ห้อง
เช่น ห้อง A,B,C,D,E,F และมีอุปกรณ์ 3 ตัวเป็น Projector ให้จอง เช่น ก ,ข,ค
นอกจากนี้ยังมีการจองเป็นวันที่ และ เวลาอีก เช่น Start และ Finish ตรงนี้แหละครับที่อยากถามว่า เมื่อมีคน จอง Option ที่ 1 เช่น
วันที่จอง        1/2/2554
จองห้อง        A
Start        8.00
Finish      17.00
Projector      ก
ลักษณะข้อมูลแบบนี้ที่ Record ไว้แล้ว   เมื่อมีการป้อนซ้ำลงไปอยากให้โปรแกรมสั่งไม่ให้ Save เพื่อป้องกันการจอง ห้องและอุปกรณ์ที่ตรงกันพอดี ผมทดลองหลายวิธีแบบที่พอหาได้ใน Help แล้วยังหาไม่พบเงื่อนไขที่ต้องการเลย   จึงเรียนถามผู้ที่มีความรู้ทุกท่านที่มีประสพการณ์   ช่วยอธิบายให้มือใหม่ๆได้รับความรู้ใหม่ๆด้วยครับ
4 @R08508
เราต้องหาเหตุการณ์ใด เหตุการณ์หนึ่งที่เหมาะสม ให้ทำการตรวจเช็คก่อนครับ
มันก็แล้วแต่ลักษณะของการออกแบบฟอร์มครับ ข้อมูลแต่ละอย่างอยู่กันคนละคอนโทรล ถ้าคุณไม่ได้บังคับลำดับการกรอกเอาไว้ ก็เป็นไปได้ว่า ผู้ใช้จะกรอกข้อมูลช่องใดก่อนหลังกันก็ได้

ดังนั้นเราคงจะใช้ เหตุการณ์ before update ของคอนโทรลใด คอนโทรลหนึ่งไม่ได้

งั้นเราก็คงต้องให้มันเช็คทุกคอนโทรลเลย before update ของทุกๆ คอนโทรลไปเลย ถ้าต้องการประหยัดการเขียนโค้ดเราก็ควรใช้โปรแกรมย่อย แล้วให้ ทุกๆ คอนโทรลไปเรียกใช้เอา เช่น

วันที่จอง_beforeupdate(cancel as integer)
cancel = myCheck
end sub

จองห้อง_beforeupdate(cancel as integer)
cancel = myCheck
end sub

Start_beforeupdate(cancel as integer)
cancel = myCheck
end sub

.......

function myCheck() as integer
' ตั้งค่า default ของฟังก์ชั่นไว้ก่อนเลย
myCheck = false

' ถ้ากรอกข้อมูลไม่ครบ ก็ยังไม่ต้องตรวจ
if วันที่จอง = "" then exit function
if จองห้อง="" then exit function
if .....


' ถ้ากรอกข้อมูลครบทุกช่องก็ทำการตรวจได้เลย
dim x as long
dim stCriteria as string
stCriteria = "[วันทีจอง] = " & me.วันที่จอง
stCriteria = stCriteria & "[จองห้อง] = " & me.จองห้อง
stCriteria = stCriteria & .....
...

x = nz(dcount("วันที่จอง", "table1", stCriteria),0)
if x >0 then
' ถ้าตรวจสอบแล้วว่าเคยมีข้อมูลชุดนี้แล้ว ก็จัดการล้างมันทิ้งซะ
วันที่จอง =""
จองห้อง = ""
...
...
...
MyCheck=True
End if

end function

ประมาณนี้ครับ
5 @R08515
ขอขอบคุณ คุณ yeadram มากครับ ตรงนี้อาจเป็นคำตอบที่ผู้อื่นอาจนำไปประยุกต์ใช้ได้ ส่วนผมจะนำไปทดลองดู แล้วจะแจ้งผลกลับครับ
ขอบคุณมากครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3392s