Neuigkeiten:

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

Mobiles Hauptmenü

Anmeldung/Registrierung mit VBA

Begonnen von AccessNewbie2013, Juni 08, 2013, 10:42:40

⏪ vorheriges - nächstes ⏩

AccessNewbie2013

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

bahasu

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
Servus

DF6GL

#2
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.....

AccessNewbie2013

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?

AccessNewbie2013

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]

DF6GL

#5
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...





AccessNewbie2013

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.

AccessNewbie2013

Ich würde meine DB ja mal hochladen, aber ich krieg sie nicht auf 200 kb.  :(

bahasu

Servus

AccessNewbie2013


bahasu

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
Servus

bahasu

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
Servus

AccessNewbie2013

Sorry, aber das ist einfach LÄCHERLICH!

bahasu

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

Servus

AccessNewbie2013

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!