ปัญหาระบบ Access ช้าค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 2,559   7
URL.หัวข้อ / URL
ปัญหาระบบ Access ช้าค่ะ

พอดีมีการใช้ระบบ Access มีผู้ใช้ ประมาณ 15 คน
และรู้สึกว่าระบบมันช้ามาก พอดีไม่มีความรู้เรื่องระบบAccess ค่ะ
เลยไม่รุ้ว่าจะไปแก้ปัญหาตรงไหน หรือว่าสาเหตุมัันเกิดจากอะไร
รบกวนผู้รู้ช่วยแนะนำด้วยค่ะ และระบบAccess นี้มีข้อจำกัดอะไรไหมค่ะ
จะได้หลีกเลี่ยงค่ะ

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

1 @R05490
ลิงค์ที่ผมเคยให้ไป เขารวบรวมสิ่งที่ต้องทำเป็นสิบๆข้อเพื่อให้ความเร็วนั้นดีขึ้นมา ลิงค์นั้นช่วยแก้ไขปัญหาไม่ได้หรือ ?
2 @R05491
ได้บ้างค่ะ แต่ว่ามันก็ยังช้าอยู่ค่ะ
3 @R05492
ผมคิดว่า คุณต้องพยายามกำหนดขอบเขต หรือเจาะจงให้ได้ว่า ตอนไหนที่ช้า เช่น ระหว่างการเพิ่มข้อมูล ระหว่างการเปิดฟอร์ม ฯลฯ และที่ว่าช้านั้น ช้ากี่วินาที มันเป็นทุกครั้งหรือเป็นบางครั้ง เพราะมีสาเหตุมากมายเหลือเกิน อาจเป็นตั้งแต่เซิฟเวอร์ ฮาร์ดดิสก์ เน็ตเวอร์ค อุปกรณ์ต่อพ่วง ไคลแอนท์ ซฮฟท์แวร์ที่ลง ค่าติดตั้งที่ไม่เหมาะสม   การเขียนโปรแกรมที่ไม่เหมาะสม ฯ การบอกปัญหาลอยๆอย่างนี้ ตอบยากมากว่าจะแก้ไขอย่างไร

และช่วยบอกด้วยว่า ข้ออะไรบ้างที่คุณได้ทำไปแล้วตามลิงค์ที่ให้ไป เพื่อว่าจะได้แนะนำได้?ูก
4 @R05494
ค่ะ ช้าตรงส่วนของฟอร์มที่มีการเพิ่มข้อมูลด้วย แล้วก็ลิงค์ของการดูข้อมูลจากการคิวรี่ด้วยค่ะ ตรงส่วนคิวรี่จะช้ามาก
ส่วนการแก้ไขก็ มีการทำ compact และแก้ไขโครงสร้างของตารางไปบ้างแล้วค่ะ
5 @R05495
คำอธิบายของคุณไม่ชัดเจนเอาเลย ดังนั้นสิ่งที่พอจะแนะนำได้ตอนนี้ก็คือ

- ใน SubDatasheet property ของเทเบิล ให้เปลี่ยนเป็น [None] ให้หมด

- ลองเอาคิวรี่ หรือ SQL SELECT statement ที่เป็นแหล่งที่มาของ RecordSource ของฟอร์ม มาสร้างเป็นคิวรี่แล้วเปิดในรูปแบบของ Datasheet จากคิวรี่นั้นโดยตรง (ไม่ผ่านฟอร์ม) แล้วลองป้อนข้อมูลเพิ่ม ดูว่าเมื่อเทียบกันแล้ว เร็วกว่าการใช้ฟอร์มหรือไม่ ถ้าเร็วกว่า ก็แปลว่าในฟอร์มของคุณมีการกำหนดอะไรบางอย่างที่ทำให้ช้า

- ลองสร้างเทเบิล 1 เทเบิล มีแค่ฟิลด์เดียวก็พอ ใส่ข้อมูลเข้าไป 1 เรคอร์ด ลิงค์เทเบิลมาเหมือนเทเบิลอื่นๆ แล้วเปิดเทเบิลนี้ค้างไว้ใน Front-End ตลอดการทำงาน ลองดูว่าการทำงานเร็วขึ้นหรือไม่

- ถ้ามีเปิด recordset เพื่อเพิ่มข้อมูลเพียงอย่างเดียว ให้มีพารามิเตอร์ dbAppendOnly ต่อท้ายด้วย เช่น Set RS = CurrentDB.OpenRecordset("SELECT * FROM ชื่อเทเบิล", dbOpenDynaset, dbAppendOnly)

- ยิ่งจำกัดปริมาณเรคอร์ดที่แสดงในหน้าฟอร์มได้มากเท่าไหร่ ก็จะยิ่งเร็วขึ้นเท่านั้น วิธีก็คือ RecordSource property ของฟอร์ม ต้องเป็นคิวรี่ของ SQL SELECT statement หรือตัว SQL SELECT statement เอง ที่มีการกำหนด WHERE clause เพื่อจำกัดเรคอร์ดที่จะมาแสดง หรือไม่ก็เปิดฟอร์มสำหรับป้อนข้อมูลด้วยโหมด Data Entry (Data Entry property ของฟอร์ม กำหนดเป็น Yes/True)

- คิวรี่ช้า มักเกิดจาก 2 ประการ
   1) ฟิลด์ที่ใช้ใน WHERE clause ไม่ได้ทำการสร้าง Index เอาไว้ หรือถ้ามีการทำ Query Join ระหว่าง 2 เทเบิล สมมุติจากฟิลด์ A.F ไปยัง B.F แบบ One-To-Many A.F หรือ/และ B.F ได้สร้าง Index ไว้แล้วหรือยัง
   2) การสร้างคิวรี่ที่ไม่เหมาะสม อันนี้ต้องเอาคิวรี่มาดู

- การ Compact จะใช้ได้ผลก็ต่อเมื่อ แรกเริ่มระบบทำงานได้เร็วอยู่แล้ว แต่พอใช้ไปๆ มันเริ่มค่อยๆช้าลงๆ

- ในเมนู Tools - Options - General ต้องไม่ทำเครื่องหมายที่ช่อง Track Name Autocorrect info

ลองดูครับ
6 @R05496
ขอบคุณมากๆๆค่ะ จะลองนำไปทำดูน่ะ?่ะ
7 @R05501
เมื่อก่อนก็ใช้ access เป็นฐานข้อมูล มีผู้ใช้ตั้งแต่ 3 คน เพิ่มมาจนเกือบ 20 คน
ก็เริ่มช้า แถมมีอาการข้อมูลหายโดยไม่ทราบสาเหตุ แรกๆ ก็หายไม่กี่เรคคอร์ด
จนกระทั่งหายเป็นหมื่นเรคคอร์ด หลังๆ ไม่ไหว เลยเปลี่ยนเป็น
access project   โดยใช้ฐานข้อมูลเป็น sql2000
หลังใช้ก็ ok ไม่มีปัญหาเรื่องข้อมูลหาย หรือ ช้าอีก
แต่กว่าจะปรับโปรแกรม ผมใช้เวลาประมาณ 4 เดือน
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3373s