Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 762
  • Last Modified:

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
0
CatDaddy2003
Asked:
CatDaddy2003
  • 5
  • 4
  • 2
  • +1
1 Solution
 
rockiroadsCommented:
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 = ....
0
 
rockiroadsCommented:
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
0
 
nico5038Commented:
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)
0
Configuration Guide and Best Practices

Read the guide to learn how to orchestrate Data ONTAP, create application-consistent backups and enable fast recovery from NetApp storage snapshots. Version 9.5 also contains performance and scalability enhancements to meet the needs of the largest enterprise environments.

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

All that did was open both forms, "Progress Bar Form" and "Customers"
0
 
rockiroadsCommented:
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
0
 
CatDaddy2003Author Commented:
How do I use the "Timer to display the progress bar" instead of having a separate form?
0
 
rockiroadsCommented:
in the form_load you set the form's timerinterval

e.g.
Private Sub Form_Load()
     Me.TimerInterval = 3000  'every 3 secs
End Sub

then in the timer func, here I am displaying a msg
Private Sub Form_Timer()
    MsgBox "Hello"
End Sub


you can mod it so you can update progress bar
so when you reach end, terminate timer,progressbar and contine
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 5
  • 4
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now