AGB  ·  Datenschutz  ·  Impressum  







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

ADO Suche

Ein Thema von hirnstroem · begonnen am 4. Sep 2006 · letzter Beitrag vom 6. Sep 2006
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

ADO Suche

  Alt 4. Sep 2006, 15:05
Datenbank: Mircosoft Access • Zugriff über: ADO
'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:
  ADOQuery_WebinterfaceUser.SQL.Text :=
    'SELECT * from WebinterfaceUser where Username is' + edtusername.Text +
    ';';
Nun soll aber der Benutzername nicht irgendwo aufgelistet werden, sondern es soll einfach verglichen werden ob der eingegebene Benutzername in der Datenbank vorhanden ist.

Wie kann ich nun, falls die Datenbankabfrage ein Ergebnis bringt, dieses mit der eingabe auf der Log-in Seite vergleichen?

Grüsse
hirnstroem
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ADO Suche

  Alt 4. Sep 2006, 15:08
SELECT count(*) from WebinterfaceUser where Username = :uname;
Markus Kinzler
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#3

Re: ADO Suche

  Alt 5. Sep 2006, 11:00
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:
SELECT Username, MD5Hash
FROM WebinterfaceUser
WHERE Username = :Username
AND MD5Hash = MD5Hash;
Ist meine Annahme, dass z.B. :Username eine von mir definierte Variable in Delphi ist, richtig?

: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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: ADO Suche

  Alt 5. Sep 2006, 11:23
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
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ADO Suche

  Alt 5. Sep 2006, 12:57
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;
ADOQuery_WebinterfaceUser.Open; ^^ hiermit wird folgende Abfrage abgesetzt:

SQL-Code:
SELECT COUNT (*)
FROM WebinterfaceUser
WHERE Username = :Username
AND MD5Hash = :MD5Hash;
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.

Mir fehlt jetzt einfach die Zuordnung zu der Vaiable "Result".
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: ADO Suche

  Alt 5. Sep 2006, 13:38
Vielleicht so:

Delphi-Quellcode:
var
  isValid: Boolean;
begin
  // ...
{ Begin check database for username andpassword }
  with ADOQuery_WebinterfaceUser do
  begin
    Open;
    isValid := Fields[0].AsInteger = 1;
    Close;
  end;
marabu
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#7

Re: ADO Suche

  Alt 5. Sep 2006, 14:14
Vielen Dank marabu, aber es funktioniert noch immer nicht. Folgende Variante funktioniert ebenfalls nicht:


Delphi-Quellcode:
  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}
  ...
Ich bekomme nur leeres Zeug zurück, obwohl ich zu 100% sicher bin, dass die eingegebenen Daten mit jenen in der Datenbank übereinstimmen.

[Edit]

Natürlich mit folgender SQL-Abfrage:

SQL-Code:
SELECT Username, MD5Hash
FROM WebinterfaceUser
WHERE Username = :Username
AND MD5Hash = :MD5Hash;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: ADO Suche

  Alt 6. Sep 2006, 07:08
Guten Morgen.

Zitat von hirnstroem:
Ist meine Annahme, dass z.B. :Username eine von mir definierte Variable in Delphi ist, richtig?
Die mit einem Doppelpunkt gekennzeichneten Token sind Parameternamen. Wahrscheinlich hast du die Parameter noch garnicht initialisiert. So könnte es funktionieren:

Delphi-Quellcode:
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;
Freundliche Grüße

marabu
  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 04:56 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