กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
447 3
URL.หัวข้อ /
URL
Here we go again! Access 2K BUG?
มีคนถามไว้ที่ http://www.utteraccess.com/forums/showflat.php?Cat=&Board=access_2000&Number=196585&Forum=All_Forums&Words=TimK&Match=Username&Searchpage=0&Limit=25&Old=allposts&Main=196462&Search=true#Post196585
เรื่องมันมีอยู่ว่า เขาใช้ Access 2000 พัฒนาโปรแกรมอย่างต่อเนื่อง จึงมีการปรับปรุง Form อยู่เป็นประจำ พอมาถึงตอนที่จะนำไป Update ให้ผู้ใช้ต่างๆ เขาใช้วิธีส่งไฟล์ใหม่ไปให้ แต่ให้ผู้ใช้คลิกปุ่ม แล้วให้ทำการลบ Form เก่า แล้วค่อยนำ Form ตัวล่าสุดมาแทน
แต่สิ่งที่เขาเจอคือคำว่า คำว่า Name conflict with existing module.
ซึ่งถ้าลบ Form เป้าหมายโดยการคลิกที่ Form แล้วกดปุ่ม Delete จะไม่มีปัญหาดังกล่าว
แต่เขาต้องการใช้ DeleteObject method เพราะไม่ต้องการให้ผู้ใช้คลิกลบเอง
ผมได้ลองจำลองเหตุการณ์ดู โดย
1. สร้าง Form ขึ้นมาอันหนึ่ง ใส่โค้ดอะไรลงไปก็ได้ เพื่อให้มีการสร้าง Class Object ของ Form ขึ้น ซึ่งใน Access 97 เราจะไม่เห็น Class Object นี้ตอนอยู่ใน VB Editor หรือตอนที่เรากำลังเขียนโค้น
2. โอนตารางนี้ออกไปไว้ในอีกฐานข้อมูลหนึ่ง เพื่อจะนำเข้ามาใหม่
3. ใช้ DeleteObject method เพื่อลบตารางเป้าหมาย ลบได้ครับ แต่ Class Object หรือโค้ดของ Form นี้ไม่ถูกลบไปด้วยครับ
4. ลองใช้ TransferDatabase เพื่อนำ Form จากอีกฐานหนึ่งเข้ามา
Bingo เจอ Error เหมือนเขาแจ้งไว้ครับ และก็ Hang ไปเลย
ผมว่าตัวนี้เป็น Bug อีกตัวหนึ่งของ Access 2000 ครับ
นอกจากนั้นผมได้ลองกับ Access 2002 ปรากฏว่า ทำได้ครับ แต่ยังมีบักเล็กน้อย ผมแก้ไขโดยการใช้ Rename method แทน แต่ไม่ได้น่าเกลียดเหมือน Access 2000
ผมใช้โค้ดนี้ครับ
code:--------------------------------------------------------------------------------
Sub TestDel()
DoCmd.DeleteObject acForm, "Form1"
End Sub
Sub ImpNow()
DoCmd.TransferDatabase acImport, "Microsoft Access", _
CurrentProject.Path & "\testbugs2xp.mdb", acForm, "Form1", "form3"
End Sub
Sub test()
DoCmd.Rename "Form1", acForm, "Form3"
End Sub
--------------------------------------------------------------------------------
เรื่องมันมีอยู่ว่า เขาใช้ Access 2000 พัฒนาโปรแกรมอย่างต่อเนื่อง จึงมีการปรับปรุง Form อยู่เป็นประจำ พอมาถึงตอนที่จะนำไป Update ให้ผู้ใช้ต่างๆ เขาใช้วิธีส่งไฟล์ใหม่ไปให้ แต่ให้ผู้ใช้คลิกปุ่ม แล้วให้ทำการลบ Form เก่า แล้วค่อยนำ Form ตัวล่าสุดมาแทน
แต่สิ่งที่เขาเจอคือคำว่า คำว่า Name conflict with existing module.
ซึ่งถ้าลบ Form เป้าหมายโดยการคลิกที่ Form แล้วกดปุ่ม Delete จะไม่มีปัญหาดังกล่าว
แต่เขาต้องการใช้ DeleteObject method เพราะไม่ต้องการให้ผู้ใช้คลิกลบเอง
ผมได้ลองจำลองเหตุการณ์ดู โดย
1. สร้าง Form ขึ้นมาอันหนึ่ง ใส่โค้ดอะไรลงไปก็ได้ เพื่อให้มีการสร้าง Class Object ของ Form ขึ้น ซึ่งใน Access 97 เราจะไม่เห็น Class Object นี้ตอนอยู่ใน VB Editor หรือตอนที่เรากำลังเขียนโค้น
2. โอนตารางนี้ออกไปไว้ในอีกฐานข้อมูลหนึ่ง เพื่อจะนำเข้ามาใหม่
3. ใช้ DeleteObject method เพื่อลบตารางเป้าหมาย ลบได้ครับ แต่ Class Object หรือโค้ดของ Form นี้ไม่ถูกลบไปด้วยครับ
4. ลองใช้ TransferDatabase เพื่อนำ Form จากอีกฐานหนึ่งเข้ามา
Bingo เจอ Error เหมือนเขาแจ้งไว้ครับ และก็ Hang ไปเลย
ผมว่าตัวนี้เป็น Bug อีกตัวหนึ่งของ Access 2000 ครับ
นอกจากนั้นผมได้ลองกับ Access 2002 ปรากฏว่า ทำได้ครับ แต่ยังมีบักเล็กน้อย ผมแก้ไขโดยการใช้ Rename method แทน แต่ไม่ได้น่าเกลียดเหมือน Access 2000
ผมใช้โค้ดนี้ครับ
code:--------------------------------------------------------------------------------
Sub TestDel()
DoCmd.DeleteObject acForm, "Form1"
End Sub
Sub ImpNow()
DoCmd.TransferDatabase acImport, "Microsoft Access", _
CurrentProject.Path & "\testbugs2xp.mdb", acForm, "Form1", "form3"
End Sub
Sub test()
DoCmd.Rename "Form1", acForm, "Form3"
End Sub
--------------------------------------------------------------------------------
3 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R02400
ทาง MS เขาแนะนำให้ติดตั้ง SP3 ของ Office 2000 ก็จะหายครับ
แต่ผมยังไม่ได้ลอง
ให้ลองอ่านบทความเกี่ยวกับเรื่องนี้ที่ http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b304548 ดูครับ
แต่ผมยังไม่ได้ลอง
ให้ลองอ่านบทความเกี่ยวกับเรื่องนี้ที่ http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b304548 ดูครับ
3 @R02427
ขอบคุณ อ.สุภาพครับ พอรู้รายละเอียดแล้ว ก็สบายใจครับ
Time: 0.1276s
ผมใช้ ACCESS2000 ก็เจอปัญหานี้ มาตั้งแต่ 1/10/2001
1. เมื่อลบ form แล้ว เจอ Bug เหมือนที่ อ.แจ้ง แต่ผมไม่ทราบว่าเป็น Bug คิดว่าคงทำอะไรผิด เสียเวลาไปนานพอดู
2. เจอ Bug ตัวนี้ เป็นบางครั้ง คือไม่ทุกครั้งที่ทำ พออ่านกระทู้ของ อ. ถึงกระจ่าง
วิธีแก้ส่วนตัวที่ผมใช้อยู่แต่เดิมนะครับ
ผมใช้วิธีเปิด db1 ใหม่ขึ้นมา 1 ตัวแล้ว
1. Link table เหมือนเดิม
2. Import -> Query, Form, Report, Module และทุกอย่างของโปรแกรมเดิมเข้ามาที่ db1 ใหม่นี้
3. ลบ db เก่าทิ้ง
ผมจะลองวิธีใหม่ของ อ. ดูนะครับ
ขอบคุณครับ