Beste Lösung für Problem...



  • Hallo, ich hab mich heute gefragt, wie man folgendes Kleines Problem am "elegantesten" lösen kann?

    Hintergrund

    Altbekanntes Login wo Name und PW mit Datenbank vergleicht wird blabla...und wenn eben Name + PW richtig, wird eingeloggt mit vorher definierten Rechten.

    Sachverhalt:

    In einigen Programm 😉 ist es ja so, das der Benutzer der sich angemeldet hat sein Passwort ändern kann, er muss dann aber sein altes und neues eingeben! Ich will aber das sein Name und sein Passwort schon drin stehen in der Passwortändernform (bitte nicht über den unsinn und die unsicherheit dieser Methode meckern).

    Also muss ja von dem Login der Benutzername mitgenommen werden, das die Passwortform weiß wer eingeloggt ist!

    Frage:

    Ist es sinnvoll, den eingebenen Benutzername beim Login (sofern er Korrekt ist), zu speichern, zB in StringList oder Stream (oder was auch immer), und diesen dann automatisch beim aufruf der Passwortändernform hervorzuholen, in ein Select einbauen und abfrage starten...oder geht das noch besser oder direkter?

    PS: Gab hier schon ähnlichen beitrag...da wurde aber meineserachtens dann mehr über andere Probleme gesprochen als Topic sagte!


  • Mod

    Hallo

    hol das Passwort doch daher wo du es (fuer diesen User) gespeichert hast

    MfG
    Klaus



  • ich würde beim anlegen des users intern ne nummer pro user vergeben und die beim programmstart nach dem login speichern. als variable, array wasweisich ....



  • @ Klaus: ja das PW will ich auch aus Datenbank holen...nur muss ich beim aufruf der PWÄndern Form wissen weelcher USer angemeldet ist...also doch zwischenspeichern, zB den Name! oder?



  • Hallo

    ja, du must eben den Primary Key der Tabelle zwischenspeichern. Meistens ist das ein AutoInc-Feld, oder eben der UserName, wenn er eineindeutig ist.
    Dann kannst du per Select ... Where den Datensatz wiederfinden.

    bis bald
    akari



  • ist da die lösung mit dem primary key wirkl die beste? Od reicht es im prinzip nich eigentlich auch den name in einem MemoryStream zu speichern,,,und dann beim öffnen der PW Form zu laden und abzufragen?



  • Hallo

    wie bereits geschrieben : Wenn du sicherstellst, das jeder User, also jeder Eintrag in der Accounttabelle einen anderen Loginnamen besitzt, kannst du dir auch den Loginnamen zwischenspeichern (wozu eigentlich ein MemoryStream? Ein AnsiString reicht doch) und dann direkt weiterverwenden.

    bis bald
    akari



  • Ahhhhhh ⚠ ⚠

    Das hab ich natürlich garnicht beachtet...hm....mmuss ich mir nomma durchn kopf gehen lassen! 🕶



  • mich würde das mal mit dem Key interessieren, kann mir das mal jemand zeigen?
    @5er1al/akaria oder sonst wer?

    Also wie kann ich mein Selectergebniss (solang nur eins), als Key speichern?



  • Hallo

    Was gibt es da groß zu zeigen?
    Nehmen wir mal an, ein User benutzt Account X mit Loginname und Passwort, die du per Select überprüft

    Select ID,Name,Password From Account Where Name = '<WertN>' And Password = '<WertP>'
    

    dann bekommst du entweder genau einen Datensatz oder keinen -> Fehlermeldung wegen falscher Eingabe.
    Dann speicherst du entweder ID oder Name (jedenfalls einen eindeutigen Wert) zwischen.
    Mußt du später auf denn Account zugreifen, denn der User benutzt hat, reicht dann einer der beiden Abfragen

    Select ID,Name From Account Where Name = '<WertN>'
    Select ID,Name From Account Where ID = '<WertID>'
    

    um diesen Account zu finden.

    bis bald
    akari



  • aber wie mach ich das mit SetKey und GotoKey??



  • Hallo

    das brauchst du gar nicht. du arbeitest direkt mit TQuery.
    Bei der ersten Abfrage liest du den Inhalt den ID-Feldes aus :

    int ValueID;
    ...
    ValueID = TQuery->FieldByName("ID")->AsInteger; // Wenn ID-Feld ein 
    // AutoInc-Feld ist
    

    ValueID sollte z.B. eine Member-Variable deines Hauptforms sein, damit du später darauf zugreifen kannst.
    Um den Datensatz wiederzufinden, erstellt du dann diese Abfrage

    AnsiString QueryString = "Select ID,Name From Account Where ID = '" + IntToStr(ValueID) + "'";
    

    mit dem du dann eine TQuery öffnen kannst.

    bis bald
    akari



  • Kannst mir das trotzdem mal erklären...weil ich soviel tumprobiert habe, habs aber einfach nicht geschafft mit dem Key, da interessiert mich das!

    Vielleicht kannst noch zu deinem jetztigen Beispiel mal eine erklärung geben?
    Wäre lieb, danke!


Anmelden zum Antworten