AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Endlosschleife nur warum?

Ein Thema von scuby · begonnen am 31. Jul 2005 · letzter Beitrag vom 3. Aug 2005
Antwort Antwort
scuby

Registriert seit: 31. Jul 2005
122 Beiträge
 
#1

Endlosschleife nur warum?

  Alt 31. Jul 2005, 22:22
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;
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Endlosschleife nur warum?

  Alt 31. Jul 2005, 22:28
Hallo,
wenn die Bedingung (a = a1) and (b = b1) erfüllt ist tritt Deine Schleife, weil kein Query.Next mehr kommt, auf der Stelle.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Endlosschleife nur warum?

  Alt 1. Aug 2005, 04:56
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;
Thomas H.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Endlosschleife nur warum?

  Alt 1. Aug 2005, 07:01
Hai suby,

ersteinmal: "Herzlich Willkomen in der Delphi-PRAXiS"

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 Delphi-Referenz durchsuchenExecSQL als auch Active:=true; (Open).
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:
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;
P.S.:
Kennwörter sollten nie im Klartext in der Tabelle stehen. Verwende dafür lieber einen (MD5)-Hash.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
scuby

Registriert seit: 31. Jul 2005
122 Beiträge
 
#5

Re: Endlosschleife nur warum?

  Alt 3. Aug 2005, 18:33
Vielen Dank für eure Hilfe, habe die Endlosschleife nun endlich weg bekommen durch eure Hilfe

THX
Scuby
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz