Progress Bar
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 333   2
URL.หัวข้อ / URL
Progress Bar

บางครั้งเมื่อโปรแกรมกำลังทำงาน ถ้ามีเรคคอร์ดอยู่มากๆ เครื่องจะนิ่งอยู่นานไม่ทราบว่าแฮงหรือกำลังทำงานอยู่ ถ้าสามารถใส่ Progressive Bar ได้ เครื่องกำลังทำงานได้กี่เปอร์เซ้นต์แล้วก็จะมีประโยชน์มาก อยากทราบว่ามีทางที่ใส่เข้ามาได้อย่างไร และเขียนโค๊ดให้ทำงานอย่างไร 
 
รักแอ็คเซส  [ วันอังคาร ที่ 27 สิงหาคม 2545 เวลา 09:04 น. ]   
 
ผมเองก็อยากได้เหมือนกันครับ แต่ยังทำไม่ได้.. คิดว่าสามารถทำได้ 2 วิธีครับ คือ  
1. ใช้ Add-In เข้าช่วย แต่ถ้าเราจะต้องนำไปใช้ที่เครื่องอื่นๆด้วย ก็ต้องตามไป Register ตัว Add-In ทุกเครื่องด้วยครับ  
2. เขียน Code กำกับเอา ซึ่งวิธีนี้ผมลองใช้ได้อยู่ แต่ไม่ใช่แสดงในขณะที่กำลังประมวลผลนะครับ เป็นการแสดงจำนวนเรคคอร์ดของ Form ที่เปิดอยู่ ว่าขณะนี้อยู่ที่เรคคอร์ดที่เท่าไรในจำนวน เรคคอร์ทั้งหมดเท่าไร  
 
  
 โดยคุณ BADMan [ วันอังคาร ที่ 27 สิงหาคม 2545 เวลา 10:11 น. ]    
  
..เลยขอถาม อ.สุภาพด้วยครับว่า ผมเองเคยค้นหาหลาย web แล้ว ตัวอย่างก็เคย D/L มา แต่ยังไม่ตรงตามต้องการครับ  อ.สุภาพพอจะทราบมั๊ยครับ 

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

1 @R00758
ความจริงคือ โปรแกรมกำลังทำงานอยู่ครับ แต่มันอาจนาน เลยทำให้ผู้ใช้ใจร้อน ไปกด Ctrl + Alt + Del มันเลยทำให้โปรแกรมหยุดทำงานไปทันที จึงเห็นคำว่า Not Reponding เสมอ ลองดู SysCmd Function ใน Help นะครับ และนี่คือตัวอย่างของ Access เลย Function ReadRecords(strTableName As String) As Integer Const conBadArgs = -1 Dim dbs As Database, rst As Recordset Dim lngCount As Long, strMsg As String Dim varReturn As Variant, lngX As Long ReadRecords = 0 If strTableName <> "" Then DoCmd.Hourglass True Set dbs = CurrentDb On Error Resume Next Set rst = dbs.OpenRecordSet(strTableName) ' Get record count. rst.MoveLast rst.MoveFirst If Err Then ReadRecords = conBadArgs End If lngCount = rst.RecordCount On Error GoTo 0 If lngCount Then strMsg = "Reading " & UCase$(strTableName) & "..." varReturn = SysCmd(acSysCmdInitMeter, strMsg, lngCount) ' Display message in status bar. For lngX = 1 To lngCount varReturn = SysCmd(acSysCmdUpdateMeter, lngX) ' Update meter. . ' Do something with record. . . rst.MoveNext ' Go to next record. Next lngX varReturn = SysCmd(acSysCmdClearStatus) GoSub CloseObjects ReadRecords = lngCount ' Return number of records. Exit Function End If End If ' Not found or contains no records. strMsg = "Table '" & strTableName & "'not found or contains no records.'" MsgBox strMsg, vbInformation, "ReadRecords" GoSub CloseObjects Exit Function CloseObjects: On Error Resume Next rst.Close dbs.Close On Error GoTo 0 DoCmd.Hourglass False Return End Function ที่ผมใช้ประจำคือใช้หลักการเดียวกับของ อ. BADMan ครับ แต่ผมจะให้แสดงว่ากำลังทำงานกับข้อมูลที่เท่าไร ของทั้งหมดกี่ข้อมูล บน Caption ของฟอร์มครับ ... Dim dbs As Database, rst As Recordset Dim I as Integer Set dbs = CurrentDb Set rst = dbs.Openrecordset("tblTest") If Not rst.EOF Then For I = 1 To rst.Recordcount Caption = "กำลังทำงานข้อมูลที่ " & I & " ของทั้งหมด " & rst.Recordcount & " รายการ" ' ทำงานที่ต้องการตรงนี้ rst.MoveNext Next I Else MsgBox "ไม่มีข้อมูล" End If rst.Close dbs.Close Set dbs = Nothing Set rst = Nothing ... ต้องทำงานบนฟอร์มนะครับ
2 @R00789
ผมไปอ่านเจอบทความของ Microsoft เกี่ยวกับ Simulate a Progress Bar in a Form Without Using an ActiveX Control in Access 2002 ที่ http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q304581 ลองเข้าไปศึกษาโค้ดดูนะครับ ซึ่งมันทำให้ผมนึกถึงโค้ดที่ผมเขาทำไว้ จะใช้หลักการเหมือนกันเลยครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0754s