Solved

Progress Meter

Posted on 2004-04-27
12
742 Views
Last Modified: 2008-03-10
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
Comment
Question by:CatDaddy2003
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
  • 2
  • +1
12 Comments
 
LVL 65

Expert Comment

by:rockiroads
ID: 10928955
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
 
LVL 65

Expert Comment

by:rockiroads
ID: 10928968
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
 
LVL 54

Expert Comment

by:nico5038
ID: 10928980
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 8

Expert Comment

by:dds110
ID: 10928982
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
 
LVL 8

Expert Comment

by:dds110
ID: 10928996
Ah, disregard my comment.
0
 

Author Comment

by:CatDaddy2003
ID: 10929072
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
 
LVL 65

Expert Comment

by:rockiroads
ID: 10929188
could you not put it in the Form_Load function of Customers?
0
 

Author Comment

by:CatDaddy2003
ID: 10929211
Let me do that, and I'll let you know what happens...
0
 

Author Comment

by:CatDaddy2003
ID: 10929265
What I did was Property: OnLoad: DoCmd.OpenForm "Progress Bar Form"

All that did was open both forms, "Progress Bar Form" and "Customers"
0
 
LVL 65

Expert Comment

by:rockiroads
ID: 10929716
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
 

Author Comment

by:CatDaddy2003
ID: 10933292
How do I use the "Timer to display the progress bar" instead of having a separate form?
0
 
LVL 65

Accepted Solution

by:
rockiroads earned 500 total points
ID: 10933592
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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Overview: This article:       (a) explains one principle method to cross-reference invoice items in Quickbooks®       (b) explores the reasons one might need to cross-reference invoice items       (c) provides a sample process for creating a M…
Preparing an email is something we should all take special care with – especially when the email is for somebody you may not know very well. The pressures of everyday working life stacked with a hectic office environment can make this a real challen…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
In Microsoft Access, learn how to use Dlookup and other domain aggregate functions and one method of specifying a string value within a string. Specify the first argument, which is the expression to be returned: Specify the second argument, which …

751 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question