OLD FoxBoard
foxboard Home FoxBoard



ยินดีต้อนรับ Guest ลงทะเบียน Login ค้นหากระทู้ แสดงรายชื่อสมาชิก
 หัวข้อสนทนาทั้งหมด
  New Foxboard
 
ชื่อเรื่อง #01617 หัวข้อ: หลักการใช้ refresh เชิญถาม-ตอบปัญหาได้ที่นี่ครับ ตั้งชื่อกระทู้ใหม่
ส่งข้อความโดย วีรนาจ วันที่ 17 ก.ย. 2551 เวลา 19:19 น. - IP Logged
มุมมอง วีรนาจ's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ วีรนาจ ค้นหา   Quote วีรนาจ Quote   Send Private Message ส่งข้อความ  
วีรนาจ
Avatar
Gold Member
Gold Member
Thailand
19 พ.ย. 2549
735 Posts

ผมเคยตั้งกระทู้นี้เมื่อ 2 ปีก่อน แต่มีผู้ตอบเพียง 2 ท่านซึ่งผมเองยังรู้สึกไม่ค่อยกระจ่าง มาวันนี้เกิดสงสัยขึ้นว่า เมื่อไรเราควรสั่ง thisform.refresh ??

สมมติมี 20 textbox อยู่บน form แล้วบาง textbox มีการเปลี่ยนค่า เราควรสั่ง refresh ทุกครั้งที่บาง textbox เปลี่ยนค่ามั้ย ?

หรือ object บางตัวบางเวลาต้องการ enabled/disable หรือ visible ต้อง refresh มั้ย ?

เคยอ่านเจอหลายท่านบอกว่าสั่ง refresh มีต้นทุนสูงมาก อยากทราบว่าเมื่อสั่ง refresh มันเกิดอะไรขึ้นบ้าง ?

ถ้าไม่ build EXE เมื่อข้อมูลที่มีการเปลี่ยนค่าก็แสดงค่าใหม่ถูกต้อง แต่พอ build เป็น EXE กลับไม่แสดงค่าใหม่ ต้องสั่ง refresh ทำไมเป็นอย่างนั้น ?

 

 

 


ส่งข้อความโดย Joomla วันที่ 17 ก.ย. 2551 เวลา 23:51 น. - IP Logged
มุมมอง Joomla's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ Joomla ค้นหา   Quote Joomla Quote   Send Private Message ส่งข้อความ  
Joomla
Avatar
Gold Member
Gold Member
Thailand
12 ก.ค. 2550
251 Posts
ถ้ามีการอัพเดตข้อมูลบนจอ เช่น กริด หรือ text box อื่นๆ มากกว่า 1 อัน


ส่งข้อความโดย sangjury วันที่ 18 ก.ย. 2551 เวลา 09:25 น. - IP Logged
มุมมอง sangjury's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ sangjury ค้นหา   Quote sangjury Quote   Send Private Message ส่งข้อความ  
sangjury
Avatar
Gold Member
Gold Member
Thailand
02 ต.ค. 2550
228 Posts

ปัญหาน่าจะเกิด จาก การเปิด grid ที่ติดต่อกับ database โดยตรง
และเปิด อีก from ทำการแก้ไข้ข้อมูล แล้วทำการบันทึกลง database เดี่ยวกับ form แรก
หากเป็นกรณี นี้ต้อง refresh ทุกครั้งครับ
ส่วนเรื่อง แก้ textbox เราแก้ไข หลายๆ อันแล้วจะ refresh หรือไม่
หาก textbox ไม่ได้ เชื่อม ตรง กับ database ก็ไม่จำเป็นครับ

ข้อถามเพิ่มว่า กรณีที่ มันไม่ ผิดปกติที่เจอ เป็นอย่างไรบางครับ
เช่นมีการแก้ไข textbox แล้วมันไม่ ไป แก้ใน grid ในform เดี่ยวกัน
และ
ทดลอง refresh ทุกครั้งที่มีการแก้ไข ตรวจสอบว่า มันช้าหรือไม่
สำหรับผมไม่ช้าเลยครับ ความเร็วเท่าเดิม


ส่งข้อความโดย ENJOY วันที่ 18 ก.ย. 2551 เวลา 11:20 น. - IP Logged
มุมมอง ENJOY's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ ENJOY ค้นหา   Quote ENJOY Quote   Send Private Message ส่งข้อความ  
ENJOY
Avatar
Gold Member
Gold Member
Thailand
20 พ.ย. 2549
101 Posts
อันนี้ความเห็นส่วนตัวของผมนะ
1.เมื่อไรเราควรสั้ง ThisForm.Refresh
ของผมเมื่อ Form นั้นมี object ไม่เยอะ เท่าไหร่ ที่สำคัญ Form นั้นต้องเขียน Code ที่ไม่ซับซ้อนมากนัก สำหรับผม ThisForm.Refresh มันมีข้อดีคือ เขียนง่าย สั่งครั้งเดียว ก็จบมันก็จะไป Refresh ทุก object ที่อยู่บน Form เอง
แต่ ถ้าเป็น Form object มาก ๆ และมีการเขียน Code ที่ซับซ้อน โดยเฉพาะตรง This.Refresh ของแต่ละ object ถ้ามีการ Code ตรงส่วนนี้ด้วยแล้ว ผมต้องวางแผนให้ดีก่อนที่จะเขียน Code ตรง ThisForm.Refresh ซึ่งบางครั้งก็วางแผนจนมื่นไปเลย ^_^ ก็เลยจะไม่ค่อยได้เขียนตรง ThisForm.Refresh (เคยเจอมาแล้วตอนนั้นเพิ่งเริ่มหัดเขียน Fox ผมเขียน Code ตรง ThisForm.Refresh และเขียน Code ตรง This.Refresh ด้วย พอสั่ง ThisForm.Refresh มันมักจะทำเกินคำสั่ง สาเหตุมาจากเขียน Code ตรง ThisForm.Refresh กับ This.Refresh ไม่สัมพันธ์กัน กว่าจะทำให้มันสัมพันธ์กันได้เล่นเอาเหนื่อยเลย)
สรุปว่า เมื่อต้องการ Update ข้อมูลทุก object บน Form ให้ใช้ ThisForm.Refresh
เมื่อต้องการ Update ข้อมูลของ Object บางตัว ใ้ห้ใช้ This.Refresh หรือ สั่ง ระบุเป็นรายตัวไปเลย
2.ถ้ามี Textbox 20 ตัวแต่มีบางตัวเท่านั้น ที่ีมีการเปลี่ยนแปลงค่า ผมก็ให้มัน Refresh เฉพาะตัวที่มีการเปลี่ยนค่าเท่านั้น ถ้ามี 2 ตัวที่มีการเปลี่ยนค่า เราก็สั่ง Refresh เฉพาะ 2 ตัวนั้น ประหยัดเวลา มากกว่า 10 เท่า เพราะเราไม่ต้อง Refresh ทุกตัว ซึ่งจริงๆ แล้วเราอาจจะไม่รู้สึกว่ามันเร็วต่างกันมากนักแต่ความจริงคือการแสดงผลของ Textbox 2 ตัวนั้นเร็วขื้น 10 เท่าแน่นอน
3.object บางตัวบางเวลาต้องการ enabled/disable หรือ visible ต้อง refresh มั้ย ?
ผมจะเลือก Refresh ไว้ก่อนกันพลาด ถึงแม้มันจะ Disable หรือ Visible อยู่ก็ตาม เพื่อความถูกต้องของข้อมูล เวลาเราจะนำไปใช้เราก็จะมันใจได้ว่าเป็นข้อมูลล่าสุดแล้ว

4.เคยอ่านเจอหลายท่านบอกว่าสั่ง refresh มีต้นทุนสูงมาก อยากทราบว่าเมื่อสั่ง refresh มันเกิดอะไรขึ้นบ้าง ?
อันนี้ต้องลองเองครับ ผมก็จำไม่ค่อยได้แล้ว เมื่อก่อนคยลองอยู่เหมือนกัน โดยเขียน Code ดักมันไปทุก method เลย แต่รู้สึกว่ามันมีวิธีที่ง่ายกว่านั้นนะผมจำไม่ได้ขอโทษด้วย สำหรับคำว่าต้นสูงมาก ถ้าเป็นคำสั่ง ThisForm.Refresh ละก็ใช่เลย แต่ถ้าเป็น This.Refresh มันก็ไม่เ่ท่าไหร่ครับ
5.ถ้าไม่ build EXE เมื่อข้อมูลที่มีการเปลี่ยนค่าก็แสดงค่าใหม่ถูกต้อง แต่พอ build เป็น EXE กลับไม่แสดงค่าใหม่ ต้องสั่ง refresh ทำไมเป็นอย่างนั้น ?
เวลา Build EXE ลองติ๊กถูกตรง Option ReCompile All File ดู ถ้ายังไม่หายอีกคงต้องดูที่ Code แล้วละ

ส่งข้อความโดย TS-- วันที่ 19 ก.ย. 2551 เวลา 12:10 น. - IP Logged
มุมมอง TS--'s ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ TS-- ค้นหา   Quote TS-- Quote   Send Private Message ส่งข้อความ  
TS--
Avatar
Gold Member
Gold Member
Thailand
19 พ.ย. 2549
429 Posts
Thisform.refresh() จะสั่ง control (object) ทุกตัว*ใน form ให้ refresh ด้วย**
- การ refresh() ของ แต่ละ control ถือว่ามี "ต้นทุน" ถ้ามี control มาก ต้นทุนก็สูง
- ถ้า control เหล่านั้น "ไม่มีความจำเป็น"ต้อง refresh ก็ถือว่าเป็น "ความสูญเสีย"

จริงอยู่ที่ program run เร็วมาก และบ่อยครั้งที่เราไม่รู้สึกว่ามันช้า แต่ผมคิดว่า ...
ช่างที่เชี่ยวชาญและประสบความสำเร็จ ต้องรู้เบื้องหลังและรายละเอียดของการทำงานของเครื่องมือที่ใช้

*    ยกเว้น control ที่อยู่ใน pageframe ที่ไม่ active
** ลองใส่ WAIT WINDOW This.name ไว้ใน thisform.control.refresh method ดู



Refresh จะ evaluate ControlSource และ update ค่าของ control.value ให้เป็นปัจจุบัน
ผมคิดว่าสาเหตุหลักที่สั่ง refresh() กัน ก็เพราะต้องการให้ control update ข้อมูลให้เป็นปัจจุบัน
เพราะลำพังการสั่ง(ต.ย. เช่น) replace table.field with <new data> อย่างเดียว textbox ที่ผูก
controlsource="table.field" นั้นมักจะไม่แสดง <new data> ด้วย จึงต้องสั่ง textbox.refresh() ตาม

กรณีมี control ที่ต้อง update ทีละมากๆ thisform.refresh() ก็เป็นทางเลือกที่ดี


สำหรับ grid, control นี้เป็น container ของ control หลายตัวหลายระดับ และข้อมูลใน grid ผูกกับ
table/cursor อย่างซับซ้อน จึงมักมีปัญหาเรื่องการ update ว่าต้องใช้ refresh() บ่อย แต่ก็อาจจะมีปัญหา
หรือไม่ได้ผล เพราะ grid ยังมี event(เช่น before/afterRowColumnChange) บางตัวที่เราอาจจะเขียน
code คุมงานไว้ในนั้นอีกที code นั้นอาจจะขัดจังหวะ refresh ที่สั่งก่อนหรือตามมาทีหลังก็ได้

สำหรับ listbox, combobox จะมีเรื่อง RowSource, RowSourceType ผสมด้วย ถ้ามีการปรับเปลี่ยน
ข้อมูลจะต้องสั่ง requery() แล้วตามด้วย refresh()


*******
การ set enabled, visible ให้เป็น = .T./.F. มีผลต่อการ update controlSource ได้ครับ

ส่วนเรื่อง run ใน IDE ไม่ต้อง refresh() แต่ EXE ต้อง refresh() ต้องดู รายละเอียดครับ
อาจเกี่ยวกับ LostFocus/Setfocus ของ object ใน form ที่ run EXE ต่างจาก IDE



-------------
qui scribit bis legit

ส่งข้อความโดย วีรนาจ วันที่ 22 ก.ย. 2551 เวลา 08:42 น. - IP Logged
มุมมอง วีรนาจ's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ วีรนาจ ค้นหา   Quote วีรนาจ Quote   Send Private Message ส่งข้อความ  
วีรนาจ
Avatar
Gold Member
Gold Member
Thailand
19 พ.ย. 2549
735 Posts
ขอบคุณทุกคำตอบครับ

ส่งข้อความโดย san3399 วันที่ 29 ก.ย. 2551 เวลา 21:52 น. - IP Logged
มุมมอง san3399's ประวัติส่วนตัว ประวัติส่วนตัว   ค้นหากระทู้อื่นๆ san3399 ค้นหา   Quote san3399 Quote   Send Private Message ส่งข้อความ  
san3399
Avatar
Gold Member
Gold Member
Thailand
06 ก.ค. 2550
41 Posts

เข้ามาอ่านบรรดาเซียนๆเค้าคุยกัน ขอบคุณมากๆครับ


ถ้าท่านต้องการตอบคำถามที่นี่ ท่านควรจะ  Login
ถ้าท่านยังไม่ได้ลงทะเบียน ท่านควรจะ  ลงทะเบียน

กระโดดไป เชิญถาม-ตอบปัญหาได้ที่นี่ครับ ตั้งชื่อกระทู้ใหม่
พิมพ์รายงาน พิมพ์รายงาน

Powered by Vfoxware Forums ver. 1.0
Copyright ©2006-2010 Vfoxware Guide