Question

Inserted my progress bar and it didn't work as expected. When i logged in, it works, but it doesn't automatically loads the second form.

Here is my code for progress/timer

Private Sub Timer1_Timer()
  If ProgressBar1.Value = 100 Then
  ProgressBar1.Value = 0
  Else
   ProgressBar1.Value = Val(ProgressBar1.Value) + Val(20)
   End If
   Label3.Caption = ProgressBar1.Value

Label , to detect 100, variable prg to hold

Private Sub Label3_Change()
If (Label3.Caption = 100) Then
prg = 1
Timer1.Interval = 0
End If
End Sub

log in button

 Private Sub cmdSign_Click()
 currentTime = TimeValue(Now)
 strCurrdate = Format(Date, "mmm d, YYYY")

 rx.Open "Select * from login where username ='" & Text1 & "' and password='" & Text2 & "'", db, 3, 3
 If (counter = 3) And (rx.EOF = True) Then
 MsgBox "You guessed too many times! Intruder alert!"
End
    Else
        If rx.EOF = True Then
              MsgBox "Invalid Username or Password"
            counter = counter + 1
              Text1 = ""
              Text2 = ""
        Else
             user1 = Text1.Text
             logTime = currentTime
             rxd.Open "Select * from logHistory", db, 3, 3

               With rxd
                       .AddNew
                       .Fields("username") = user1
                      .Fields("TimeDate") = strCurrdate
                      .Fields("TimeIn") = logTime
                      .Update
               End With
             Set rxd = Nothing
                'problem might be here
                ProgressBar1.Visible = True
                Timer1.Interval = 100
                Label3.Visible = True
                Timer1.Enabled = True
                If prg = 1 Then
                   MsgBox "Welcome " + Text1 + " to SPARTAN!"
                   mainmenu.Show
                   End If
      End If
     End If

     Set rx = Nothing
    End Sub

Any help on this?

Was it helpful?

Solution

Once the timer is started it runs asynchronously to the rest of your code. The way you have coded your login button you are expecting the timer to move the progressbar from 0 to 100, set your (I assume) module scoped variable prg to 1 and then continue. In reality your code enables the timer and moves on. When it reaches the If prg = 1 Then statement prg is still whatever it has been initialized at. One way to fix it is to check the prg variable in your timer event.

Private Sub Timer1_Timer()
    If ProgressBar1.Value = 100 Then
        Timer1.Enabled = False  ' don't fire the timer event again
        ProgressBar1.Value = 0
        MsgBox "Welcome " & Text1 & " to SPARTAN!" 
        mainmenu.Show
    Else
        ProgressBar1.Value = Val(ProgressBar1.Value) + Val(20)
    End If
    Label3.Caption = ProgressBar1.Value
End Sub

I also changed your string concatenation + to &. The plus symbol "+" works, but is only included in VB versions after 3 for backward compatibility and it is considered bad form to use it for other than arithmetic. In VB version 4 and greater the ampersand "&" should be used for concatenation. MSDN reference here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top