Compileren van ACCES database en inlog scherm.

Status
Niet open voor verdere reacties.

Thomassoft

Verenigingslid
Lid geworden
6 jul 2010
Berichten
130
Hoi iedereen,

Ik heb een database met daarvoor een Inlog scherm.
Het inlog scherm werkt naar behoren wanneer mijn database niet gecompileerd is, maar wanneer ik de database compileer gebeurt er niks, geen foute inlog melding of wat dan ook ?

Weten jullie wat hier aan de hand is ?

VBA code van het inlog scherm:
Code:
Option Compare Database

Private Sub KnopCancel_Click()
    DoCmd.Quit
End Sub

Private Sub knoplogin_Click()
    Dim rs As Recordset
    
    Set rs = CurrentDb.OpenRecordset("tblmedewerkers", dbOpenSnapshot, dbReadOnly)
    
    rs.FindFirst "Gebruikersnaam='" & Me.txtGebruiker & "'"
    
    If rs.NoMatch Then
        Me.lblgebruikersnaamonjuist.Visible = True
        Me.txtGebruiker.SetFocus
        Me.lblwachtwoordonjuist.Visible = True
        Me.txtwachtwoord.SetFocus
        Exit Sub
    End If
    Me.lblgebruikersnaamonjuist.Visible = False
    
    If rs("Wachtwoord") <> Nz(Me.txtwachtwoord, "") Then
        Me.lblwachtwoordonjuist.Visible = True
        Me.txtwachtwoord.SetFocus
        Exit Sub
        
    End If
    Me.lblwachtwoordonjuist.Visible = False
    
    DoCmd.OpenForm "frmHoofdmenu"
    DoCmd.Close acForm, Me.Name
    
End Sub


Private Sub GebruikersnaamOnjuistStyle()
    Me.lblgebruikersnaamonjuist.Visible = True
    Me.txtGebruiker.BorderColor = RGB(255, 0, 0)
    
    
End Sub

Private Sub WachtwoordonjuistStyle()
    Me.lblwachtwoordonjuist.Visible = True
    Me.txtwachtwoord.BorderColor = RGB(255, 0, 0)
    

End Sub


Alvast bedankt !
 
Laatst bewerkt:
Doe ons een lol, en zet bovenstaande code nog even in de Code tags: [ CODE ] aan het begin, en [/ CODE ] aan het eind (zonder de spaties).
 
Leest een stuk makkelijker :). Je hebt daar een knop voor, voor de volgende keer: de knop #. Staat in het links in het meest rechtse blokje op de knoppenbalk van <Snel reageren>.
Ik zal eens kijken of ik er wat van kan maken...
 
Wat die laatste subjes hier doen (de Style codes) zie ik zo even niet, maar wellicht dat je die ergens anders aftrapt. Op zich zou de code moeten werken, gecompileerd of niet. Zelf zou ik het iets anders doen, meer iets als:

Code:
Private Sub knoplogin_Click()
Dim rs As Recordset, sqls As String
    
    sqls = "SELECT Gebruikersnaam, Wachtwoord FROM tblmedewerkers WHERE Gebruikersnaam = """ & Me.txtGebruiker & """"
    Set rs = CurrentDb.OpenRecordset(sqls, dbOpenSnapshot, dbReadOnly)
    If rs.RecordCount = 1 Then
        Me.lblgebruikersnaamonjuist.Visible = False
        If rs!Wachtwoord <> Nz(Me.txtWachtwoord, "") Then
            Me.lblwachtwoordonjuist.Visible = True
            Me.txtWachtwoord.SetFocus
            rs.Close
            Exit Sub
        End If
    Else
        Me.lblgebruikersnaamonjuist.Visible = True
        Me.lblwachtwoordonjuist.Visible = True
        Me.txtGebruiker.SetFocus
            rs.Close
        Exit Sub
    End If
    rs.Close
    
    DoCmd.OpenForm "frmHoofdmenu"
    DoCmd.Close acForm, Me.Name
    
End Sub
En als je de gebruikersnaam uit de Inlognaam haalt, kan het ook met Environ. Dan zet je de gebruikersnaam er al in bij het laden van het formulier. Doe ik zelf zo:

Code:
Private Sub Form_Load()
    Me.Password = Null
    '-------------------------------------------------------------------------------------------------------------------------------------------------
    'Controleren of gebruiker al ingelogd is onder een medewerkersnaam. In dat geval: gebruik de huidige naam.
    'Anders is er blijbaar nog niet ingelogd, en dan gebruiken we de UserID van de ADW account.
    '-------------------------------------------------------------------------------------------------------------------------------------------------
    strSQL = "SELECT medewerkerID, inlognaam, [medewerker_naam], Wachtwoord, rechten, Actief, [WW_Datum] FROM tMedewerkers "
    If Not IsNull(TempVars("varMedInlog").Value) Then
        strSQL = strSQL & "WHERE [Inlognaam] = """ & TempVars("varMedInlog").Value & """"
    Else
        strSQL = strSQL & "WHERE [Inlognaam] = """ & Environ("USERNAME") & """"
    End If
    Set rst = CurrentDb.OpenRecordset(strSQL)
    With rst
        If .RecordCount = 1 Then
            With TempVars
                '-------------------------------------------------------------------------------------------------------------------------------------
                'Medewerker variabelen
                '-------------------------------------------------------------------------------------------------------------------------------------
                .Add "varMedID", rst!MedewerkerID.Value
                .Add "varMedInlog", rst!inlognaam.Value
                .Add "varMedNaam", rst!medewerker_naam.Value
                .Add "varAccessLevel", rst!rechten.Value
                .Add "varActief", rst!Actief.Value
                .Add "varWW", rst!Wachtwoord.Value
                .Add "varWW_Datum", rst!WW_Datum.Value
            End With
            .Close
        Else
            MsgBox "U heeft geen geldige inlognaam." & vbLf & "Neem contact op met de beheerder", vbCritical
            Application.Quit
        End If
    End With

    '-------------------------------------------------------------------------------------------------------------------------------------------------
    ' Access level gebruiken om te controleren of een medewerker mag switchen van accounts.
    '-------------------------------------------------------------------------------------------------------------------------------------------------
    Select Case TempVars("varAccessLevel").Value
        Case 1
            strSQL = str & "WHERE (inlognaam <> """""
        Case 2
            strSQL = str & "WHERE (inlognaam <> """" AND Actief=True"
        Case Is >= 3
            strSQL = str & "WHERE (inlognaam = """ & TempVars("varMedInlog") & """ AND Actief=True"
        Case Else
            MsgBox "U heeft geen geldige inlognaam." & vbLf & "Neem contact op met de beheerder", vbCritical
            Application.Quit
    End Select
    If TempVars("varAccessLevel").Value > 1 Then
        strSQL = strSQL & " AND [Rechten] >= " & TempVars("varAccessLevel").Value & ") Order By [medewerker_naam]"
    Else
        strSQL = strSQL & ") Order By [medewerker_naam]"
    End If
    
    '-------------------------------------------------------------------------------------------------------------------------------------------------
    ' Aanpassen van de keuzelijst.
    '-------------------------------------------------------------------------------------------------------------------------------------------------
    With Me.MedewerkerID
        .RowSource = strSQL
        .Requery
    End With
    Select Case LCase(VBA.Environ("USERNAME"))
        Case "octa010"
            strSQL = "SELECT [medewerkerID], [inlognaam], [Wachtwoord], [WW_Datum] FROM tMedewerkers " _
                & "WHERE [inlognaam] = """ & LCase(VBA.Environ("USERNAME")) & """"
            Set rst = CurrentDb.OpenRecordset(strSQL)
            With rst
                strWW = !Wachtwoord
                .Edit
                !WW_Datum = DateAdd("m", 2, Date)
                .Update
                .Close
            End With
            Me.Password = strWW
        Case Else
    End Select
    
    '-------------------------------------------------------------------------------------------------------------------------------------------------
    ' Actieve medewerker instellen op de keuzelijst.
    '-------------------------------------------------------------------------------------------------------------------------------------------------
    Me.MedewerkerID.Value = TempVars("varMedID").Value
    Set rst = Nothing
    Me.Password.SetFocus

AdminInstellen:
    'Admin knop verbergen of tonen
    If TempVars("varAccessLevel").Value > 2 Then
        Me.cmdDisableBypassKey.Visible = False
        Me.cmdSwitchPassword.Visible = False
    Else
        Me.cmdDisableBypassKey.Visible = True
        Me.cmdSwitchPassword.Visible = True
    End If
End Sub
Daar zit uiteraard wel wat meer achter; ik werk met Access Levels, en een check op verlopen wachtwoorden. Dat maakt het wel veiliger trouwens :).
 
Bedankt voor tip van de veiligheid hier zou ik inderdaad ook misschien even dieper in moeten kijken !

Maar helaas het probleem is er nog steeds, misschien was ik niet helemaal specifiek genoeg.

De bedoeling is, dat ik mijn data base beveilig dus in algemene opties van acces alles wat met wijzigingen te maken heeft en het navigatiedeel venster uit schakel.
Nadat gedaan te hebben sla ik het document op als ACCDE bestand maar daarna werken mijn knoppen niet meer zeg maar de volledige functie van de knoppen vallen weg ( op het inlog scherm )
De reden waarom ik dit een ACCDE bestand maak is omdat het gebruikt moet gaan worden als applicatie.

Enig idee waar het aan ligt ?
 
Access kan je nooit echt beveiligen, dus zou ik daar niet teveel moeite in steken.
Als je een executable van een access app maakt dan verlies je veel van de ingebouwde functies van Acces die je dan zelf moet programmeren. Zelf heb ik dat nog gedaan bij Access 2.0 en Access 97, maar de latere versies zijn door Microsoft steeds meer en meer generfed. Bottom line: als je verder wil met eigen goed beveiligde executables zou ik naar andere systemen kijken. Bv .net applicaties (kan je ook echte web apps mee creëren) op een echte database (mySQL , of van de makers van mySQL: MariaDB of SQL server express: allemaal gratis databases). De learning curve is iets groter, maar je krijgt er zoveel meer mogelijkheden dat het de moeite loont om er tijd in te steken.
 
Wellicht niet ter zake doende, maar waarom zou je de db zo stevig dicht willen timmeren? Als het voor intern gebruik is, heeft Access meer dan voldoende mogelijkheden om de db goed te beveiligen, ongeacht wat Noella zegt. Natuurlijk zijn slimme mensen best in staat om die beveiliging te kraken, maar de vraag hoe dat te voorkomen, is vele malen minder interessant dan de vraag waarom dat dan gebeurt!
Als ik een database maak voor het werk, dan heeft die maar één primaire functie: het werk voor de gebruikers gemakkelijker maken. Ik heb in mijn totale carrière nog nooit te maken gehad met medewerkers die moedwillig een van mijn databases hebben verklooid. En waarom zouden ze ook? Alle ‘beveiliging’ die ik inbouw is dan ook alleen bedoeld om te voorkomen dat de verkeerde gebruikers per ongeluk in de db komen, en om er voor te zorgen dat de juiste data op de juiste plek terecht komt.

Iets anders is het als je databases verkoopt aan derden; dan kan ik mij voorstellen dat je een applicatie verkoopt die dan toevallig op een database draait. Maar dan praat je over echte toepassingen. Een ACCDE bestand kan niet zo heel veel automatisering hebben, is de ervaring. Je maakt ze ook alleen om de gebruikers een werkbare tool te geven zonder dat je bijvoorbeeld extra licenties voor Access nodig hebt.
 
Inderdaad, goed advies.
Als je in elk forum in elk topic de goede tips gaat herhalen, heb je vermoedelijk teveel vrije tijd over... Bovendien denk ik niet dat daar veel mensen op zitten te wachten, want hoe nuttig is dat?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan