Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

CurrentDB bringt Fehler "Variable nicht definiert"

Begonnen von derilzemer, Mai 13, 2016, 19:40:28

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
vorweg muss ich sagen, dass es sich hierbei um einen Login handelt, der soweit auch funktioniert. Jetzt wollte ich noch das Thema mit dem AllowBypasskey hinzufügen, da habe ich dann das Problem weil ich wohl eine Sprungmarke definieren muss und ich nicht weiß wie und wo. Dies wiederum liegt an meinem Newbie Dasein in VBA, da bin ich nahezu blind :(.
Hier der Code:
Option Compare Database
Option Explicit

Private Sub cmdLogin_Click()
    Dim rs As Recordset
   
    Set rs = CurrentDb.OpenRecordset("tblBenutzer", dbOpenSnapshot, dbReadOnly)
   
    rs.FindFirst "UserID='" & Me.txtBenutzername & "'"
   
    If rs.NoMatch = True Then
        Me.lblFalscherBenutzer.Visible = True
        Me.txtBenutzername.SetFocus
        Exit Sub
    End If
    Me.lblFalscherBenutzer.Visible = False
   
    If rs!Passwort <> Encrypt(Me.txtPasswort) Then
        Me.lblFalschesPasswort.Visible = True
        Me.txtPasswort.SetFocus
        Exit Sub
    End If
    Me.lblFalschesPasswort.Visible = False
   
'Set ByPassKeyPrompt
    If rs!BenutzerArtID_F = 1 Then
        Dim prop As Property
        On Error GoTo SetProperty
        Set prop = CurrentDb.CreateProperty("AllowBypassKey", dbBoolean, False)

        CurrentDb.Properties.Append prop

'Set Property
        If MsgBox("Willst du wirklich den Bypass-Key aktivieren?", vbYesNo, "Allow Bypass") = vbYes Then
            CurrentDb.Properties("AllowBypassKey") = True
        Else
            CurrentDb.Properties("AllowBypassKey") = False
        End If

   End If

    DoCmd.OpenForm "frmMain"
    DoCmd.Close acForm, "frmLogin"

End Sub


Wenn ich den Code kompiliere, dann bringt er eben "Fehler beim Kompilieren: Sprungmarke nicht definiert" und markiert diesen Teil im Code Fett Blau

'Set Property:
      If rs!BenutzerArtID_F = 1 Then
        Dim prop As Property
        On Error GoTo SetProperty


Wie komme ich da weiter, da ich keine Ahnung vom debuggen habe :(. Danke vorab für die Hilfe.

mfg
Andreas
Grüße und Dank im voraus
Andreas

Xoar

#1
Hallo, dieser Code On Error goto SetProperty besagt, dass er bei einem Fehler zu dem Codebereich SetProperty springen soll. Da diese Fehlerbehandlung aber nicht in deinem Code auftaucht, kann er auch nirgends hinspringen.

Es müsste das End Sub am ende der Prozedur durch Exit sub ersetzt werden und dann darunter

SetProperty:
Hier kommt der Code hin, was passiert wenn ein Fehler aufgetreten ist.
End sub


Falls die Sprungmarke der Bereich in Code sein soll, der `Set Property heißt muss halt dieser Code da eingesetzt werden

MaggieMay

#2
Hallo Andreas,
Zitat von: derilzemer am Mai 13, 2016, 19:40:28
Jetzt wollte ich noch das Thema mit dem AllowBypasskey hinzufügen, da habe ich dann das Problem weil ich wohl eine Sprungmarke definieren muss
was hat das "Thema mit dem AllowBypasskey" mit dem Login zu tun?

Wenn du einen "GoTo"-Befehl einsetzt, sollte die dort angegebene Sprungmarke natürlich auch existieren.

Aber beschreibe doch bitte zunächst einmal, was (genau!) du mit dem Code bezweckst.
Ich fürchte, da gibt es noch ein paar Missverständnisse.

Wo hast du den Code denn überhaupt gefunden? Er ist in sich keineswegs stimmig.
Freundliche Grüße
MaggieMay

derilzemer

Hallo Maggie,
Zitat von: derilzemer am Mai 13, 2016, 19:40:28
Jetzt wollte ich noch das Thema mit dem AllowBypasskey hinzufügen, da habe ich dann das Problem weil ich wohl eine Sprungmarke definieren muss.
Was hat das "Thema mit dem AllowBypasskey" mit dem Login zu tun?
Wenn du einen "GoTo"-Befehl einsetzt, sollte die dort angegebene Sprungmarke natürlich auch existieren. Aber beschreibe doch bitte zunächst einmal, was (genau!) du mit dem Code bezweckst.

Wenn ich die DB so customize, dass man keinen Spezialkey wie Shift mehr hat, muss ich mir selbst als Admin diesen Weg offen halten.
Am Login hängt noch ein Benutzerstaus dran, sprich je nach User ist das ein Datenverarbeiter oder Admin. Loggt sich der Admin ein, If rs!BenutzerArtID_F = 1 Then dann kann der nach Eingabe der UserID und des Passwortes dann entscheiden, ob er den ByPassKey will oder nicht. Es handelt sich dabei also letztendlich um ein Sicherheitsfeature!
Zitat
Wo hast du den Code denn überhaupt gefunden? Er ist in sich keineswegs stimmig.

Der Code ist natürlich nur ein Detail und ist zusammen mit der Benutzertabelle meiner Meinung nach schon passend. Aber klar, das ist meine Newbie Meinung :-). Erstaunlicherweise hatte ich beim ersten tun eine andere Meldung, da sprang er da zu

Set Property
'        If MsgBox("Willst du wirklich den Bypass-Key aktivieren?", vbYesNo, "Allow Bypass") = vbYes Then
'            CurrentDb.Properties("AllowBypassKey") = True

Nachdem ich das dann noch einmal neu gemacht hatte, kam der aktuelle Fehler. Hmmm was ich da mal wieder vergessen/verbogen oder was auch immer habe?! Den Code habe ich von Steve Bishop, der eine komplett durchgängige Serie dazu gemacht hat, rund 75 Videos. Dazu hatte ich dir mal einen Link geschickt wenn du dich noch erinnern kannst. Einzig den Split der DB habe ich noch nicht gemacht, weil ich da noch unsicher bin ob das Sinn macht für den Zweck den ich verfolge.

Klassischer Login:
https://www.youtube.com/watch?v=356ylQn6kkA&list=PLYMOUCVo86jEeMMdaaq03jQ_t9nFV737s&index=56
Zugang absichern:
https://www.youtube.com/watch?v=i1n7H686bWI&list=PLYMOUCVo86jEeMMdaaq03jQ_t9nFV737s&index=59
Passwort hashing:
https://www.youtube.com/watch?v=x4FAouRZ21s&list=PLYMOUCVo86jEeMMdaaq03jQ_t9nFV737s&index=60

Gruß Andreas
Grüße und Dank im voraus
Andreas

derilzemer

Hi Xoar,
Zitat von: Xoar am Mai 13, 2016, 23:34:07
Hallo, dieser Code On Error goto SetProperty besagt, dass er bei einem Fehler zu dem Codebereich SetProperty springen soll. Da diese Fehlerbehandlung aber nicht in deinem Code auftaucht, kann er auch nirgends hinspringen.
Es müsste das End Sub am ende der Prozedur durch Exit sub ersetzt werden und dann darunter
SetProperty:
Hier kommt der Code hin, was passiert wenn ein Fehler aufgetreten ist.
End sub


Das macht Sinn :(. Ich habe jetzt mal die Zeile GoTo auskommentiert und siehe da kein meckern meihr. So einfach :-(.
Okay, das passiert, wenn man den Code "kopiert" und eben nciht vollständig versteht. Okay, das ist dann wohl so bei VBA Nichtskönner.
Zitat
Falls die Sprungmarke der Bereich in Code sein soll, der `Set Property heißt muss halt dieser Code da eingesetzt werden
Das muss ich mir noch überlegen, ob ich für den Fehlerfall was einbauen muss.

Gruß Andreas
Grüße und Dank im voraus
Andreas

derilzemer

Hi,
ich habe jetzt wie das ganze noch einmal überarbeitet und es geht jetzt auch so wie gewünscht. Es lag grundsätzlich mal wie immer ein Layer 8 Problem vor, pebkac :(.
Ob jetzt wirklich alles bedacht ist, dass zumindest keine Code Manipulation mehr stattfinden kann, bin ich mir nicht ganz sicher. Bypasskey geht nicht mehr, Optionen sind also weg. Die Ribbons und das Navigationsmenü sind weg. Welche Wege die Cracks noch so haben, das weiss ich nicht.

Gruß Andreas
Grüße und Dank im voraus
Andreas

Beaker s.a.

Hallo Andreas,
ZitatWenn ich die DB so customize, dass man keinen Spezialkey wie Shift mehr hat, muss ich mir selbst als Admin diesen Weg offen halten.
Hast du keine eigene Kopie der DB an der du arbeitest/entwickelst?
IMO spielst es keine Rolle, ob der Anwender nun Admin-Rechte an der
Anwendung hat oder nicht, - der Zugriff auf die Objekte/Tabellen der DB
sollte nur der Entwickler haben.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

derilzemer

Hi,
natürlich habe ich eine Kopie der DB. Von Anfang an bis jetzt mache ich bei jedem Entwicklungsschritt eine Versionierung.
Genau wegen der Thematik, dass nur der "Entwickler" die Rechte haben sollte, bin ich dabei die DB mehr oder minder abzuschottten.
Ich habe nur keine Erfahrung darin, welche Hintertürchen außer den bekannten sich da in Access so anbieten.
Gruß
Andreas
Grüße und Dank im voraus
Andreas

MzKlMu

Hallo,
ZitatIch habe nur keine Erfahrung darin, welche Hintertürchen
Hintertürchen gibt es jede Menge. Die Daten lassen sich bei Access nicht wirklich schützen, wer Zugriff auf eine Datenbank hat, hat auch Zugriff auf alle Tabellen.
Etwas anders sieht es bei der Oberfläche aus. Die wirksamste Methode ist das erzeugen einer ACCDE. Das ist eine komplett kompilierte Version der DB in der man keine Entwürfe ändern kann und kein VBA Code mehr sichtbar ist. Wenn man dann den anderen Anwendern (nach Möglichkeit) nur eine Runtime (gibt es kostenlos) zur Verfügung stellt, ist schon viel erreicht.
Wenn man die DB mit einer Runtime laufen lassen will, so ist allerdings erhöhter Aufwand für die Programmierung notwendig. Ausnahmslos jede Funktion/Prozedur benötigt eine Fehlerbehandlung, sonst wird bei einem Laufzeitfehler die Anwendung einfach kommentarlos beendet.
Weiterhin, ist darauf zu achten, dass die zur ACCDE gehörende Original ACCDB nicht verloren geht. Eine ACCDE kann auch für den Entwickler nicht wieder zugänglich gemacht werden. ACCDB fort > alles fort.  :D
Daher muss das so laufen
ACCDB > ACCDE
Änderungen an der ACCDB > erfordert neue ACCDE

Das Abschalten der Shifttaste (AllowBypassKey) lässt sich für jede beliebige DB völlig problemlos wieder rückgängig machen, was ich jetzt aber hier nicht weiter ausführen möchte.
Gruß Klaus

derilzemer

Hallo Klaus,
diese Option hat mir auch schon Maggie gesagt. Ich dachte mal wieder, es geht vielleicht DOCH anders :(.
Das Thema mit der Runtime muss ich wohl erst noch belesen, damit ich weiss was ich da machen muss. Das Optionale Thema Datenbanksplit stell ich mir auch "komisch" vor. Wenn man dann die DB an andere abgibt, muss man dann nicht die Verlinkungen der Tabellen ändern etc., welche ja auf den aktuellen lokalen PC ausgerichtet sind?

Gruß Andreas
Grüße und Dank im voraus
Andreas

database

Hallo,

ZitatWenn man dann die DB an andere abgibt, muss man dann nicht die Verlinkungen der Tabellen ändern etc., welche ja auf den aktuellen lokalen PC ausgerichtet sind?
Stimmt nicht ganz, die Verlinkung ist nicht auf den aktuellen lokalen PC ausgerichtet sondern vom FE aus gesehen auf das aktuelle BE.

Zitatwer Zugriff auf eine Datenbank hat, hat auch Zugriff auf alle Tabellen
Das lässt dich ein wenig 'sicherer' machen, wenn du programmierte AdHoc - Zugriffe aus einer ACCDE verwendest. Da sind dann keine Tabellen im FE sichtbar und der/die Benutzer muss/müssen nicht zwangläufig wissen wo das FE liegt.