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!
-
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üftSelect 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 AbfragenSelect 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 istValueID sollte z.B. eine Member-Variable deines Hauptforms sein, damit du später darauf zugreifen kannst.
Um den Datensatz wiederzufinden, erstellt du dann diese AbfrageAnsiString 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!