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
ExecSQL 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"