กระทู้เก่าบอร์ด อ.Yeadram
1,548 5
URL.หัวข้อ /
URL
ป้องกันการ Save ข้อมูลอย่างไรครับ
มือใหม่มีปัญหาการป้องกันการป้อนข้อมูลที่เหมือนกันในตารางถัดๆไป
อยากทราบว่าจะป้องกันไม่ให้ Save ข้อมูลซ้ำๆกันเข้าไปได้อย่างไรครับท่าน
อยากทราบว่าจะป้องกันไม่ให้ Save ข้อมูลซ้ำๆกันเข้าไปได้อย่างไรครับท่าน
5 Reply in this Topic. Dispaly 1 pages and you are on page number 1
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 แล้วยังหาไม่พบเงื่อนไขที่ต้องการเลย จึงเรียนถามผู้ที่มีความรู้ทุกท่านที่มีประสพการณ์ ช่วยอธิบายให้มือใหม่ๆได้รับความรู้ใหม่ๆด้วยครับ
เช่น ห้อง 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
ประมาณนี้ครับ
มันก็แล้วแต่ลักษณะของการออกแบบฟอร์มครับ ข้อมูลแต่ละอย่างอยู่กันคนละคอนโทรล ถ้าคุณไม่ได้บังคับลำดับการกรอกเอาไว้ ก็เป็นไปได้ว่า ผู้ใช้จะกรอกข้อมูลช่องใดก่อนหลังกันก็ได้
ดังนั้นเราคงจะใช้ เหตุการณ์ 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 มากครับ ตรงนี้อาจเป็นคำตอบที่ผู้อื่นอาจนำไปประยุกต์ใช้ได้ ส่วนผมจะนำไปทดลองดู แล้วจะแจ้งผลกลับครับ
ขอบคุณมากครับ
ขอบคุณมากครับ
Time: 0.3392s
ไม่เข้าใจคำถามครับ "ในตารางถัดๆ ไป" จะพูดว่าในเรคคอร์ดถัดๆ ไปหรือเปล่า
ไม่กล้าตอบ ไม่กล้าอธิบายครับ