Entwickler-Ecke

Datenbanken - Benutzer mit passwortabfrage


Müscha - Mo 17.04.06 21:40
Titel: Benutzer mit passwortabfrage
tach,

es sind benutzer mit passwort in einer Accessdatenbank geschrieben worden.

nun soll abgefragen werden ob user und passwort übereinstimmen, nach suchen im archiv bin ich auf sowas gestoßen und hab es bisschen optimiert, aber es hakt irgendwo, weiß einer warum?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button6Click(Sender: TObject);
var name, pw:string  ;

begin

 name:=edname.Text;
 pw:=edpw.text;


 with form2 do begin

   Query1.Active := False;
   Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + '''name''' + ' AND Passwort = ' + '''pw''';
   Query1.Active := True;
 end;

 IF form2.Query1.EOF THEN showmessage('keiner da'// Kein Benutzer vorhanden
 else form2.Show;

end;
end.


dankeschön

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


sekzero - Mo 17.04.06 22:03

Ich hab da zwar keine ahnung von aber muss das "Query1.Active := False;" nicht True und das Query1.Active := True; auf False?
Weil wenn ich das richtig verstehe beendest du die Verbindung und willst dann was übertragen und verbindest am Ende ?


Müscha - Mo 17.04.06 22:07

mhhh ändert auch nix, egal ws ich da mache, es kommt immer nur di showmessage und nix weiter , trotzdem danke :beer:


bis11 - Mo 17.04.06 22:13

user profile iconMüscha hat folgendes geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button6Click(Sender: TObject);
var name, pw:string  ;

begin

 name:=edname.Text;
 pw:=edpw.text;


 with form2 do begin

   Query1.Active := False;
   Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + '''name''' + ' AND Passwort = ' + '''pw''';
   Query1.Active := True;
 end;

 IF form2.Query1.EOF THEN showmessage('keiner da'// Kein Benutzer vorhanden
 else form2.Show;

end;
end.



Probiere mal folgendes :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button6Click(Sender: TObject);
var name, pw:string  ;

begin

 name:=edname.Text;
 pw:=edpw.text;


 with form2 do begin

   Query1.Active := False;
   Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + '''name''' + ' AND Passwort = ' + '''pw''';
   Query1.SQL.Open;
   Query1.Active := True;
 end;

 IF form2.Query1.EOF THEN showmessage('keiner da'// Kein Benutzer vorhanden
 else form2.Show;

end;
end.


Müscha - Mo 17.04.06 22:19

also query1.sql.open kann schon mal gar nicht funktionieren und da hab ich eben query1.open probiert und es ändert sich nix.


ist da irgendwo ein logischer Fehler? denn es kommt immer nur die showmessage...


bis11 - Mo 17.04.06 22:24

Jetzt mal zwei ganz dumme Fragen gestellt.

1.) Du hast eine Verbindung zur Datenbank ?
2.) Deine Query1 ist auch mit der Datenbank verbunden ?

Denn ich mache meine Abfragen so :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  with IBDataModule.IBDBBasketDetail do begin
    SQL.Clear;
    SQL.Add('SELECT * FROM ' + postkorb + ' WHERE Auftragsnr=' + QuotedStr(detailsrch) + ';');
    Open;
    Active := true;
    Nachname.Caption := Fields[6].AsString;
    Vorname.Caption := Fields[5].AsString;
    Strasse.Caption := Fields[7].AsString;
    PLZ.Caption := IntToStr(Fields[8].AsInteger);
    Ort.Caption := Fields[9].AsString;
    Telefonnr.Caption := Fields[10].AsString;
    Auftragsart.Caption := Fields[2].AsString;
    Auftragsdatum.Caption := Fields[3].AsString;
    ErledigtBis.Caption := Fields[4].AsString;
    Active := false;
  end;


Blawen - Mo 17.04.06 22:36

user profile iconbis11 hat folgendes geschrieben:
Jetzt mal zwei ganz dumme Fragen gestellt.

1.) Du hast eine Verbindung zur Datenbank ?
2.) Deine Query1 ist auch mit der Datenbank verbunden ?


Meine Vermutungen gehen in die gleiche Richtung.
Nimm doch mal ein DBGrid und verbinde Sie mit der Query und mache mal eine einfache Abfrage

Delphi-Quelltext
1:
"Select * from Tabelle1"                    
Zitat:
Denn ich mache meine Abfragen so :

Stellt aber auch nicht sicher ob auch wirklich eine Verbindung vorhanden ist...

Schau Dir mal diesen Topic an http://www.delphi-forum.de/viewtopic.php?t=56161&highlight=
Dort sind einige Hinweise drin (sowohl zum verbinden als auch bezüglich PW-Abfrage. Es geht zwar um eine MySQL-DB aber das Prinzip ist dasselbe!)


Müscha - Mo 17.04.06 22:46

eh was geht denn bitte mit euch

wollt ihr mich verarschen, es funktioniert doch schon einiges daten einfügen und löschen und anzeigen und solche faxen...

stellt mich ma nich für ganz so blöde hin!!!!


und genau von dieser seite hab ich das ja!!!

ich probiers ma so wie du, aber erst morgen, bin müde!


Blawen - Mo 17.04.06 23:03

user profile iconMüscha hat folgendes geschrieben:
eh was geht denn bitte mit euch

wollt ihr mich verarschen, es funktioniert doch schon einiges daten einfügen und löschen und anzeigen und solche faxen...

stellt mich ma nich für ganz so blöde hin!!!!


und genau von dieser seite hab ich das ja!!!

ich probiers ma so wie du, aber erst morgen, bin müde!

Wer will wohl wen verarschen? Wenn es wirklich gehen würde, würdest Du ja hier nicht nachfragen?
(Deine Datenmenge ist leer und pasta!)
Von mir erhälst Du zumindest keine Antwort mehr!

PS: Woher sollen wir wissen das bereits "einiges" geht? Sind wir Hellseher, zumal Du den Code eh nur aus meinem erwähnten Topic abgekupfert hast - naja..


raiguen - Di 18.04.06 17:22

Moin -)
Diese Abfrage

Delphi-Quelltext
1:
Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + '''name''' + ' AND Passwort = ' + '''pw''';                    
KANN ja auch kein Ergebnis liefern, weil die Query das SQL-Statement so interpretiert:
Select * from Tabelle1 WHERE Nutzername = ''name'' AND Passwort = ''pw'' ;-)
Oder gibt es einen Benutzer, der name heißt und sein Passwort pw :gruebel: :roll:

Vermutlich sind name und pw Variablen aus entsprechenden Editfeldern; also müsste das SQL-Statement so lauten:

Delphi-Quelltext
1:
2:
Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ''' + name + ''' AND Passwort = ''' + pw +'''';
Query1.Open;

Besser:

Delphi-Quelltext
1:
2:
Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + QuotedStr(name) + ' AND Passwort = ' + QuotedStr(pw);
Query1.Open;

...noch besser natürlich mit Parametern:

Delphi-Quelltext
1:
2:
3:
4:
Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername=:BNAME AND Passwort=:PWD';
Query1.ParamByName('BNAME').AsString := name;
Query1.ParamByName('PWD').AsString := pw;
Query1.Open;

//EDIT: delphitags eingefügt


MR_Harmonie - Di 18.04.06 18:55
Titel: ALSO folgendes
Ich darf mich vorstell, ich bin der, um dessen Programm es sich handelt.

Ich hab jetzt alle letzten 3 Code Möglichkeiten probiert, es ändert sich nichts wirklich..

Dennoch wenn ich als benutzername: name
und als passwort: pw eingebe

passiert erstma nichts, wenn ich die aber als datensatz in da Datenbank habe, und dann abrufen will, dann versucht er zwar die Form zu öffnen, schmiert mir aber dabei ab.

S kommt n Sanduhr-mauszeiger mit SQL daran, und das Programm is dann futsch...

Bitte weiterhelfen


Blawen - Di 18.04.06 21:52
Titel: Re: ALSO folgendes
user profile iconMR_Harmonie hat folgendes geschrieben:
Ich darf mich vorstell, ich bin der, um dessen Programm es sich handelt.
Müscha = Mr_Harmonie ?

Zitat:

Ich hab jetzt alle letzten 3 Code Möglichkeiten probiert, es ändert sich nichts wirklich..

Dennoch wenn ich als benutzername: name
und als passwort: pw eingebe

passiert erstma nichts, wenn ich die aber als datensatz in da Datenbank habe, und dann abrufen will, dann versucht er zwar die Form zu öffnen, schmiert mir aber dabei ab.

S kommt n Sanduhr-mauszeiger mit SQL daran, und das Programm is dann futsch...

Bitte weiterhelfen

Ein SQL-String alleine macht noch nicht viel. Wie sieht denn der restliche Code aus?
Wenn Du willst, dass Dir geholfen wird, solltest Du Dein Problem schon möglichst genau beschreiben!


MR_Harmonie - Mi 19.04.06 10:26


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button6Click(Sender: TObject);
var name, pw:string  ;

 begin

name:=edname.Text;
pw:=edpw.text;

with form2 do begin

Query1.Active := False;
Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + '''name''' + ' AND Passwort = ' + '''pw''';
Query1.Active := True;

 end;

IF form2.Query1.EOF THEN showmessage('keiner da'{ Kein Benutzer vorhanden}
   else form2.Show;

  end;



hier nochmal der quelltext, und MR_Harmonie ist nicht Müscha schließlich steht mein Name auch unterm Artikel, Müscha hat dieseb Eintrag bloß schon reingestellt, bevor ich angemeldet war,


wenn du lust und zeit hast. würde ich dir auch mein Programm mal geben--- denn ich hab recht wenig ahnung, aber die einstellungen der einzelnen Komponenten können ja auch nicht wirklich falsch sein, da dass reinschreiben von Datensätzen in die Datenbank und das Löschen funktionieren.

bin ratlos


uwewo - Mi 19.04.06 11:43

Hi,

probiers mal damit


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button6Click(Sender: TObject);  
var name, pw : string  ;  

begin  
   name := edname.Text;  
   pw   := edpw.text;  

  with form2 do 
   begin  
    Query1.Active := False;  
    Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + QuotedStr(name)
                        + ' AND Passwort = ' + QuotedStr(pw);  
    Query1.Active := True;  
  end;  

  IF form2.Query1.RecordCount = 0 then showmessage('keiner da'{ Kein Benutzer vorhanden}  
   else form2.Show;  
end;


Code ungetestet (sollte aber funktionieren)

Uwe


alzaimar - Mi 19.04.06 12:33

Mannoman, allet Mimosen hier :wink:
1. Probier 'Select * from Tabelle1'
2. Zeig uns die ersten paar Zeilen
3. Dann gehts weiter.
4. Vermutlich gibt es einfach keinen Anwender mit diesem Namen und dem Passwort.
5. Die Prüfung, ob es einen Eintrag mit dem Namen und dem Passwort gibt, ist sowieso nicht korrekt.
6. Es muss heißen 'If MyQuery.IsEmpty' und nicht 'IfMyQuery.EOF'.


MR_Harmonie - Mi 19.04.06 12:41
Titel: a
also ich habe wie folgt den quelltext von uwewo ausprobiert, es kommt der gleiche fehler.

er zeigt mir immer die showmessage an,

zu alzaimer , hab ich auch aussprobiert, bringt aber das gleiche ergebnis...


alzaimar - Mi 19.04.06 13:04

Punkte 1-2 bitte ausführen. Pkt. 3 übernehme ich. :wink:

user profile iconalzaimar hat folgendes geschrieben:

1. Probier 'Select * from Tabelle1'
2. Zeig uns die ersten paar Zeilen
3. Dann gehts weiter.


jasocul - Mi 19.04.06 13:24

Tue alzaimar den Gefallen.
Die Ursachen können sehr vielfältig sein:
- Leerzeichen bei der Eingabe in die Textfelder
- Groß- und Kleinschreibung ist unterschiedlich
- Passwort ist auf der DB verschlüsselt
- Filter beim Query1 aktiv
- In form2 könnten die Variablen name und pw ebenfalls definiert sein. Dann steht dort immer was falsches drin
- ...
Das sind nur die Dinge, die mir auf die Schnelle auffallen.


uwewo - Mi 19.04.06 13:36

Wenn er immer nur die Else Anweisung ausführt bedeutet es, das keine Datensätze mit
Deiner Abfrage übereinstimmen.

Passwort verschlüssel???
Benutzer sicher vorhanden??


raiguen - Mi 19.04.06 13:41

Moin :-)


user profile iconMR_Harmonie hat folgendes geschrieben:
also ich habe wie folgt den quelltext von uwewo ausprobiert, es kommt der gleiche fehler.

er zeigt mir immer die showmessage an, ...

@ mr_harmonie: Nett, dass Du den Code von user profile iconuwewo ausprobiert hast...Unterscheidet selbiger sich etwa von meinem Codebeispiel :roll: Im auf meinem folgenden Posting hast Du geschrieben:

user profile iconMR_Harmonie hat folgendes geschrieben:
...
Ich hab jetzt alle letzten 3 Code Möglichkeiten probiert, es ändert sich nichts wirklich..

Weiter: Ich hatte in meinem Beitrag auf das 'fehlerhafte' SQL-Statement hingewiesen, wieso postet Du das wieder :gruebel:


MR_Harmonie - Mi 19.04.06 15:34

Erstmal n fetten Dank an euch, den in diesem Forum antworten wenigstens welche, also ihr, im gegensatz zu anderen.


UND ich habs. das problem lag bei den variablen : name und pw,
scheinbar sind die wirklich nochmal in form2 aufgetaucht und dhat somit das Problem verursacht, Ich habe variablen umbenannt:

DANKE an ALLE (vor allem an jasocul.) und alle anderen die fleißig gepostet haben.

DANKE DANKE, jetzt läufts einwandfrei


raiguen - Mi 19.04.06 15:36

user profile iconjasocul hat folgendes geschrieben:
...
- In form2 könnten die Variablen name und pw ebenfalls definiert sein. Dann steht dort immer was falsches drin
- ...
Das sind nur die Dinge, die mir auf die Schnelle auffallen.

Das wäre auch eine der vielfältigen Möglichkeiten. Um das auszuschließen, teste bitte mal folgendes:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button6Click(Sender: TObject);
//--var name, pw:string  ;
begin
{**nicht nötig, da EditFelder direkt in Query übernommen
name:=edname.Text;
pw:=edpw.text;
**}

with form2 do begin
  Query1.Active := False;
  Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + QuotedStr(edname.Text) + ' AND Passwort = ' + QuotedStr(edpw.Text);
  Query1.Active := True;
end;

IF form2.Query1.EOF THEN 
{oder
if Form2.query1.IsEmpty then }

  showmessage('keiner da'{ Kein Benutzer vorhanden}
else 
  form2.Show;

end;

Wenn auch das nicht weiterhilft, dann erstmal versuchen, NUR den Nutzernamen abzufragen:

Delphi-Quelltext
1:
2:
3:
...
Query1.SQL.Text := 'Select * from Tabelle1 WHERE Nutzername = ' + QuotedStr(edname.Text);
...

Wichtig ist , wie user profile iconjasocul angedeutet hat - Groß- und Kleinschreibung des Namens. Such Dir zum Testen einen Namen, der garantiert in der Tabelle vorhanden ist ;-)
.
//EDIT: aaaargh... ein bischen zu spät :-( Das Problem ist ja gelöst :-)


raiguen - Mi 19.04.06 15:41

user profile iconMR_Harmonie hat folgendes geschrieben:

UND ich habs. das problem lag bei den variablen : name und pw,
scheinbar sind die wirklich nochmal in form2 aufgetaucht und dhat somit das Problem verursacht, Ich habe variablen umbenannt

Tja, kleine Ursache...große Wirkung. Ein Tipp: mach's so wie ich's grad eben gepostet habe: lass die Variablen in dem Button6Click-Ereignis weg und übergebe direkt die EingabeFelder in die Query... ;-)


MR_Harmonie - Do 20.04.06 20:29

DANKÖÖÖÖ,

so mach ichs am Besten jetzt immer so