Passwortabfrage mit MFC



  • wo ist denn nun genau dein problem?

    anscheinend kommst du nicht weiter, dann rede hier nicht um den heissen brei herum, sondern versuch doch einfach die tatsachen zu präsentieren. wenn du etwas nicht verstehst, oder nicht weisst, welche befehle das sein müssen, etc. dann beschreib einfach das, was du vor hast.

    Wisst Ihr irgetwie verstehe ich nicht wie man das ganze noch verständlicher Fragen soll, denke habe es es klar ausgedrückt und nicht um den Brei geredet,
    Die Frage ist ganz einfach :
    Wie setze ich in MFC die Passwortabfrage in den Code ein ist das so schwer zu verstehen?
    Ich habe eine Oberfläche Textfeld und Eingabefeld in das Eingabefeld soll die Eingabe des im Code stehenden Passworts erfolgen klar soweit?
    Nun wie bringe ich das Passwort ( egal wie es heisst) das vorgegeben ist vom Programmierer in den Code des Eingabefenster unter?
    Punkt 2
    Der Benutzer darf nur dreimal das gespeicherte Passwort falsch eingeben, beim vierten mal soll Programmabruch erfolgen, mit einer msgbox Ausgabe (text ist ned Wichtig)
    Wenn da nun wieder so Antworten kommen ich rede um den Brei frage ich mich ob hier wirklich Programmierer im Forum sind, denn die Frage im ersten Thread ist klar und deutlich gestellt, habe es meiner Tochter lesen lassen die ist nicht vom Fach die wusste was ich meine, mit meiner Frage.
    Wenn Ihr Sie nicht beantworten könnt sagts gleich denn dann bin ich falsch hier



  • Ist besser wir lassen das, in der Zeit die ich hier mit Erklärungen verbringe kann ich mich auch anderweitig Informieren, danke für euere Mühe
    Weiterhin viel Spass und bye

    Admin bitte meinen Benutzernamen löschen



  • oder so, das ist auch eine möglichkeit. bleibt natürlich jedem frei, ob man posten will oder nicht. allerdings wäre es vielleicht sinnvoller gewesen, vorher zu überlegen, ob man die so kostbare zeit opfert oder nicht.



  • Ich will diesen Beitrag mal aufnehmen, weil er genau mein Problem beinhaltet. Schade eigentlich, dass der so schnell aufgegeben hat... Egal!

    Also:
    Ich soll einen Login erstellen. Dabei sollen User-Name und Passwort mit dem Eintrag in einer Access 97-DB (per DAO) verglichen werden und dann weiter zum nächsten Fenster, wenn der Login OK ist. Wenn die Eingaben falsch sind, soll ne MessageBox kommen.
    Mein Problem dabei ist jetzt, dass ich nicht weiss, wie ich die Abfrage an die DB gestalten muss. Ich würde das über ein SQL-Statement machen, weiss aber nicht wie und wo und überhaupt....

    Ich hab von C++ so gut wie keine Ahnung!

    Vielleicht kann mir ja jemand weiter helfen... 😕



  • hi
    das ist ganz einfach du kannst das z.b. so machen :

    CDaoRecordset Rs(Datenbank);

    Rs.execute("select password from tabelle where user=klaus");
    Rs.GetFieldValue(0,var);

    dann bekommst du von user klaus das password und kannst es ganz einfach mit dem password vergleichen was du eingegeben hast



  • Rs.execute("select password from tabelle where user=klaus");

    Wie kann ich in dem SQL anstatt "Klaus" einen Namen angeben, der vorher über eine Abfrage ermittelt wird. Ist es möglich die entsprechende Membervariable einzusetzen? Also, dass das dann ungefähr so aussieht:

    Rs.execute("select Password from tabelle where user = m_user_name")



  • Rs.execute("select Password from tabelle where user = '" + m_user_name + "'")
    wobei '" == ' und "
    und "'" == " und ' und "

    Test:
    ΣΩΨ



  • Hab jetzt ein bisschen rumprobiert und verschiedene Fehlermeldungen bekommen. Nur gelaufen ist es nie!

    Hier mal ein Beispiel:

    rs.execute("select Password from tabelle where user_name = '" + m_User_Name + "'");

    Da kommt die Fehlermeldung, dass execute kein Element von CDaoRecordset ist. Wie könnte ich diesen Fehler beheben?

    Dann habe ich noch folgende Möglichkeit gefunden:

    rs.Open(AFX_DAO_USE_DEFAULT_TYPE, "select Passwort from tabelle where User_Name = '" + m_User_Name + "'", 0);

    Da kommt zwar keine Fehlermeldung für den Code selbst, aber beim Erstellen, kommt die Meldung, dass der Vorgang "read" nicht auf den Speicher augeführt werden kann. Liegt das an der DB oder woher könnte das kommen und wie kann ich es vermeiden???

    Danke für eure bisherige Hilfe!!!



  • Hi,

    Vielleicht könnt ihr mir ja jetzt nochmal helfen.
    Ich habe keine Fehlermeldung mehr, aber trotzdem läuft nix! Vielleicht bin ich auch blind geworder oder hab nen totalen Blackout...

    Hier mal der Code:

    CDaoDatabase db;
    	db.Open("C:\\Database.mdb");
    
    	CDaoRecordset rs(&db);
    	COleVariant m_vPasswort;
    	CString m_strPasswort;
    
    	rs.Open(AFX_DAO_USE_DEFAULT_TYPE, "Select Passwort From Tabelle_User Where User_Name = '" + m_EditName + "'", 0);
    	rs.GetFieldValue(0, m_vPasswort);
    
    	// Datentypumwandlung von COleVariant (m_vPasswort) in CString (m_strPasswort)
    	m_vPasswort.ChangeType(VT_BSTR);
    	m_strPasswort = m_vPasswort.bstrVal;
    
    	if(strcmp(m_EditPasswort,m_strPasswort) == 0)
    	{
    		MessageBox("Login erfolgreich");
    	}
    	else
    	{
    		MessageBox("Login fehlgeschlagen");
    	}
    
    	rs.Close();
    	db.Close();
    

    Ich denke, dass es an dem dynamischen SQL hängt. Wenn ich anstatt der Variable einen richtige Namen einsetze, geht es zumindest in die If-anweisung, macht da aber nicht so richtig das was es soll, sondern gibt immer "Login Fehlgeschlagen" aus, obwohl die Daten in der Datenbank vorhanden sind...
    Die IF-Anweisung ist da nur zu Test-Zwecken, ob die Abfrage wirklich klappt. Eine richtige Anweisung kommt später!



  • nur so ein kleiner tipp:
    es ist sehr umständlich wie du das mit der passwortabfrage planst. (wenn du das überhaupt geplant hast.)

    probier mal so etwas wie:
    select * from tabelle where user = ### and pwd = ###;

    falls du da einen datensatz zurückbekommst, hast du deinen login, ansonsten sind die angaben falsch.

    desweiteren, kontrolliere mal die werte der eingabe. führst du UpdateData aus?
    debugge doch mal, und controlliere ob auch alles funktioniert.

    starte ebenfalls einen versuch mit statischen werten und versuch z.b. name und passwort in einer AfxMessageBox auszugeben.

    kurz: versuch doch selber mal nachzudenken, ob da etwas falsch läuft. ich meine, wenn du schon so weit bist, dass du mehr als ein paar zeilen code schreiben kannst, und nicht einfach copy paste machst, dann wirst du doch auch in der lage sein, zu kontrollieren, ob alle elemente, die dir vertraut sind, auch so funktionieren, wie erwartet.

    so etwas nennt man debuggen. glaube ich.


Anmelden zum Antworten