Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

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

Re: Endlosschleife nur warum?

  Alt 1. Aug 2005, 06: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