Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: AccessNewbie2013 am Juni 08, 2013, 10:42:40

Titel: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 10:42:40
Hallo,

ich bin in Access ein ziemlicher Neuling und komme mit der Anmeldung nicht mehr weiter. Für ein Schulprojekt im Rahmen von AccessVBA soll ich ein Filmbewertungsportal erstellen. Die DB steht so weit auch und es funktioniert auch alles soweit, nur eben die Anmeldung nicht.

Als Startbildschirm gibt es die Möglichkeit sich entweder als Admin anzumelden, welcher "alles" in der DB darf oder als registrierter Benutzer, welcher Filme aus der Liste auswählen und auch bewerten darf.

Des Weiteren gibt es die Möglichkeit sich als Gastnutzer anzumelden, welcher aber lediglich Infos und Bewertungen/Kommentare von Filmen lesen darf, nicht aber selbst bewerten/kommentieren darf.

Zu guter Letzt gibt es noch die Möglichkeit sich zu registrieren, wobei die Mail-Adresse = Nutzername sein soll, da zuerst eine E-Mail an den Admin geht, welcher den jeweiligen Nutzer erst freischalten muss.

Es geht in erster Linie darum dass ich drei Textfelder habe. In das erste Textfeld soll eine gültige E-Mail-Adresse geschrieben werden, in das zweite Textfeld kommt das Passwort und in das dritte Textfeld die Wiederholung des Passworts. Über den Button Abschicken, soll zunächst geprüft werden ob die beiden Passwörter übereinstimmen. Ist dies der Fall, soll ein Datensatz in der Tabelle "tBenutzer" angelegt und eine Mail an den DB-Admin geschickt werden. Noch bevor der Datensatz gespeichert wird, soll das Passwort in einen MD5 Hash umgewandelt werden (und so auch gespeichert werden).

Hier mal ein Bsp. Code, den ich von meinem Projektbetreuer bekommen habe. Dieser Code soll die beiden Passwörter überprüfen:
Function auth(ByRef freigabe As Boolean)
If Len(txtKennwort) > 0 And Len(cmdAnmelden) > 0 Then
    vglpw = DLookup("passwort", "benutzer", "login ='" & cmdAnmelden & "'")
    If vglpw = DigestStrToHexStr(txtKennwort) Then
        freigabe = True
        'MsgBox "OK"
    Else
        freigabe = False
        MsgBox "Benutzername oder Kennwort falsch!"
    End If
Else
    MsgBox "Unvollständige Angaben!"
End If
End Function


Und mit folgendem Code-Beispiel soll eine Mail verschickt werden:
Option Compare Database

Option Compare Database

Sub emailversand()
Set EMail = CreateObject("CDO.Message")

With EMail
    .From = "absender@absender.de"
    .To = "name @gmx.de"
    .Subject = "Betreff"
    .TextBody = "Dies ist eine Access-Testmail"
    With .Configuration.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.absender.de"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "benutzername" '"vlw_rlp@eduinf.de" 'web415p4
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "passwort"
        'ZUSÄTZE:
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
        .Update
    End With
    .Send
End With

End Sub


Ich habe beide Code-Fragmente in das Klick-Ereignis des Buttons geschrieben, weil ja beides mit einem Klick ausgelöst werden soll.
Allerdings bekomme ich immer die Fehlermeldung das ein "End Sub" fehlt, obwohl ich eins drin stehen haben.
Und ich glaube von meinen Anpassungen stimmt auch noch was nicht.

Ich hoffe ich habe alles einigermaßen verständlich erklärt und das mir jemand ein paar Tipps geben kann.

Gruß
AccessNewbie2013
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: bahasu am Juni 08, 2013, 11:08:12
Hi,

Zitat von: AccessNewbie2013 am Juni 08, 2013, 10:42:40
Ich habe beide Code-Fragmente in das Klick-Ereignis des Buttons geschrieben, weil ja beides mit einem Klick ausgelöst werden soll.
ewbie2013

In das Klick-Ereignis schreibst Du den Aufruf der beiden Programmteile.

In der Art:
call auth ' warum Du hier einen Wert übergibst hat sich mir nicht erschlossen.
call emailversand

Harald
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: DF6GL am Juni 08, 2013, 11:09:36
Hallo,

ZitatIch habe beide Code-Fragmente in das Klick-Ereignis des Buttons geschrieben, weil ja beides mit einem Klick ausgelöst werden soll.

Das funktioniert SO nicht...

Bei einem Klick auf ein Steuerelement (z. B. einen Button) wird die dazugehörende und fest benamste Ereignisprozedur aufgerufen, z. B.:


Sub btnButton_Click()
.
.
.
End Sub


Wenn also die Funktion "auth"  ausgeführt werden soll, dann muss das so lauten:

Sub btnButton_Click()
Dim freigegeben as Boolean
auth freigegeben
End Sub


Die Funktion selber muss im gleichen Klassenmodul wie die Ereignisprozedur stehen, weil darin auf Formular-Textfelder referenziert wird.


Gleiches gilt für die Sub emailversand(), wenn darin auch Formular-Textfelder Anwendung finden.

Normalerweise werden solche Funktionen/Subs in ein Standard-Modul platziert und Variablen mittels Übergabeparameter an die Funktions-Argumente übergeben.

Ich gehe jetzt nicht auf weitere Unzulänglichkeiten am Code und der Konstruktion ein, die eigentlich korrigiert werden sollten.


(Referenzierung der Formular-Steuerelemente, Verwendung globaler Variablen anstatt Übergabeparameter wie auch "magic numbers", bzw. "magic strings"  in Form von Literal-Konstanten usw.)






PS: Crossposting ist allerdings nicht so gern gesehen.....
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 11:34:01
Hallo,

das klingt ja doch alles ziemlich kompliziert. Wie schon kurz erwähnt sind diese Code-Fragmente lediglich Beispiele die ich an meine DB anpassen muss.
Was Access angeht bin ich eben noch ein Neuling und von VBA habe ich auch so gut wie keine Ahnung.

ZitatNormalerweise werden solche Funktionen/Subs in ein Standard-Modul platziert und Variablen mittels Übergabeparameter an die Funktions-Argumente übergeben.

Also wenn ich das jetzt richtig verstehe, "lagere" ich meine beiden Funktionen in ein Modul aus und übergebe lediglich die beiden Variablen an das Klickereignis?

Hinzu kommt noch (habe ich vergessen zu erwähnen), dass das Passwort, bevor is in der Tabelle gespeichert wird in einen MD5 Hash umgewandelt werden soll.
Das würde ich dann ja auch "auslagern" oder?
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 12:03:18
So, ich hab jetzt versucht mal ein wenig "aufzuräumen" und die einzelnen Code-Fragmente, in einzelne Module gepackt.
Oder ich muss ich alles in ein Modul packen?

Und in cmdAbschicken dieses "Call auth" bzw. "Call emailversand" geschrieben.

War das so gedacht? Ich hänge mal ein Bild an.

Und nochmals: Ich habe von VBA absolut keine Ahnung, also bitte entschuldigt, wenn ich ich nicht alles sofort richtig umsetze.

[Anhang gelöscht durch Administrator]
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: DF6GL am Juni 08, 2013, 12:12:16
Hallo,


naja, wenn Du so gar keine Ahnung von VBA hast, das wäre es insgesamt ratsam, sich erst mit den VBA - Grundlagen auseinanderzusetzen. Ohne die kommst Du nicht aus...  Und Du lernst das auch nicht, wenn ich (oder wir) den Code "vorbeten" und jede Kleinigkeit bei der Umsetzung korrigieren müssen.

Prinzipiell gilt: Allgemeine Prozeduren kommen in ein oder mehrere Standardmodule (dort sind sie von "überall" aus dem Code"sichtbar").  Die für den Ablauf nötigen Variablen werden den Prozeduren per Übergabeparameter übergeben.  (Stichwort "Scope" oder Gültigkeitsbereich). Ein Funktion besitzt zudem einen Rückgabewert (im Gegensatz zu einer Sub), der dann entsprechend in aufrufenden ode weiterverarbeitet werden kann.


Die Ereignisprozedur-Situation habe ich schon angedeutet.

PS:   Ja, in diese Richtung geht es.
Und schreib in JEDEM Modulkopf unterhalb   Option Compare Database  

Option Explicit


dazu...




Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 12:21:15
Hallo,

natürlich hast dur Recht mit den VBA-Grundlagen, das Problem ist nur das meine DB eine Projektarbeit, welche ich am Montag vorstellen muss.
Soweit hat ja auch alles geklappt, hab mit dem VBA-Code den ich drin hab, klar das ist nicht viel und nix kompliziertes.
Allerdings will mein Projektbetreuer halt diese Anmeldung drin haben und er hat mir ja auch diesen Beispiel-Code gestern noch geschickt, aber ich komme damit halt in der Kürze der zeit nicht mehr klar.

Deswegen habe ich mich ja, quasi aus Verzweiflung, an dieses Forum gewandt.
Ich hätte auch nicht gedacht, dass es doch so kompliziert ist.
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 12:47:53
Ich würde meine DB ja mal hochladen, aber ich krieg sie nicht auf 200 kb.  :(
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: bahasu am Juni 08, 2013, 15:39:27
Hi,
Zitat von: DF6GL am Juni 08, 2013, 11:09:36
PS: Crossposting ist allerdings nicht so gern gesehen.....

alias: nmjgerhögo auf: http://www.ms-office-forum.net/forum/showthread.php?p=1516921

Harald
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 16:19:36
Ja und, wo ist das Problem?
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: bahasu am Juni 08, 2013, 16:39:46
Hi,

Zitat von: AccessNewbie2013 am Juni 08, 2013, 16:19:36
Ja und, wo ist das Problem?

Auf Deiner Seite auf dem ersten Blick: keins

Auf der Seite der Antwortgeber schon, da die, wie in etlichen Beiträgen bemerkt, unabhängig von einander an selben Thema arbeiten. Wenn dafür Geld zu zahlen wäre, würdest Du das vermutlich nicht machen wollen. Aber da wir das in unserer Freizeit machen, kann das ja egal sein?

Da es zumindestens mir nicht egal ist:
Auf Deiner Seite auf dem zweiten Blick: Problem wird sein, dass es es weniger Antworten gibt, da keiner unnütze doppelte Arbeit machen will.

Harald
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: bahasu am Juni 08, 2013, 16:41:57
Hi,

und zum Thema Crossposting siehe auch:
http://www.access-o-mania.de/index.php?ind=community&op=netiquette
Crossposting, d.h. das Posten der gleichen Frage in mehreren Foren zur gleichen Zeit, ist unerwünscht.

Harald
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 16:47:56
Sorry, aber das ist einfach LÄCHERLICH!
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: bahasu am Juni 08, 2013, 17:23:04
Hi,

Zitat von: AccessNewbie2013 am Juni 08, 2013, 16:47:56
Sorry, aber das ist einfach LÄCHERLICH!

Meinst Du damit die Forenregeln, die ich oben zitiert habe und die Du bei Deiner Anmeldung akzeptiert hast?

Zum Thema Crossposting gibt es auch von anderen Leuten kritische Meunugen:
http://das-excel-forum.de/cross.htm
http://www.access-o-mania.de/forum/index.php?topic=14895.msg85540#msg85540

Harald

Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 17:44:07
Okay, du hast Recht, bin das erste mal aktiv in solchen Foren unterwegs.
Und der Begriff Crossposting war mir jetzt auch nicht geläufig.

Ich erkläre aber trotzdem kurz warum ich das in zwei Foren gepostet habe, es war einfach Verzweiflung.
Meine DB ist, wie ich ja schon erklärt habe ein Schulprojekt und eigtl sollte diese DB ohne Anmeldung laufen.
Aber gestern bekam ich eine Mail von meinem Projektbetreuer das ich das ganze doch mit einer Anmeldung versehen sollte.
Und er hat mir o.g. Code-Fragmente geschickt, die ich anpassen sollte. Aber wie gesagt komme ich damit einfach nicht klar.

Und das Problem an der Sache ist einfach, das ich die DB breits am Montag abgeben muss und nach dem ich in dem anderen Forum
keine brauchbare Rückmeldung bekommen habe, habe ich halt in diesem Forum noch mal gepostet, dachte ja nicht dass das ein Problem ist.

Also Entschuldigung dafür, war nicht böse gemeint oder so was!
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: bahasu am Juni 08, 2013, 18:01:04
Hi,

danke für die Info.

Zitat von: AccessNewbie2013 am Juni 08, 2013, 12:47:53
Ich würde meine DB ja mal hochladen, aber ich krieg sie nicht auf 200 kb.  :(

Datenbank mit einige Spieldaten sollte reichen.

Erste Maßnahme: Komprimieren und Reparieren im access Menü aufrufen.
Dann die Datei in gezippter Version (aber bitte im access 2003 Format, andere kann ich nicht lesen) hier reinstellen.

Oder kann es sein, dass Grafiken, Bilder, Logos enthalten sind?
Wenn ja bitte diese entfernen!

Harald
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 08, 2013, 18:20:32
Hallo,

leider kann ich meine DB nicht als 2003 Version abspeichern, "...da in ihr Feature verwendet werden, für die das aktuelle Dateiformat erforderlich ist"
Und gezippt bekomm ich sie auf maximal 457 KB, mit einem abgespeckten Formular und einer Tabelle.

:'(

Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: bahasu am Juni 09, 2013, 10:32:37
Hi,

in Ermangelung von konkreten Angaben zu Tabellen, Beziehungen, Formularen habe ich ein paar Annahmen getroffen und einen Vorschlag entwickelt (ist unter a2003 in gezippter Version nur 20 kb lang!).

Es gibt ein popup-Formular (wird noch nicht automatisch aufgerufen, ist aber über ein autoexec-Makro machbar), in dem im ungebundenen Kombifeld ausgewählt wird, ob Admin, Benutzer oder Gast.
Nach Eingabe eines Kennwortes wird geprüft:
a) Kennwort stimmt überein => Button "Weitermachen" wird angezeigt. Dort müßte eine Routine zum Öffnen eines weiteren Formulars hinterlegt werden
b) stimmt nicht überein => weitere Felder werden angezeigt: Benutzer_Name und zweimal ungebundene Email-Adresse (ohne jegliche Prüfung, ob der Eintrag einer Email-Adresse entspricht).
Wenn bei b) korrekte Angaben vorliegen, wird ein Button "Registrierungsdaten absenden" angezeigt. Nach Klicken darauf werden die Eingaben gesichert und eine Email abgesendet (ist zur Zeit deaktiviert,da die Routinen unvollständig im ersten Beitrag gelistet wurden).


Harald

[Anhang gelöscht durch Administrator]
Titel: Re: Anmeldung/Registrierung mit VBA
Beitrag von: AccessNewbie2013 am Juni 09, 2013, 13:31:45
Hi,

super, vielen Dank für deine Mühe, ich werde gleich versuchen das ganze umzusetzen.