กระทู้เก่าบอร์ด อ.Yeadram
1,899 8
URL.หัวข้อ /
URL
Relationship
อาจารย์คะ ขอรบกวนช่วยดู Relationship ให้หน่อยค่ะ ว่าแบบนี้ถูกต้องหรือไม่ค่ะ
เป็นระบบฌาปนกิจสงเคราะห์ ที่ต้องการให้สมาชิกที่มีสถานะปกติ จ่ายเงินให้สมาชิกที่สถานะตาย โดยการออกใบเสร็จ
ใน Form ใบเส??็จรับเงิน จะมี subfrom ย่อย ที่เป็นรายการจ่ายที่เป็นรายชื่อสมาชิกที่ตาย
Subform ไม่สามารถตรวจสอบว่า สมาชิกที่สถานะปกติ ได้จ่ายให้ สมาชิกที่สถานะตาย หรือไม่ คือมันจ่ายซ้ำได้ แต่หนูอยากให้มันตรวจสอบได้ด้วยว่าถ้าจ่ายแล้วให้เตือน จะทำยังไงคะ ขอรบกวนอาจารย์ด้วยค่ะ
เป็นระบบฌาปนกิจสงเคราะห์ ที่ต้องการให้สมาชิกที่มีสถานะปกติ จ่ายเงินให้สมาชิกที่สถานะตาย โดยการออกใบเสร็จ
ใน Form ใบเส??็จรับเงิน จะมี subfrom ย่อย ที่เป็นรายการจ่ายที่เป็นรายชื่อสมาชิกที่ตาย
Subform ไม่สามารถตรวจสอบว่า สมาชิกที่สถานะปกติ ได้จ่ายให้ สมาชิกที่สถานะตาย หรือไม่ คือมันจ่ายซ้ำได้ แต่หนูอยากให้มันตรวจสอบได้ด้วยว่าถ้าจ่ายแล้วให้เตือน จะทำยังไงคะ ขอรบกวนอาจารย์ด้วยค่ะ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R07015
ผมไม่ค่อยแน่ใจว่าผมเข้าใจถูกต้องหรือไม่ ถ้าสิ่งที่ต้องการคือ ไม่ต้องการจ่ายให้ผู้ตายคนเดียวกัน ซ้ำกันในใบเสร็จใบเดียว แต่ถ้าต่างใบเสร็จ แม้จะซ้ำทั้งผู้จ่ายและผู้ตายกับใบเสร็จใบอื่น ก็ยอมให้ซ้ำได้ ก็มีวิธีป้องกันได้ตั้งแต่ระดับฐานข้อมูลเลย โดยการสร้าง unique index ขึ้นมาอีกตัวนึงในเทเบิล tblRedetail ซึ่งอินเด็กซ์ตัวนี้ประกอบด้วย Pay_No รวมกับ Mem_Code ครับ
2 @R07019
ดูตามในรูปของคุณแล้วคิดว่า Relationship ของ1-2-3 มันซ้ำซ้อนอยู่นะครับ
ลองแก้ไขของเบอร์2 ที่คุณไปเชื่อมไว้สองทางคือทั้ง1และ3 เลือกตัดให้มันเหลือเพียงทางเดียว
เพราะ1กับ3 คุณมีตัวเชื่อมอยู่แล้ว มันสามารถวิ่งอ้อมถึงกันได้
เบื้องต้นลองแก้ตรงนี้ก่อนนะครับ แล้วค่อยตามไปดูส่วนอื่นที่เกี่ยวข้องต่อไป
ลองแก้ไขของเบอร์2 ที่คุณไปเชื่อมไว้สองทางคือทั้ง1และ3 เลือกตัดให้มันเหลือเพียงทางเดียว
เพราะ1กับ3 คุณมีตัวเชื่อมอยู่แล้ว มันสามารถวิ่งอ้อมถึงกันได้
เบื้องต้นลองแก้ตรงนี้ก่อนนะครับ แล้วค่อยตามไปดูส่วนอื่นที่เกี่ยวข้องต่อไป
3 @R07020
เพิ่มเติม
หากคุณต้องการคงการเชื่อมของเบอร์2อยู่สองทางเช่นเดิม
ก็ต้องไปตัดตัวเชื่อมระหว่างของเบอร์1กับ3 ออก
หากคุณต้องการคงการเชื่อมของเบอร์2อยู่สองทางเช่นเดิม
ก็ต้องไปตัดตัวเชื่อมระหว่างของเบอร์1กับ3 ออก
4 @R07021
อีกจุดที่ควรปรับแก้คือ ตารางของเบอร์ 2และเบอร์3 มันมีฟิลด์ Mem_Code ซ้ำกันอยู่
ลองออกแบบใหม่ให้ฟิลด์ Mem_Code มันมีอยู่เพียงตารางเดียว
ลองออกแบบใหม่ให้ฟิลด์ Mem_Code มันมีอยู่เพียงตารางเดียว
5 @R07022
Relationship ส่วนอื่นๆกำหนดได้ถูกต้องแล้ว ยกเว้นแต่ tblEmp ซึ่งผมไม่รู้ว่าจุดประสงค์ในระบบงานคืออะไร
6 @R07032
ขอบคุณมากเลยค่ะ
คือ Relationship นี้ หนูเลียนแบบมาจากระบบการออกใบเสร็จขายสินค้า แต่ปรับมาใช้กับ ระบบฌาปนกิจสงเคราะห์เลยงงค่ะ คือตารางลูกค้า เปรียบเหมือน ตารางเบอร์ 1 ตารางใบเสร็จเปรียบเหมือน ตารางเบอร์ 2 ตารางรายละเอียดใบเสร็จ คือตารางเบอร์ 3 ที่อาจารย์ตั้งไว้ค่ะ
แต่ตารางสินค้าสิคะ ในระบบฌาปนกิจสงเคราะห์คือ ผู้ตาย ก็คือตารางเบอร์ 1 หนูไม่รู้ว่าต้องทำยังไงถึงจะแยกคนที่สถานะปกติ กับสถานะตายออกมาได้ แล้วให้เป็นเหมือนตารางสินค้าของการขายสินค้า แต่ไม่สามารถให้ผู้จ่าย จ่ายซ้ำได้ทั้งในใบเสร็จเดียวกันและต่างใบเสร็จ (ผู้จ่ายต้องจ่ายให้กับผู้ตายทุกราย แต่ผู้จ่ายไม่สามารถจ่ายซ้ำให้ผู้ตายได้)
รบกวนอาจารย์ช่วยชี้แนะด้วยค่ะ ขอบพระคุณอาจารย์เป็นอย่างมากที่เสียสละเวลาตอบคำถามค่ะ
คือ Relationship นี้ หนูเลียนแบบมาจากระบบการออกใบเสร็จขายสินค้า แต่ปรับมาใช้กับ ระบบฌาปนกิจสงเคราะห์เลยงงค่ะ คือตารางลูกค้า เปรียบเหมือน ตารางเบอร์ 1 ตารางใบเสร็จเปรียบเหมือน ตารางเบอร์ 2 ตารางรายละเอียดใบเสร็จ คือตารางเบอร์ 3 ที่อาจารย์ตั้งไว้ค่ะ
แต่ตารางสินค้าสิคะ ในระบบฌาปนกิจสงเคราะห์คือ ผู้ตาย ก็คือตารางเบอร์ 1 หนูไม่รู้ว่าต้องทำยังไงถึงจะแยกคนที่สถานะปกติ กับสถานะตายออกมาได้ แล้วให้เป็นเหมือนตารางสินค้าของการขายสินค้า แต่ไม่สามารถให้ผู้จ่าย จ่ายซ้ำได้ทั้งในใบเสร็จเดียวกันและต่างใบเสร็จ (ผู้จ่ายต้องจ่ายให้กับผู้ตายทุกราย แต่ผู้จ่ายไม่สามารถจ่ายซ้ำให้ผู้ตายได้)
รบกวนอาจารย์ช่วยชี้แนะด้วยค่ะ ขอบพระคุณอาจารย์เป็นอย่างมากที่เสียสละเวลาตอบคำถามค่ะ
7 @R07037
ไม่ต้องแยกตารางออกจากกัน เพราะคุณก็มีสถานะของสมาชิกคนนั้นๆอยู่แล้วว่า ยังอยู่ หรือ ตายแล้ว สถานะที่แตกต่างกันเป็นไปในลักษณะของ Logical แต่ Physical แล้วก็ยังเป็นตารางเดียวกัน
ทีนี้การจะตรวจสอบเพื่อไม่ให้ซ้ำทั้งใบเสร็จเดียวกันหรือต่างใบเสร็จก็คือเขียนโค้ดเพื่อตรวจสอบ โดยใส่โค้ดนี้ไว้ที่ Before Update event procedure ของคอนโทรลที่ใช้เพื่อเลือกผู้รับบริจาค สมมุติว่าคอนโทรลนี้ชื่อ txtRecvMemCode เมื่อป้อนรหัสผู้รับบริจาค ถ้าโปรแกรมพบว่าซ้ำ ก็จะแสดงข้อความเบอกว่าซ้ำและจะรอจนกว่าจะป้อนใหม่หรือไม่ก็ลบรหัสทิ้งไป
Public Sub txtRecvMemCode_BeforeUpdate(Cancel as Integer)
dim DB as DAO.Database
dim RS as DAO.Recordset
dim SQL as string
if nz(me.txtRecvMemCode,"") = "" then exit sub
SQL = "select R.Pay_No from tblReceipt as R inner join tblRedetail as RD on R.Pay_No = RD.Pay_No where R.Mem_Code = """ & Parent.ชื่อคอลโทรลที่เก็บรหัสผู้บริจาคบนเมนฟอร์ม & """ and RD.Mem_Code = """ & Me.txtRecvMemCode & """ "
set DB = CurrentDB
set RS = DB.OpenRecordset(SQL)
if not RS.EOF then
msgbox "พบว่ามีการจ่ายซ้ำกับใบเสร็จเลขที่ " & RS.Pay_No
cancel = true
end if
RS.Close: set RS = nothing
End Sub
บอกตามตรงว่าจริงๆผมไม่ควรเขียนโค้ดนี้ให้คุณเพราะไม่ใช่สไตล์การแนะนำของผมที่เป็นประเภทป้อนให้ทุกอย่าง แต่ถ้าผมยิ่งบอกใบ้ไปทีละขั้น ก็อาจเสียเวลามากทีเดียว ดังนั้นคุณช่วยกลับไปค้นคว้าว่าแต่ละคำสั่งทำอะไรด้วยแล้วกันนะครับ
ทีนี้การจะตรวจสอบเพื่อไม่ให้ซ้ำทั้งใบเสร็จเดียวกันหรือต่างใบเสร็จก็คือเขียนโค้ดเพื่อตรวจสอบ โดยใส่โค้ดนี้ไว้ที่ Before Update event procedure ของคอนโทรลที่ใช้เพื่อเลือกผู้รับบริจาค สมมุติว่าคอนโทรลนี้ชื่อ txtRecvMemCode เมื่อป้อนรหัสผู้รับบริจาค ถ้าโปรแกรมพบว่าซ้ำ ก็จะแสดงข้อความเบอกว่าซ้ำและจะรอจนกว่าจะป้อนใหม่หรือไม่ก็ลบรหัสทิ้งไป
Public Sub txtRecvMemCode_BeforeUpdate(Cancel as Integer)
dim DB as DAO.Database
dim RS as DAO.Recordset
dim SQL as string
if nz(me.txtRecvMemCode,"") = "" then exit sub
SQL = "select R.Pay_No from tblReceipt as R inner join tblRedetail as RD on R.Pay_No = RD.Pay_No where R.Mem_Code = """ & Parent.ชื่อคอลโทรลที่เก็บรหัสผู้บริจาคบนเมนฟอร์ม & """ and RD.Mem_Code = """ & Me.txtRecvMemCode & """ "
set DB = CurrentDB
set RS = DB.OpenRecordset(SQL)
if not RS.EOF then
msgbox "พบว่ามีการจ่ายซ้ำกับใบเสร็จเลขที่ " & RS.Pay_No
cancel = true
end if
RS.Close: set RS = nothing
End Sub
บอกตามตรงว่าจริงๆผมไม่ควรเขียนโค้ดนี้ให้คุณเพราะไม่ใช่สไตล์การแนะนำของผมที่เป็นประเภทป้อนให้ทุกอย่าง แต่ถ้าผมยิ่งบอกใบ้ไปทีละขั้น ก็อาจเสียเวลามากทีเดียว ดังนั้นคุณช่วยกลับไปค้นคว้าว่าแต่ละคำสั่งทำอะไรด้วยแล้วกันนะครับ
8 @R07051
ขอบคุณมากค่ะอาจารย์ แล้วหนูจะศึกษาเพิ่มเติมค่ะ
Time: 0.3394s