ความแตกต่าง recalc refresh refreshpage requery rep
กระทู้เก่าบอร์ด อ.Yeadram

 1,630   6
URL.หัวข้อ / URL
ความแตกต่าง recalc refresh refreshpage requery rep

สอบถามผู้รู้เกี่ยวกับความแตกต่าง ของ recalc refresh refreshpage requery และ repaint หน่อยครับ ใช้ในกรณีไหนกันบ้าง ขอบคุณครับ

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

1 @R20687
requery จะอ่านข้อมูลจากแหล่งข้อมูลมาใหม่ด้วยการประมวลผลคำสั่งที่ให้อ่านใหม่ เช่น แต่เดิมอ่านได้ 10 เรคอร์ด อ่านใหม่อาจได้เรคอร์ดมากหรือน้อยกว่าเดิมก็ได้ เพราะช่วงเวลาที่อยู่ระหว่างอ่านครั้งแรกกับครั้งหลัง เรคอร์ดอาจถูกเปลี่ยนแปลงโดยกระบวนอื่นๆทั้งจากโค้ดของเราเอง หรือจากโค้ดอื่นในเครื่องเราหรือเครื่องอื่นก็เป็นไปได้

refresh อ่านข้อมูลมาใหม่เหมือน requery แต่ไม่ประมวลผลคำสั่งใหม่ การอ่านจะอ่านเฉพาะจากเรคอร์ดที่เคยอ่านได้ ดังนั้นจำนวนเรคอร์ดที่อ่านได้ในช่วงเวลาระหว่างครั้งก่อนและครั้งใหม่จึงเท่ากัน แต่เรคอร์ดที่อ่านได้ใหม่อาจมีข้อมูลของฟิลด์ต่างๆเปลี่ยนแปลงไป หรือ เรคอร์ดที่ถูกลบไปแล้วก็จะ unavailable ซึ่งถ้าเรา refresh ผ่านหน้าฟอร์มหรือคิวรี่ จะเห็นว่ามันจะแสดงคำ #delete ออกมาในเรคอร์ดนั้นแทน ถ้า refresh ด้วยการเขียนโค้ด ก็ต้องดักจับ error ที่อาจเกิดขึ้นเมื่อจะอ่านจากแต่ละเรคอร์ดใน recordset ด้วย ส่วนเรคอร์ดที่ถูกเพิ่มเข้ามาใหม่ในช่วงเวลาดังกล่าว จะไม่ถูกอ่านเข้ามา

Repaint ใช้กับ Form object เท่านั้น เพื่อวาดหน้าจอและหาผลลัพธ์ของพวก calculated field ใหม่อีกครั้ง ไม่ได้เกี่ยวอะไรกับการอ่านข้อมูลเลย เพราะ Access อาจไม่ได้แสดงทุกอย่างทันทีที่เราสั่งเปลี่ยนแปลงข้อมูลหรืออะไรบนหน้าฟอร์มในทันที จะต้องมีเวลาว่างพอสำหรับ process เพื่อทำการแสดงและคำนวนใหม่ เราจะเห็นผลได้ชัดในโค้ดที่วนลูปเปลี่ยนแปลงข้อมูลบนหน้าฟอร์ม ถ้าแทรกคำสั่งนี้เข้าไป หน้าฟอร์มก็จะปรับปรุงทันที แต่ก็ทำให้เห็นหน้าฟอร์มกระตุกๆระหว่างลูปด้วย

Recalc ใช้กับ Form object เช่นกัน แต่ทำการคำนวนสำหรับ calculated field เท่านั้น เพราะฟิลด์ที่จะถูกคำนวนก็ต้องให้ process มีเวลาพอที่จะทำเหมือนกับ Repaint การสั่ง Recalc จะทำให้เห็นการเปลี่ยนแปลงทันที

โดยประสบการณ์ที่ผ่านมา เราไม่มีทางรู้ได้ว่าเมื่อไหร่จะต้องใช้ Repaint และ Recalc หากใส่ไปทุกที่ ก็มักเกินความจำเป็นและจอกระตุก เอาเป็นว่าเมื่อไหร่เห็นว่าระบบที่เขียนขึ้นไม่แสดงผลลัพธ์เป็นปัจจุบัน ก็ค่อยมาใส่คำสั่งพวกนี้เข้าไปแล้วกัน
2 @R20688
ขอบคุณมากๆที่ให้ความรู้ครับ อ้อ! แล้ว refreshpage ด้วยครับ
3 @R20689
ไม่เคยได้ยินเลยครับ เอามาจากไหน
4 @R20697
docmd.RunCommand acCmdRefreshPage ครับ
5 @R20702
สมัย Access เวอร์ชั่นแรกๆ การจะสั่งให้ทำตามคำสั่งไหนในเมนูบาร์ ค่อนข้างจะไม่สะดวก ต่อมาก็เลยมีคำสั่ง Docmd.RunCommand ซึ่งจะเป็นคำสั่งที่เทียบเท่ากับแต่ละคำสั่งในเมนูบาร์ ปกติเวลาผมจะสั่งอะไร ผมจะดูก่อนว่ามีคำสั่งเฉพาะด้านอยู่แล้วหรือไม่ เช่น การ save record ผมก็จะสั่ง me.dirty = false หรือ refresh ผมก็จะใช้คำสั่ง [form object].Refresh ไปตรงๆเลย จะไม่มาใช้ .RunCommand

ยังไงก็ตาม ผมไปพยายามหาว่าระหว่าง acCmdRefresh ต่างจาก acCmdRefreshPage ยังไง ก็ไม่เห็นมีที่ไหนเขียนอธิบายไว้อย่างชัดๆ มีแต่บอกว่าอย่างแรกเป็นการเป็นการ refresh table ส่วนอย่างหลังเป็นการ refresh subform ซึ่งผมว่าฝรั่งนี่ก็มั่วเป็นเหมือนกัน ก็เลยยังบอกไม่ได้ว่าอะไรทำอะไรกันแน่
6 @R20703
ขอบคุณครับ ผมเป็นมือสมัครเล่น เวลาใช้งานคำสั่งพวกนี้ก็ใช้ไปโดยไม่รู้หลักการ ซึ่งบางครั้งก็ใช้งานได้บ้างไม่ได้บ้าง หรือ อาจทำให้โปรแกรมมีปัญหา เช่นทำงานช้า แต่ก็ไม่รู้จะแก้ไขอย่างไร เพราะถึงช้าแต่ก็ทำงานได้ (แอบพอใจนิดๆ) ขอบคุณ thai-access ที่เป็นแหล่งความรู้ที่ดีเยี่ยมครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3399s