Database gebruikers loggen

Status
Niet open voor verdere reacties.

munchy

Gebruiker
Lid geworden
25 jan 2009
Berichten
27
Ik heb op het werk een database voor de rapportage.
Dit programma is destijds geschreven in Access '97 en draait nu onder Access 2010.
Afgelopen week is het programma een keer vastgelopen, gelukkig had ik een back-up maar om deze terug te zetten moest iedereen even uitloggen. Hier zit het probleem. Jan en alleman had het programma op de achtergrond nog openstaan. Al met al ben ik twee uur bezig geweest om de .ldb file afgesloten te krijgen. Nu ben ik bezig geweest met VBS code om te kunnen zien wie er allemaal ingelog zijn. Ik heb dit voor elkaar maar krijg alleen dit te zien:

COMPUTER_NAME LOGIN_NAME CONNECTED SUSPECT_STATE
EF-SRCX113 Admin True Null
EF-SRCX113 Admin True Null
EF-SRCX113 Admin True Null

Nu heb ik ergens gelezen dat met behulp van de Microsoft Jet.... het mogelijk moet zijn om ook de username te achterhalen. Ik heb dit geprobeerd maar het is me niet gelukt. Misschien dat het aan ons netwerk ligt. We werken met een Citirx omgeving.
In principe zou ik al geholpen zijn met een inlogscherm dat de username vraagt en automatisch de bijbehoorden tijd en datum in een tabel plaats. Bij afsluiten van de database zou deze username dan weer uit de tabel gegooid mogen worden of eventueel een vermelding van tijdstip en datum wanneer uitgelogd is. Weet iemand of dit te maken is? Of heeft iemand een beter idee. Ik kan zelf helemaal niets schrijven in Visual Basic. Ook vraag ik me af hoe ik voor moet zorgen dat het login scherm opent en verplicht is bij het openen van de database.
Ik hoop dat ik mijn probleem een beetje duidelijk heb kunnen maken.
Alvast bedankt,
 
Ik kan zelf helemaal niets schrijven in Visual Basic.
Dat is een heel slecht uitgangspunt... Op het forum worden regelmatig vragen gesteld over inloggen van gebruikers, en de voorbeelden kun je dus probleemloos vinden als je in dit subforum zoekt op inlog vind je o.a. dit draadje waar een oplossing staat voor het inlogverhaal. En hier staat een vba voorbeeldje dat ik zelf gebruik om mutaties en useractiviteiten vast te leggen. Maar ja, dan moet je wel een beetje kunnen programmeren.
In jouw geval zou ik zeggen: huur iemand in die iets voor je kan bouwen als je dat zelf niet kunt.
Overigens heb ik in de Access cursus behandeld hoe je gebruikers uit een database kunt gooien, bijvoorbeeld om onderhoud te plegen. Je stelt dan de tijd in op zeg 10 minuten, en daarna worden alle ingelogde gebruikers automatisch uit de db geknikkerd. Ook dat is VBA :).
 
Oke bedankt, voor je reactie. Ik probeer er wel uit te komen en had wel degelijk eerst gezocht via google en de zoekfunctie hier.
Ik ga nu je cursus uitprinten en doornemen, maar toch nog een vraagje. Kan je me vertellen in welk hoofstuk je behandels hoe je mensen
uit de database kunt gooien?
Alvast bedankt,
 
Oeps, ik heb het al gevonden. Hoofdstuk 19. Vergeet mijn vraag maar even.
 
Ik heb de code zoals in Uw cursus staat doorgenomen en ingtypt zoals dat uitgelgd wordt in de cursus, hieronder het stukje wat problemen geeft

myTime = TimeSerial(0, iTime + iNewTime, 0)
myNewStartTime = Format(Now() + myTime, "hh:mm")

strText = "Deze database gaat over " & iTime & " " & sTimeBlock

& " automatisch dicht voor onderhoud." & vbCrLf

strText = strText & " Sluit de database zo snel mogelijk om gegevensverlies te voorkomen."

& vbCrLf & vbCrLf

strText = strText & "Je kunt de database over " & iNewTime & " "
& sNewTimeBlock & " weer openen." & vbCrLf & vbCrLf

strText = strText & "Dat zal zijn rond " & myNewStartTime & "."

Op de rode tekst krijg ik een Compile error.
Kun je mij vertellen waarom, ik heb 'm toch letter voor letter overgenomen.

Alvast bedankt
 
Laatst bewerkt:
Je hebt de letters wel overgenomen, maar niet alle tekens. De verschillende regels zijn feitelijk één opdrachtregel, die met een scheidingsteken over 2 regels zijn verdeeld. En bij jou ontbreekt het scheidingsteken.
Code:
myTime = TimeSerial(0, iTime + iNewTime, 0)
myNewStartTime = Format(Now() + myTime, "hh:mm")

strText = "Deze database gaat over " & iTime & " " & sTimeBlock [B][COLOR="#FF0000"]_[/COLOR][/B]
     & " automatisch dicht voor onderhoud." & vbCrLf

strText = strText & " Sluit de database zo snel mogelijk om gegevensverlies te voorkomen."  [B][COLOR="#FF0000"]_[/COLOR][/B]
     & vbCrLf & vbCrLf

strText = strText & "Je kunt de database over " & iNewTime & " "  [B][COLOR="#FF0000"]_[/COLOR][/B]
     & sNewTimeBlock & " weer openen." & vbCrLf & vbCrLf

strText = strText & "Dat zal zijn rond " & myNewStartTime & "."
Let vooral ook op de spatie vóór het scheidingsteken; laat je die weg dan krijg je weer een foutmelding.
 
Als ik jouw tekst rechtsreeks kopieer krijg ik inderdaad geen foutmeldingen.
Nu wil ik niet vervelend doen maar die tekens heb ik in de cursus niet gevonden.
In ieder geval bedankt, ik kan nu weer verder.
Ik ga een cursus visual basic zeker op mijn verlanglijstje zetten.
Naast de cursus Access voor beginners en gevorderde.

Groetjes
 
Klopt; dat is een beetje het vervelende als je code van Word converteert naar pdf, want dan worden er, als je de code vervolgens uit de pdf kopieert harde returns gemaakt, terwijl die in het oorspronkelijke document niet aanwezig zijn, en je de tekst dus probleemloos had kunnen kopiëren. Normaal gesproken hadden de regels die bij elkaar horen op één regel moeten staan, maar dat lukt dus niet vanwege de pagina-instelling.
Een beetje verwarrend, maar op 2 manieren op te lossen. Manier 1 heb je nu gezien (met de _), manier 2 is nog veel simpeler:

Code:
myTime = TimeSerial(0, iTime + iNewTime, 0)
myNewStartTime = Format(Now() + myTime, "hh:mm")

strText = "Deze database gaat over " & iTime & " " & sTimeBlock & " automatisch dicht voor onderhoud." & vbCrLf
strText = strText & " Sluit de database zo snel mogelijk om gegevensverlies te voorkomen."  & vbCrLf & vbCrLf
strText = strText & "Je kunt de database over " & iNewTime & " "  & sNewTimeBlock & " weer openen." & vbCrLf & vbCrLf
strText = strText & "Dat zal zijn rond " & myNewStartTime & "."

Take your pick ;)
 
Octafish zou je me nog een keer willen helpen?
Ik heb de beschrijving gelezen de tabellen en formulieren gemaakt en de code ingetypt.
Op een af andere manier krijg ik het niet werkend dat wil zeggen, ik weet eigenlijk niet hoe het zou moeten werken.
Laat ik eerst even wat meer informatie geven:
Het gaat om een rapportage programma wat door diverse mensen tegelijk gebruikt wordt.
Het programma staat op een gezamenlijke netwerkschijf.
Mensen loggen in op het systeem middels een userid en password.
Dit gaat via een Citrix systeem. Indien mensen toegang hebben tot de schijf waarop het programma staat kunnen ze
het programma dus openen.
De meesten mensen die gebruik maken van het programma kunnen alleen bij de formulieren, dit komt doordat ze de database
opstarten vanuit een runtime versie (heb ik dat goed?). Het aantal mensen wat daadwerkelijk de volledige Access versie tot zijn
beschikken heeft is minimaal.
Gelukkig ben ik er daar een van, ik kan dus in de gehele database.
Nu weer even terug naar mijn probleem.
Uit de beschrijving is het mij niet helemaal duidelijk hoe het een en ander zou moeten werken en misschien wel belangrijker, hoe kan ik
testen of het werkt?
Stel ik wil dat de mensen de database verlaten?
Volstaat het dan om alleen een vinkje te zetten in de tabel bij LogOff? Zou de rest dan automatisch moeten verlopen?
Momenteel ben ik bezig met het rapportage programma voor 2015. Ik doe dit zeg maar offline. Niemand behalve ik maakt gebruik van deze versie.
Als ik de code wil testen en ik zet een vinkje in de tabel bij logOff, krijg ik de waarschuwing dan ook te zien? (dat gele formulieren wat vertelt dat ik moet uitloggen).
Ik heb de code helemaal overgenomen en krijg geen compile error meer. Als ik een vinkje zet in de tabel bij Logoff gebeurd er helemaal niets en als ik dan het
formulier wat bij de tabel hoort open maak krijg ik de melding dat de database gesloten is voor onderhoud en wordt uit Access gegooid.
Als ik het ExitNow formulier open maak krijg ik een fout melding. Helaas kan ik op dit moment niet zeggen welke foutmelding ik precies krijg omdat ik nu niet op
mijn werk ben. Ik zal vannacht een juiste omschrijving aan mijn verhaal toevoegen.
Het is een heel verhaal maar ik probeer zo duidelijk mogelijk te zijn.

Alvast bedankt
 
Volstaat het dan om alleen een vinkje te zetten in de tabel bij LogOff? Zou de rest dan automatisch moeten verlopen?
Ja, dat zou genoeg moeten zijn. Al heb ik het systeem nooit getest in een citrix omgeving, dus ik kan je niet zeggen of het dan ook werkt. De versie die ik in de cursus heb behandeld werkt in ieder geval; ook de admin wordt er netjes uit gemieterd. Als dat bij jou niet gebeurt, dan zou ik die versie dus wat beter moeten bekijken.
 
Deze foutmelding krijg ik als ik het formulier frmExitNow probeer te openen:

Access foutmelding.jpg
 
Die melding is redelijk duidelijk: blijkbaar heb je één van de functies die worden gebruikt niet gemaakt, of zijn ze niet te vinden (Bijvoorbeeld doordat ze Private zijn). Zoals ik hiervoor zei: ik kan pas zien wat er aan de hand is als ik de db zie :).
 
Die melding is redelijk duidelijk: blijkbaar heb je één van de functies die worden gebruikt niet gemaakt, of zijn ze niet te vinden (Bijvoorbeeld doordat ze Private zijn). Zoals ik hiervoor zei: ik kan pas zien wat er aan de hand is als ik de db zie :).

Ik geef het op, ik kan je de database helaas niet sturen omdat hier nogal wat bedrijfsgevoelige informatie in staat. Ik krijg het gewoon niet aan de gang. Ik heb de code vandaag nogmaals helemaal doorgenomen en geen fouten meer kunnen ontdekken. Bedankt voor alle hulp. Tot slot toch nog een laatste strohalm, wat bedoel je met het Private zijn ? Oja ik zag dat standaard bij recordset type deze op Dynaset staat terwijl Snapshot ook een optie is. Nu ben ik in je code de term Snapshot ook tegengekomen, heeft dit er iets mee te maken?


Nogmaals bedankt
 
Laatst bewerkt:
Omdat ik het niet uit kan staan als iets me niet lukt ben toch blijven zoeken naar een manier om gebruikers uit de database te kunnen zetten indien ik onderhoud wil doen. Ik weet dat Octafish daar in zijn cursus een hoofstuk aan besteed heeft maar na 3dagen proberen kreeg ik het op die manier niet voor elkaar.
Ik heb nu een andere methode gevonden die mogelijk ook moet werken.
Deze methode werkt met een leeg tekst file genaamd Enabled.txt. Vanaf openen van de database controleert Access of dit text file aanwezig is. Indien aanwezig gaat Access gewoon door met de werkzaamheden. Mocht ik onderhoud willen doen dan verander ik de naam van het tekst file en stuurt Access een waarschuwing uit dat de database gesloten gaat worden voor onderhoud en na 3 minuten sluit de database.
Alles gaat goed tot aan het automatisch afsluiten. Op een af ander manier gebeurd net die stap niet.
Code:
Private Sub Form_Open(Cancel As Integer)
    
    ' Set Count Down variable to false
    ' on the initial opening of the form.
    boolCountDown = False
    Dim strFileName As String
    strFileName = Dir("O:\P1E_MM\DAGRAPPORT\DAGRAPPORT P1P\Enabled.txt")
    If strFileName <> "Enabled.txt" Then
        MsgBox "Database being updated, please try again later."
        Application.Quit acQuitSaveAll
    End If
    
End Sub

Private Sub Form_Timer()

On Error GoTo Err_Form_Timer
    Dim strFileName As String
    strFileName = Dir("O:\P1E_MM\DAGRAPPORT\DAGRAPPORT P1P\Enabled.txt")
    If boolCountDown = False Then
        ' Do nothing unless the check file is missing.
        If strFileName <> "Enabled.txt" Then
            ' The check file is not found so
            ' set the count down variable to true and
            ' number of minutes until this session
            ' of Access will be shut down.
            boolCountDown = True
            intCountDownMinutes = 3
            GoTo Warningform
        End If
    Else
        ' Count down variable is true so warn
        ' the user that the application will be shut down
        ' in X number of minutes.  The number of minutes
        ' will be 1 less than the initial value of the
        ' intCountDownMinutes variable because the form timer
        ' event is set to fire every 60 seconds
        intCountDownMinutes = intCountDownMinutes - 1
Warningform:
        DoCmd.OpenForm "frmAppShutDownWarn"
        Forms!frmAppShutDownWarn!txtWarning = "Due to database maintenance this application will be shut down in approximately " & intCountDownMinutes & " minute(s).  Please save all work and exit immediately."
        If intCountDownMinutes < 1 Then
            ' Shut down Access if the countdown is zero,
            ' saving all work by default.
            Application.Quit acQuitSaveAll
        End If
    End If

Exit_Form_Timer:
    Exit Sub

Err_Form_Timer:
    Resume Next

End Sub

Dit is de code die ik gebruik.
Wie kan me vertellen doe ik er voor kan zorgen dat de database afsluit?

Alvast bedankt,
 
Jouw methode verschilt niet van mijn methode, met dit verschil dat ik de verandering in de database zelf vastleg, en dat lijkt mij een betere oplossing dan een extern bestand te gebruiken. Ik heb mijn oplossing getest, en hij werkt prima. Om te zien waarom het bij jou niet werkt, moeten we toch een database hebben, want aan de code zelf is verder niks te zien. Je geeft de juiste commando's om de db te sluiten.
 
Hoe moet ik je een kopie van de database sturen?
Als ik je een prive bericht wil sturen krijg ik een melding dat ik dat niet mag doen.
De database hier zetten is geen optie vanwege de reden die ik je eerder gaf.
Verder is de database een zooitje dat weet ik.
De database is destijds gemaakt door iemand met minimale kennis van Access en daarna is er
door iemand met wel verstand van zaken een ander Access programma aan vast geknoopt.
Niemand weet hoe de programma's in elkaar verweven zijn en de grootste angst is dan ook dat
de koppeling tussen de twee programma's verloren gaat.
Laat maar weten of je er nu nog zin in hebt om er naar te kijken.
 
Hoe groter de uitdaging, hoe mooier natuurlijk :). Je mag hem wel mailen, als je het buiten HelpMij wilt houden. Overigens moet je mij gewoon een mailtje kunnen sturen, want dat doen mensen wel vaker, dus dat werkt gewoon. Mijn profielpagina openen, en dan <Stuur privé bericht>.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan