CatDaddy2003
asked on
Progress Meter
Using MSAccess 2002
I want to be able to open a form "Customers", but as it is opening I want to display a progress meter (lots of data to load). The source code for the progress meter is below, however, I do not know how to modify the code so as to function properly. Need help...
Private Sub Read_Click()
Me.Status.Caption = "Reading"
Screen.MousePointer = 11
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Counter As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("Customer s", dbOpenSnapshot)
rs.MoveFirst
While Not rs.EOF
CurrentRecordID = rs!CustomerID
ProgressBarB.Width = (ProgressBarA.Width / rs.RecordCount) * rs.AbsolutePosition
Me.Repaint
rs.MoveNext
For Counter = 1 To 750000: Next
Wend
If rs.EOF Then
ProgressBarB.Width = rs.RecordCount
Me.Repaint
CurrentRecordID = ""
Me.Status.Caption = "Done"
ProgressBarB.Width = 0
Me.Repaint
End If
rs.Close
Set rs = Nothing
Set db = Nothing
Screen.MousePointer = 0
End Sub
I want to be able to open a form "Customers", but as it is opening I want to display a progress meter (lots of data to load). The source code for the progress meter is below, however, I do not know how to modify the code so as to function properly. Need help...
Private Sub Read_Click()
Me.Status.Caption = "Reading"
Screen.MousePointer = 11
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Counter As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("Customer
rs.MoveFirst
While Not rs.EOF
CurrentRecordID = rs!CustomerID
ProgressBarB.Width = (ProgressBarA.Width / rs.RecordCount) * rs.AbsolutePosition
Me.Repaint
rs.MoveNext
For Counter = 1 To 750000: Next
Wend
If rs.EOF Then
ProgressBarB.Width = rs.RecordCount
Me.Repaint
CurrentRecordID = ""
Me.Status.Caption = "Done"
ProgressBarB.Width = 0
Me.Repaint
End If
rs.Close
Set rs = Nothing
Set db = Nothing
Screen.MousePointer = 0
End Sub
I suppose you could add a counter in it as well
e.g.
dim lCounter as long
progressbar.min=1
rs.MoveLast
progressbar.max= rs.Recordcount
rs.MoveFirst
lCounter=1
While Not rs.EOF
CurrentRecordID = rs!CustomerID
ProgressBarB.Value = lCounter
Me.Repaint
rs.MoveNext
lCounter=lCounter+1
Wend
I THINK THAT IS HOW IT SHOULD BE
e.g.
dim lCounter as long
progressbar.min=1
rs.MoveLast
progressbar.max= rs.Recordcount
rs.MoveFirst
lCounter=1
While Not rs.EOF
CurrentRecordID = rs!CustomerID
ProgressBarB.Value = lCounter
Me.Repaint
rs.MoveNext
lCounter=lCounter+1
Wend
I THINK THAT IS HOW IT SHOULD BE
Personally I use just two rectangles (one backgound and boxShow that's "moving") and this code:
dblI = 0
dblIs = Forms(strFormname).boxBack .Width / rsI.RecordCount
rsI.MoveFirst
While Not rsI.EOF
dblI = dblI + 1
Forms(strFormname).boxShow .Width = dblIs * dblI
Forms(strFormname).Repaint
DoEvents
....
Wend
Clear ?
Nic;o)
dblI = 0
dblIs = Forms(strFormname).boxBack
rsI.MoveFirst
While Not rsI.EOF
dblI = dblI + 1
Forms(strFormname).boxShow
Forms(strFormname).Repaint
DoEvents
....
Wend
Clear ?
Nic;o)
So, what is the code doing? Giving an error? Hanging? Nothing at all?
First thing that caught my eye was this line:
For Counter = 1 To 750000: Next
Why do you need a counter. From what I can see this line doesn't do anything for you. In addition, are you using the Progress Bar ocx control or some other control?
First thing that caught my eye was this line:
For Counter = 1 To 750000: Next
Why do you need a counter. From what I can see this line doesn't do anything for you. In addition, are you using the Progress Bar ocx control or some other control?
Ah, disregard my comment.
ASKER
Let me start ALL OVER...
The code above works just fine. But, it is triggered from a command button "Read" on a form named "Progress Meter Form". What I need to be able to do is trigger the "Progress Meter Form" from the command button that is opening the form "Customers"...
Then display the form "Customers"...
The code above works just fine. But, it is triggered from a command button "Read" on a form named "Progress Meter Form". What I need to be able to do is trigger the "Progress Meter Form" from the command button that is opening the form "Customers"...
Then display the form "Customers"...
could you not put it in the Form_Load function of Customers?
ASKER
Let me do that, and I'll let you know what happens...
ASKER
What I did was Property: OnLoad: DoCmd.OpenForm "Progress Bar Form"
All that did was open both forms, "Progress Bar Form" and "Customers"
All that did was open both forms, "Progress Bar Form" and "Customers"
ok, in the code for customers
first line in Form_Load
Minimise the window
I think its DoCmd.Minimize
then run your code
then when finished, restore window (DoCmd.Restore I think it is)
what you could do though perhaps, if above dont work, is use the timer of the customers form to display your progress bar instead of having a seperate form
first line in Form_Load
Minimise the window
I think its DoCmd.Minimize
then run your code
then when finished, restore window (DoCmd.Restore I think it is)
what you could do though perhaps, if above dont work, is use the timer of the customers form to display your progress bar instead of having a seperate form
ASKER
How do I use the "Timer to display the progress bar" instead of having a separate form?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
min would be 1
max would be recordcount
when updating progressbar,you dont change the width but the value
e.g.
progressbar.min=1
rs.MoveLast
progressbar.max= rs.Recordcount
rs.MoveFirst
then in code do this
progressbar.value = ....