Link to home
Start Free TrialLog in
Avatar of CatDaddy2003
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("Customers", 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
Avatar of rockiroads
rockiroads
Flag of United States of America image

I would say, you first need to set a min and max

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 = ....
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
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)
Avatar of dds110
dds110

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?
Ah, disregard my comment.
Avatar of CatDaddy2003

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"...
could you not put it in the Form_Load function of Customers?
Let me do that, and I'll let you know what happens...
What I did was Property: OnLoad: DoCmd.OpenForm "Progress Bar Form"

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
How do I use the "Timer to display the progress bar" instead of having a separate form?
ASKER CERTIFIED SOLUTION
Avatar of rockiroads
rockiroads
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial