กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
421 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 มา แต่ยังไม่ตรงตามต้องการครับ อ.สุภาพพอจะทราบมั๊ยครับ
รักแอ็คเซส [ วันอังคาร ที่ 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
ลองเข้าไปศึกษาโค้ดดูนะครับ ซึ่งมันทำให้ผมนึกถึงโค้ดที่ผมเขาทำไว้ จะใช้หลักการเหมือนกันเลยครับ
Time: 0.1125s