![]() |
Endlosschleife nur warum?
Warum stecke ich hier in einer Endlosschleife?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,a1,b1,s : string; var flag : byte; begin a := edit1.text; b := edit2.text; s := 'select Name,Passwd from ausbilderlogin'; query1.close; Query1.Sql.Clear; Query1.Sql.Add(s); Query1.ExecSQL; Query1.Active:=true; Query1.First; while not Form1.Query1.Eof do begin a1:= query1.Fieldbyname ('Name').AsString; b1:= query1.Fieldbyname ('Passwd').AsString; if (a = a1) and (b = b1) then flag := 1 else query1.Next; end; if flag <> 1 then showmessage('Falscher Loginname oder Passwort'); if flag = 1 then showmessage('Sie sind nun als '+a+' eingeloggt!'); end; |
Re: Endlosschleife nur warum?
Hallo,
wenn die Bedingung (a = a1) and (b = b1) erfüllt ist tritt Deine Schleife, weil kein Query.Next mehr kommt, auf der Stelle. |
Re: Endlosschleife nur warum?
flag würde ich als boolean nehmen.
Delphi-Quellcode:
flag := false;
while not Form1.Query1.Eof {or not flag} do begin a1 := query1.Fieldbyname('Name').AsString; b1 := query1.Fieldbyname('Passwd').AsString; flag := (a = a1) and (b = b1); query1.Next; //wurde bei dir nicht mehr aufgerufen, wenn die obere bedingung erfüllt war end; |
Re: Endlosschleife nur warum?
Hai suby,
ersteinmal: "Herzlich Willkomen in der Delphi-PRAXiS" :-D Warum Du eine Endlosschleife hast wurde ja schon erklärt. Aber ich habe noch zwei grundsätzliche Anmwerkungen zu deinem Code ;-) a) Du verwendest sowohl ![]() ExecSQL wird nur verwendet wenn man von einem SQL-Befehl keine Ergebnissmenge zurück bekommt. Zum Beipspiel bei INSERT und UPDATE Anweisungen. Open bzw. Active:=true wird verwendet wemm man etwas zurück bekommt (SELECT Anweisung). Beides zusammen macht also keinen Sinn ;-) b) Ich würde die gesamte Abfrage anders machen. Eigentlich möchtest Du doch folgendes wissen: "Gibt es in der Tabelle einen Eintrag mit Benutzername = X und Passwort = Y. Also, dann fragen wir das doch auch genau so die Datenbank.
Delphi-Quellcode:
P.S.:
function TForm1.CheckUserName(const aName, aPassword: string): boolean;
begin try with Query1 do begin Close; SQL.Text := 'SELECT COUNT(*) FROM ausbilderlogin ' + #10 + 'WHERE name = :pname AND passwd = :ppassword'; ParamCheck := True; ParamByName('pname').AsString := aName; ParamByName('ppassword').AsString := aPassword; Open; Result := Fields[0].AsInteger = 1; Close; end; except Result := False; end; end; procedure TForm1.Button1Click(Sender: TObject); var user: string; passwort: string; begin user := Edit1.Text; // passwort := MD5_Hash2String(MD5_String(Edit2.Text)); passwort := Edit2.Text; if CheckUserName(user,passwort) then begin ShowMessage(Format('Sie sind nun als %s eingeloggt',[user])); end else begin ShowMessage('Falscher Loginname oder Passwort'); end; end; Kennwörter sollten nie im Klartext in der Tabelle stehen. Verwende dafür lieber einen (MD5)-Hash. |
Re: Endlosschleife nur warum?
Vielen Dank für eure Hilfe, habe die Endlosschleife nun endlich weg bekommen durch eure Hilfe
THX Scuby |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz