Now en Time issue

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Beste,

Ik ben een beetje aan het oefenen en ik dacht, kom laat ik bij de inlogprocedure nu eens voor de leuk een tijdelijke blok proberen te maken. Je kent dat wel. Je logt 3 keer ergens verkeerd in met een verkeerde pincode en hoppa je kunt tijdelijk niet meer inloggen. Zelfs niet als je wel alles juist intypt.

Stel men wordt geblokkeerd op 10 september 2015 om 21:00 uur. De blokkade duurt dan i.v.m. een blokkade van 15 minuten tot en met 21:15 uur. Hier krijgt men melding van. Op het moment dat met van 21:15 uur inlogt met de juiste gegevens dan reset de blokkade weer en is er niets meer aan de hand.

Dit lukt wel, maar gaande weg het testen met verschillende tijden merk ik dat bij een wisseling van de ene dag naar de andere, de blokkade meteen wordt opgeheven als men een juiste poging doet.

Stel men wordt geblokkeerd op 10 september 2015 om 23:58 uur.
Vanaf nu krijgt men na juist inloggen een melding te zien dat men pas weer om 00:13 uur weer kan inloggen. Echter je voelt hem denk ik al: Datum wordt 11 september 2015 en tijd is 00:00 uur. De 15 minuten zijn in 1 klap weggevaagd en dus kan men inloggen.

Code:
'Mislukte inlogpogingen registreren en blokkeren

            With Sheets("Gebruikers")
                .Cells(UserRow, 11) = .Cells(UserRow, 11) + 1
                If .Cells(UserRow, 11) = 3 Then .Cells(UserRow, 12) = Format(Time, "hh:mm")
                                
            End With

Zodra de blokkade er in zit dan volgt de standaard inlogprocedure. Echter met een extra stapje om te controleren op blokkade en of de blokkade op te heffen.

Code:
    With Sheets("Gebruikers")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        
        For i = 2 To LastRow
            If Trim(Tb_Gebruiker) = Trim(.Cells(i, 1)) Then
                GebruikerOk = True
                UserRow = i 'Rij Gebruiker opslaan in variabele voor verder gebruik buiten de For - Next
                
                
                If Trim(Tb_Wachtwoord) = Trim(.Cells(i, 2)) Then
                    WachtwoordOk = True
                    
''''''''''''''''
'Controle op blokkade en of opheffen van de blokkade

            If .Cells(i, 11) = 3 Then
                If Time - .Cells(i, 12) <= "00:15:00" Then
                    MsgBox "Beste " & .Cells(i, 3) & "," & vbNewLine & vbNewLine & _
                        "Uw gebruikersnaam is tot en met " & Format(CDate(.Cells(i, 12) + TimeValue("00:15:00")), "hh:mm") _
                            & " UUR tijdelijk geblokkeerd."
                    GoTo Reset
                End If
                        
                .Cells(i, 11) = 0 'Reset Aantal mislukte inlogpogingen
                .Cells(i, 12) = vbNullString
            End If

Bovenstaande procedures bevinden zich in dezelfde sub van een userform.

Het "probleem" zit hem in de datum en tijd. Ik heb ook Now() geprobeerd en deze ook in format hh:mm geprobeerd, maar ik krijg het vreemd genoeg niet voor elkaar.

Ik hoor graag reacties. Het is gewoon een probeersel en maakt geen deel uit van de code die feitelijk al klaar is. Ik ben gewoon nieuwsgierig en leergierig.;)
 
Laatst bewerkt:
Zoek is op " Datediff " waarschijnlijk kom je dan al een stuk verder of terug in de tijd :D

ik weet het is een kort antwoord maar ik was eigenlijk al onderweg naar mn bed haha.
 
Handige dingetje.

Zo is de code geworden dan, maar ik krijg nu ook door Now de datum te zien. Net even wat ik niet wilde zien.

Code:
               If .Cells(i, 11) = 3 Then
                   If DateDiff("m", Now, .Cells(i, 12)) <= 15 Then

                        'If Time - .Cells(i, 12) <= "00:15:00" Then
                            
                        MsgBox "Beste " & .Cells(i, 3) & "," & vbNewLine & vbNewLine & _
                            "Uw gebruikersnaam is tot en met " & Format(CDate(.Cells(i, 12) + TimeValue("00:15:00")), "hh:mm") _
                                & " UUR tijdelijk geblokkeerd."
                        GoTo Reset
                    End If
         
                    .Cells(i, 11) = 0 'Reset Aantal mislukte inlogpogingen
                    .Cells(i, 12) = vbNullString
                End If


Code:
            With Sheets("Gebruikers")
                .Cells(UserRow, 11) = .Cells(UserRow, 11) + 1
                If .Cells(UserRow, 11) = 3 Then .Cells(UserRow, 12) = Now
                                
            End With
 
Laatst bewerkt:
Uitgetest door datum van het systeem te wijzigen. Er blijft een melding komen dat men pas om 00:13 uur weer kan inloggen. Echter de tijd is inmiddels 00:17 uur.

In cel I,12 staat de waarde: 10-9-2015 23:58
 
plaats even een voorbeeld bestandje

je zegt zelf "If .Cells(UserRow, 11) = 3 Then .Cells(UserRow, 12) = Now" dus in cel 12 komt dan Now
 
Hoi Pasan,

Het klopt dat in cel 12 Now komt te staan.

Ik heb eens verder gekeken wat er aan de hand was. Het blijkt dat "m" in DateDiff niet voor minuten staat, maar voor maanden.
Als men de minuten wilt berekenen dan dient "n" gebruikt te worden.

Ja dan kun je lang wachten tot de code zijn werk doet.

Met deze informatie ben ik verder aan de slag gegaan en de te datums omgedraaid om na berekenen een positief getal te verkrijgen.

Nu is de code als volgt:

Code:
               If .Cells(i, 11) = 3 Then
                   If DateDiff("n", .Cells(i, 12), Now) <= 15 Then
                        MsgBox "Beste " & .Cells(i, 3) & "," & vbNewLine & vbNewLine & _
                            "Uw gebruikersnaam is tot en met " & Format(CDate(.Cells(i, 12) + TimeValue("00:15:00")), "hh:mm") _
                                & " UUR tijdelijk geblokkeerd."
                        GoTo Reset
                    End If
         
                    .Cells(i, 11) = 0 'Reset Aantal mislukte inlogpogingen
                    .Cells(i, 12) = vbNullString
                End If

Op deze wijze klopt de code wel en wordt de berekening goed uitgevoerd.

:thumb:

Dank je.

If Case = Solved Then Exit Sub
 
Goto lijkt me overbodig (overigens, als je het 'tot' tijdstip aangeeft, ook het woordje tijdelijk ;) )

Code:
If .Cells(i, 11) = 3 and DateDiff("n", .Cells(i, 12), Now) <= 15 Then c00= "Beste " & .Cells(i, 3) & "," & vblf  & vblf & "Uw gebruikersnaam is tot en met " & FormatDateTime(DateAdd("m", 15, Now), vbShortTime) & " uur geblokkeerd."

if c00="" then
  .Cells(i, 11) = 0 
  .Cells(i, 12) = ""
End If

If c00<>"" then msgbox c00
 
Laatst bewerkt:
Yep je hebt gelijk. Het woordje tijdelijk slaat nergens op. Goto wordt gebruikt om de rest van de hier niet vermelde, maar wel aanwezig code over te slaan.
 
Daarvoor moet je geen goto gebruiken.
 
Ja ik weet het. Staat niet netjes of is gedateerd. Komt uit het Q basic tijdperk en maakt van de code een spaghetticode. Zoiets heb ik mij wel eens laten wijsmaken. Beter om hier een aparte module voor aan te maken en deze via Call aan te roepen, maar wat ik al aangaf. Dit is gewoon een speeltje. Een probeersel. In het te maken bestand, tenzij de persoon in kwestie het weer een leuk iets vind....., komt geen blokkering voor.

Maar ongetwijfeld zal jij voor Call een andere wijze hebben... :d.
Wat ook gewoon welkom is.
 
Laatst bewerkt:
Goto lijkt me overbodig (overigens, als je het 'tot' tijdstip aangeeft, ook het woordje tijdelijk ;) )

Code:
If .Cells(i, 11) = 3 and DateDiff("n", .Cells(i, 12), Now) <= 15 Then c00= "Beste " & .Cells(i, 3) & "," & vblf  & vblf & "Uw gebruikersnaam is tot en met " & FormatDateTime(DateAdd("m", 15, Now), vbShortTime) & " uur geblokkeerd."

if c00="" then
  .Cells(i, 11) = 0 
  .Cells(i, 12) = ""
End If

If c00<>"" then msgbox c00

Beste SNB, ik heb jouw stukje code ingevoegd. Echter heb jij hier een klein foutje gemaakt. De m in DateAdd, moet hier voor de minuten een n zijn.

Code:
FormatDateTime(DateAdd("[COLOR="#FF0000"]n[/COLOR]", 15, .Cells(i, 12)), vbShortTime)

Had ik wel meteen een vraagje aan jou. Ik gebruik & vbNewLine, jij gebruikt & vblf.

Behalve de verkorte schrijfwijze, zit er nog meer verschil in tussen beide gebruiken?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan