![]() |
Datenbank: Mircosoft Access • Zugriff über: ADO
ADO Suche
'loha Folks,
ich versuche mich über ein Webinterface irgendwo einzuloggen. Beim Log-in, bei welchem Benutzername und Passwort eingegeben werden müssen, sollen die eingegebenen Daten mit jenen in einer Access Datenbank verglichen werden. Den richtigen Benutzernamen mache ich wie folgt ausfindig:
Delphi-Quellcode:
Nun soll aber der Benutzername nicht irgendwo aufgelistet werden, sondern es soll einfach verglichen werden ob der eingegebene Benutzername in der Datenbank vorhanden ist.
ADOQuery_WebinterfaceUser.SQL.Text :=
'SELECT * from WebinterfaceUser where Username is' + edtusername.Text + ';'; Wie kann ich nun, falls die Datenbankabfrage ein Ergebnis bringt, dieses mit der eingabe auf der Log-in Seite vergleichen? Grüsse hirnstroem |
Re: ADO Suche
SQL-Code:
SELECT count(*) from WebinterfaceUser where Username = :uname;
|
Re: ADO Suche
Gut, die Abfrage gibt mir ja nun den Benutzernamen zurück, aber wie kann ich mit diesem weiterarbeiten? Ich möchte nun den Benutzernamen aus der Abfrage mit jenem in meinem Loginfeld vergleichen.
Die Abfrage ist folgende
Delphi-Quellcode:
Ist meine Annahme, dass z.B. :Username eine von mir definierte Variable in Delphi ist, richtig?
SELECT Username, MD5Hash
FROM WebinterfaceUser WHERE Username = :Username AND MD5Hash = MD5Hash; :Username und :MD5Hash (wird vorher "berechnet") werden in zwei Edit Felder eingegeben (normales Login). Beim klick auf einen Anmeldebutton wird der MD5Hash erstellt (aus dem Benutzernamen und dem Passwort) und die oben aufgeführte Abfrage ausgeführt. Wie ich nun die Daten aus der Abfrage mit den Eingaben in den Edit Feldern verlgeiche bleibt mir trotzdem ein Rätsel. |
Re: ADO Suche
Hallo hirnstroem,
einen direkten Vergleich wirst du gar nicht durchführen. Wenn der Benutzername selektiert wird, dann signalisiert ein leerer result set eine fehlgeschlagene Identifizierung. Durch die Aufnahme des MD5-Hash in das Selektionskritierium wird sogar eine gesicherte Authentisierung in einer Abfrage möglich, allerdings hast du wohl in der Eile den Doppelpunkt vergessen. Grüße vom marabu |
Re: ADO Suche
Entschuldigt bitte, aber ich habe die ganze Sache noch nicht so wirklich verstanden.
Meine Prozedur für sieht folgendermassen aus:
Delphi-Quellcode:
procedure Tfrm_Login.btnloginClick(Sender: TObject);
var UsernamePasswordString: String; MD5Hash: String; Username: String; MD5DigestVar: MD5Digest; Result: Integer; begin {Begin turn password to MD5 Hash} UsernamePasswordString := edtusername.Caption + edtpassword.Caption + edtusername.Caption + edtpassword.Caption + edtusername.Caption + edtpassword.Caption; MD5DigestVar := UMD5.MD5String(UsernamePasswordString); MD5Hash := UMD5.MD5Print(MD5DigestVar); {End turn password to MD5 Hash} Username := edtusername.Caption; if (Username = '') or (MD5Hash = '') then begin WebApplication.ShowMessage('Benutzername oder Passwort eingeben'); Exit; end; {Begin check database for username andpassword} ADOQuery_WebinterfaceUser.Open; // Result := ? if not Result = 0 then begin {Start page load} if WebApplication.FindComponent('frm_Main') <> nil then begin TIWAppForm(WebApplication.FindComponent('frm_Main')).Show; end else begin Tfrm_Main.Create(WebApplication).Show; end; Release; {End page load} end; {End check databse for username and password} end;
Delphi-Quellcode:
^^ hiermit wird folgende Abfrage abgesetzt:
ADOQuery_WebinterfaceUser.Open;
SQL-Code:
Wenn Datensätze gefunden werden, bekomme ich irgendwo (aber wo genau?) einen Integer mit dem Wert 1 (falls etwas gefunden wurde, mehr als einen Datensatz mit den eingegebenen Daten wird es ja nie geben) oder 0 (wenn keiner gefunden wird), zurück.
SELECT COUNT (*)
FROM WebinterfaceUser WHERE Username = :Username AND MD5Hash = :MD5Hash; Mir fehlt jetzt einfach die Zuordnung zu der Vaiable "Result". |
Re: ADO Suche
Vielleicht so:
Delphi-Quellcode:
marabu
var
isValid: Boolean; begin // ... { Begin check database for username andpassword } with ADOQuery_WebinterfaceUser do begin Open; isValid := Fields[0].AsInteger = 1; Close; end; |
Re: ADO Suche
Vielen Dank marabu, aber es funktioniert noch immer nicht. Folgende Variante funktioniert ebenfalls nicht:
Delphi-Quellcode:
Ich bekomme nur leeres Zeug zurück, obwohl ich zu 100% sicher bin, dass die eingegebenen Daten mit jenen in der Datenbank übereinstimmen.
DBMD5Hash, MD5Hash: String;
DBUsername, Username: String; Q: TADOQuery; ... {Begin check database for username and password} Q := ADOQuery_WebinterfaceUser; with Q do begin Open; DBUsername := FieldByName('Username').AsString; DBMD5Hash := FieldByName('MD5Hash').AsString; Close; end; ... if (DBMD5Hash = MD5Hash) and (DBUsername = Username) then begin {Begin page load} ... [Edit] Natürlich mit folgender SQL-Abfrage:
SQL-Code:
SELECT Username, MD5Hash
FROM WebinterfaceUser WHERE Username = :Username AND MD5Hash = :MD5Hash; |
Re: ADO Suche
Guten Morgen.
Zitat:
Delphi-Quellcode:
Freundliche Grüße
var
MD5Hash, UserName: String; // ... begin // ... with Q do begin Parameters.ParamValues['Username'] := UserName; Parameters.ParamValues['MD5Hash'] := MD5Hash; Open; DBUsername := FieldByName('Username').AsString; DBMD5Hash := FieldByName('MD5Hash').AsString; Close; end; // ... end; marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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