กระทู้เก่าบอร์ด อ.Yeadram
2,243 9
URL.หัวข้อ /
URL
ลบข้อมูลในตารางไม่ได้ครับ
ช่วยด้วยครับ ผมสร้างฐานข้อมูลเพื่อเก็บเอกสารเสร็จแล้ว
แต่มีปัญหาคือไม่สามารถลบข้อมูลในตารางหลักได้
ซึ่งตารางหลักมีอยู่ 2 ตารางคือ (Document และ TbSection) มีความสัมพันธ์แบบ 1:m พอลบข้อมูลใน Record เดียวกัน ข้อมูในตาราง TbSection ถูกลบ
แต่ ข้อมูในตาราง Document กลับไม่ลบให้
ไม่รู้ว่าสาเหตุเป็นเพราะอะไรครับ
แต่มีปัญหาคือไม่สามารถลบข้อมูลในตารางหลักได้
ซึ่งตารางหลักมีอยู่ 2 ตารางคือ (Document และ TbSection) มีความสัมพันธ์แบบ 1:m พอลบข้อมูลใน Record เดียวกัน ข้อมูในตาราง TbSection ถูกลบ
แต่ ข้อมูในตาราง Document กลับไม่ลบให้
ไม่รู้ว่าสาเหตุเป็นเพราะอะไรครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R15391
รบกวนอาจายสันติสุข ช่วยดูตัวอย่างให้หน่อยน่ะครับ
ผมส่ง E-mail เข้าเมลกลาง
accboard@gmail.com
ไม่รู้ว่าผมทำผิดในส่วนไหนหรือเปล่า แต่คิดว่า อาจจะมาจาก Query
ขอขอบพระคุณอย่างสูง
ผมส่ง E-mail เข้าเมลกลาง
accboard@gmail.com
ไม่รู้ว่าผมทำผิดในส่วนไหนหรือเปล่า แต่คิดว่า อาจจะมาจาก Query
ขอขอบพระคุณอย่างสูง
3 @R15393
โปรแกรมเขียนได้งงดี แต่ปัญหาพอจะแก้ได้ดังนี้
1. เมื่อกดลบเรคอร์ดแล้ว พอโปรแกรมถามยืนยันว่าจะลบเรคอร์ดหรือไม่ หน้าฟอร์มจะเป็นฟอร์มว่างเปล่าขาวๆทั้งฟอร์ม แก้โดยให้ Allow Additions property ของฟอร์ม FrmOld เป็น Yes สาเหตุคือเรคอร์ดถูก Filter เลือกเอาเฉพาะที่ต้องการซึ่งจะแสดงเพียง 1 เรคอร์ดเท่านั้น โดยพฤติกรรมของ Access เมื่อมีการถามยืนยัน หน้าฟอร์มจะไปยังเรคอร์ดถัดไป แต่เนื่องจากตอนนั้นมีแค่ 1 เรคอร์ด จึงไม่สามารถแสดงฟอร์มอะไรได้อีกแล้ว แต่เมื่อกำหนดให้ Allow Additions ด้วย อย่างน้อยมันก็จะกระโดดไปเรคอร์ดใหม่ซึ่งเป็นเรคอร์ดว่างได้ ไม่ใช่ฟอร์มเปล่าๆที่ไม่มีอะไรเลย
2. เมื่อลบเรคอร์ดบนหน้าจอแล้ว เรคอร์ดในเทเบิล Document ไม่ถูกลบ แต่เรคอร์ดที่สัมพันธ์กันในเทเบิล tbSection กลับถูกลบได้ ให้แก้ด้วยเปลี่ยน Recordset property ของทั้งตัวฟอร์ม FrmOld และ QryOld เป็น "Dynaset (Inconsistent Updates)"
3. เมื่อเรคอร์ดถูกลบแล้ว ลิสท์ของเลขเอกสารที่ยังคงเหลืออยู่ในระบบกลับยังแสดงเลขของเอกสารที่เพิ่งถูกลบไป ให้แก้โดยเพิ่มบรรทัดสีน้ำเงิน
Private Sub CmdDelets_Click()
On Error GoTo Err_CmdDelets_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Me.FrmOldsub.Form.Requery
4. ฟังก์ชั่น ExecuteApplication ในโมดูล MyProject คอมไพล์ไม่ผ่านนะครับ ถ้าไม่ได้ใช้ตอนนี้ก็ให้ comment ไป หรือไม่ก็ลบออกไปก่อน
1. เมื่อกดลบเรคอร์ดแล้ว พอโปรแกรมถามยืนยันว่าจะลบเรคอร์ดหรือไม่ หน้าฟอร์มจะเป็นฟอร์มว่างเปล่าขาวๆทั้งฟอร์ม แก้โดยให้ Allow Additions property ของฟอร์ม FrmOld เป็น Yes สาเหตุคือเรคอร์ดถูก Filter เลือกเอาเฉพาะที่ต้องการซึ่งจะแสดงเพียง 1 เรคอร์ดเท่านั้น โดยพฤติกรรมของ Access เมื่อมีการถามยืนยัน หน้าฟอร์มจะไปยังเรคอร์ดถัดไป แต่เนื่องจากตอนนั้นมีแค่ 1 เรคอร์ด จึงไม่สามารถแสดงฟอร์มอะไรได้อีกแล้ว แต่เมื่อกำหนดให้ Allow Additions ด้วย อย่างน้อยมันก็จะกระโดดไปเรคอร์ดใหม่ซึ่งเป็นเรคอร์ดว่างได้ ไม่ใช่ฟอร์มเปล่าๆที่ไม่มีอะไรเลย
2. เมื่อลบเรคอร์ดบนหน้าจอแล้ว เรคอร์ดในเทเบิล Document ไม่ถูกลบ แต่เรคอร์ดที่สัมพันธ์กันในเทเบิล tbSection กลับถูกลบได้ ให้แก้ด้วยเปลี่ยน Recordset property ของทั้งตัวฟอร์ม FrmOld และ QryOld เป็น "Dynaset (Inconsistent Updates)"
3. เมื่อเรคอร์ดถูกลบแล้ว ลิสท์ของเลขเอกสารที่ยังคงเหลืออยู่ในระบบกลับยังแสดงเลขของเอกสารที่เพิ่งถูกลบไป ให้แก้โดยเพิ่มบรรทัดสีน้ำเงิน
Private Sub CmdDelets_Click()
On Error GoTo Err_CmdDelets_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Me.FrmOldsub.Form.Requery
4. ฟังก์ชั่น ExecuteApplication ในโมดูล MyProject คอมไพล์ไม่ผ่านนะครับ ถ้าไม่ได้ใช้ตอนนี้ก็ให้ comment ไป หรือไม่ก็ลบออกไปก่อน
4 @R15394
ขอขอบพระคุณท่านอาจารย์สุภาพ ที่สละเวลาอันมีค่ามาช่วยแก้ปัญหาให้ผม
ก็ไม่มีอะไรตอบแทน ก็ขอให้คุณพระศรีรัตนตรัยช่วยคุ้มครองให้อาจารย์มีแต่ความสุขความเจริญ คิดสิ่งใดก็ขอให้สมปรารถนาทุกสิ่งทุกประการน่ะครับ
รักจัง "Thai-Access"
ก็ไม่มีอะไรตอบแทน ก็ขอให้คุณพระศรีรัตนตรัยช่วยคุ้มครองให้อาจารย์มีแต่ความสุขความเจริญ คิดสิ่งใดก็ขอให้สมปรารถนาทุกสิ่งทุกประการน่ะครับ
รักจัง "Thai-Access"
5 @R15395
ขออภัย พิมพ์ชื่อผิด
เป็นท่านอาจารย์ "สันติสุข"
ขอขอบพระคุณอีกครั้งครับผม
เป็นท่านอาจารย์ "สันติสุข"
ขอขอบพระคุณอีกครั้งครับผม
6 @R15403
ขอรบกวนถามอาจารย์อีกครั้งครับผม
ในฟอร์ Report(ตามตัวอย่าง) พอเพิ่มข้อมูลมันเข้าเฉพาะตารางแม่(Document)น่ะครับ
ตารางลูก(TbSection)ข้อมูลไม่เข้าอ่ะครับ ไม่รู้เป็นเพราะอะไร
ในฟอร์ Report(ตามตัวอย่าง) พอเพิ่มข้อมูลมันเข้าเฉพาะตารางแม่(Document)น่ะครับ
ตารางลูก(TbSection)ข้อมูลไม่เข้าอ่ะครับ ไม่รู้เป็นเพราะอะไร
7 @R15405
ไปดูอีกที จริงๆแล้วเทเบิล Document กับ tbSection เราสามารถรวมเข้ามาในเทเบิลเดียวกันได้เลย เอาฟิลด์ต่างๆจาก tbSection มาใส่ใน Document เพราะมี Primary Key เหมือนกันอยู่แล้ว น่าจะทำให้ระบบโดยรวมดูง่ายขึ้น
แต่ถ้าอยากยังคงการออกแบบเทเบิลแบบที่ทำไว้ ให้ใส่ฟิลด์ DocNum จากเทเบิล tbSection เข้ามาในคิวรี่ QryReport ด้วย แล้วในโปรแกรมหน้าจอ FrmReport ก็ต้องมีเท็กซ์บ็อกซ์ของฟิลด์นี้ด้วยเช่นกัน (สมมุติให้ชื่อเป็น DocNum2) เพียงแต่ให้ซ่อนไว้โดยกำหนด .Visible เป็น False และต้องเพิ่มโค้ดใน AfterUpdate ของเท็กซ์บ็อกซ์ DocNum (จากเทเบิล Document) เป็น
Private Sub DocNum_AfterUpdate()
Me.DocNum2 = Me.DocNum
End Sub
แต่ถ้าอยากยังคงการออกแบบเทเบิลแบบที่ทำไว้ ให้ใส่ฟิลด์ DocNum จากเทเบิล tbSection เข้ามาในคิวรี่ QryReport ด้วย แล้วในโปรแกรมหน้าจอ FrmReport ก็ต้องมีเท็กซ์บ็อกซ์ของฟิลด์นี้ด้วยเช่นกัน (สมมุติให้ชื่อเป็น DocNum2) เพียงแต่ให้ซ่อนไว้โดยกำหนด .Visible เป็น False และต้องเพิ่มโค้ดใน AfterUpdate ของเท็กซ์บ็อกซ์ DocNum (จากเทเบิล Document) เป็น
Private Sub DocNum_AfterUpdate()
Me.DocNum2 = Me.DocNum
End Sub
8 @R15406
ข้อถามในส่วนของการค้นหาเอกสารย้อนหลังหน่อยครับ
ที่ฟอร์ม Old (FrmOld)
ผมอยากให้มันแสดงเอกสารย้อนหลัง 1 ฉบับ ผมเลยใช้
ที่ปุ่มค้นหา
TextMin = DMin("DateUse", "Document")
TextMax = DMax("DateUse", "Document") - 1
โดยในตัว QueryOld ผมใช้
Between [Forms]![FrmOld]![TextMin] And [Forms]![FrmOld]![TextMax]
ที่ Fields DateUse
ปัญหาที่1 มันแสดงเอกสารทั้งหมดใน Fields DateUse ตั้งแต่วันที่เริ่มต้น ถึงวันที่ล่าสุด ลบด้วย 1
แต่สิ่งที่ผมต้องการคือ อยากให้มันแสดงวันทีเริ่มต้น ถึงวันที่สุดท้าย-1 ของเฉพาะตัวเอกสารที่เราต้องการค้นหา
ผมต้องเขียนโค๊ดโปรแกรมอย่งไรครับอาจารย์
ที่ฟอร์ม Old (FrmOld)
ผมอยากให้มันแสดงเอกสารย้อนหลัง 1 ฉบับ ผมเลยใช้
ที่ปุ่มค้นหา
TextMin = DMin("DateUse", "Document")
TextMax = DMax("DateUse", "Document") - 1
โดยในตัว QueryOld ผมใช้
Between [Forms]![FrmOld]![TextMin] And [Forms]![FrmOld]![TextMax]
ที่ Fields DateUse
ปัญหาที่1 มันแสดงเอกสารทั้งหมดใน Fields DateUse ตั้งแต่วันที่เริ่มต้น ถึงวันที่ล่าสุด ลบด้วย 1
แต่สิ่งที่ผมต้องการคือ อยากให้มันแสดงวันทีเริ่มต้น ถึงวันที่สุดท้าย-1 ของเฉพาะตัวเอกสารที่เราต้องการค้นหา
ผมต้องเขียนโค๊ดโปรแกรมอย่งไรครับอาจารย์
9 @R15407
คุณต้องสร้างคิวรี่อีกตัว (สมมติชื่อ Q) โดยมี Criteria เหมือน QryOld ทุกประการ เพียงแต่เราให้มีเฉพาะ DateUse ฟิลด์เดียวเท่านั้น ฟิลด์อื่นที่ไม่ใช้ให้เอาออกให้หมด แล้วก็เปลี่ยน TextMax เป็น DMax("DateUse", "Q") - 1 ครับ
Time: 0.4264s
หรือคุณสั่งจากหลายคำสั่ง ลองเอาคำสั่งต่างๆในส่วนที่สั่งลบมาให้ดูหน่อยครับ