Entwickler-Ecke
Datenbanken - Datenbank Connect und Daten überprüfen!
DIGIMan - So 19.02.06 13:14
Titel: Datenbank Connect und Daten überprüfen!
Servus,
ich muß gleich dazu sagen das ich neu bin auf den Gebiet und versuche meine erste Abfrage an die Datenbank zusammen zu basteln, ich lerne schnell! Würde mich super freuen wenn mir jemand beim ersten Schritt helfen könnte!
So ich benutze Delphi 6 und will die Datenbank Msql benutzen
Ich benutze folgende Datenbank Komponente die als Anhang dabei ist!
Nun möchte ich an meiner Datenbank Benutzernamen und Passwort abfragen ob diese Korrekt sind!
Was muß ich machen? Beispiele habe ich für die Komponente nicht gefunden!
LG DIGIMan
Blawen - So 19.02.06 13:44
Titel: Re: Datenbank Connect und Daten überprüfen!
Hallo Digiman
Mit Deinem Beispiel kann ich nicht viel anfangen. (um was für eine Komponente handelt es sich ?)
Mit den Zeos-Komponenten kann man die Anmeldung z.B. so umsetzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Try with ZConnection do begin User := User; Password := Passwort; HostName := Hostname; Port := Port; Database := DB; Protocol := Protocol; Connect; ZQuery1.Active := False; ZQuery1.SQL.Text := 'Select * from MITARBEITER'; ZQuery1.Active := True; end; Except ShowMessage('Zur Datenbank konnte nicht verbunden werden.'); end; |
Mit anderen Komponenten dürfe es sich gleich/ähnlich verhalten.
Gruss
Blawen
DIGIMan - So 19.02.06 13:51
Meine Komponente ist speziell für Mysql aufgebaut und ich tragen nur die Zugangsdaten ein und schon habe ich eine Verbindung zur Datenbank. Nun suche ich Beispiele wie man Edit1 und Edit2 für Benutzername und Passwort mit der Datenbank abfragt und der Login Button dies ausführt!
Zeos bekomme ich leider nicht installiert!
Blawen - So 19.02.06 13:54
DIGIMan hat folgendes geschrieben: |
Meine Komponente ist speziell für Mysql aufgebaut und ich tragen nur die Zugangsdaten ein und schon habe ich eine Verbindung zur Datenbank. Nun suche ich Beispiele wie man Edit1 und Edit2 für Benutzername und Passwort mit der Datenbank abfragt und der Login Button dies ausführt!
Zeos bekomme ich leider nicht installiert! |
Gehts nur darum: (?)
Delphi-Quelltext
1:
| passwort := edit1.Text |
Zeos:
Welche Delphi Version setzt Du ein?
DIGIMan - So 19.02.06 13:56
Das steht im ersten Beitrag Delphi 6 jetzt muß ich nur die Datenbank abfragen mit select aber wie schaut es aus?
Blawen - So 19.02.06 14:03
DIGIMan hat folgendes geschrieben: |
| Das steht im ersten Beitrag Delphi 6 jetzt muß ich nur die Datenbank abfragen mit select aber wie schaut es aus? |
Ich habe u.a. Delphi5, dort lässt sich die neuste Version der Zeos nicht installieren. Mit der ZEOS Version vom 14.11.2005 gehts problemlos (
http://sourceforge.net/project/showfiles.php?group_id=35994&package_id=28219)
Es geht also nicht um die eigentliche Verbindung, sondern darum ob der Benutzername und das Passwort übereinstimmen?
Delphi-Quelltext
1:
| 'Select * from Tabelle WHERE PERSONALNUMMER = ' + Edit1.Text + ' AND PASSWORT = ' + Edit2.Text; |
Wenn die Ergebnismenge 0 ist, stimmt entweder das Passwort oder der Benutzername nicht.
DIGIMan - So 19.02.06 14:09
Hast du MSN?
Ich würde Dir mal Zugriff auf meinen Rechner geben damit du es dir mal anschauen kann?
Blawen - So 19.02.06 14:14
DIGIMan hat folgendes geschrieben: |
Hast du MSN?
Ich würde Dir mal Zugriff auf meinen Rechner geben damit du es dir mal anschauen kann? |
Habe ich nicht.
Ev. musst Du nur Dein Problem genauer umschreiben?
So verstehen ich es (bisher):
- Der Zugriff zu Datenbank gelingt Dir
- Du möchtest kontrollieren, ob der angemeldete Benutzer (Edit1, Edit2) sich korrekt authorisiert hat
DIGIMan - So 19.02.06 14:21
Du hast es genau erfasst!
Ich habe das Feld: Benutzername und Passwort und nun soll der Button Login die abfragen und Label2 soll dann bei falscher Eingabe folgende ausgeben: Zugangsdaten nicht korrekt!
Wie schaut es nun aus?
Ich habe Zweit Komponenten in mein Formunlar hinzugefügt:
MyDatabase1
MyDataSet1
DIGIMan - So 19.02.06 14:28
Hier ein Screenshot von meinem Rechner!
Blawen - So 19.02.06 14:33
DIGIMan hat folgendes geschrieben: |
Du hast es genau erfasst!
Ich habe das Feld: Benutzername und Passwort und nun soll der Button Login die abfragen und Label2 soll dann bei falscher Eingabe folgende ausgeben: Zugangsdaten nicht korrekt!
Wie schaut es nun aus?
Ich habe Zweit Komponenten in mein Formunlar hinzugefügt:
MyDatabase1
MyDataSet1 |
Handelt es sich bei der Komponente umd MySQL direkt -> wenn ja gibts dazu ein Tutorial:
http://www.dsdt.info/tutorials/mysqldirect/
Ansonsten:
Obiger Weg sollte grundsätzlich gehen:
- Einen Select String mit den Bedingungen Edit1 und Edit2 generieren
Delphi-Quelltext
1:
| 'Select * from Tabelle WHERE ' + Edit1.Text + ' = ' + Edit2.Text; |
- die zurückgelieferte Datenmenge kontrollieren. Wenn es keine Übereinstimmung gibt, sind die eingegeben Daten falsch
Sinngemässes Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| TForm1.LoginClick(Sender : TObject) begin Query.Active := False; Query.SQL.Text := 'Select * from Mitarbeiter WHERE Personalnummer = ' + Edit1.Text + ' AND Passwort = ' + Edit2.Text; Query.Active := True;
IF Query.EOF THEN .... end; |
DIGIMan - So 19.02.06 14:48
Das ist schon mal super und ich werde es gleich mal testen....
DIGIMan - So 19.02.06 15:01
Ich habe das mal so eingabaut:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select * from users WHERE username = ' + Username.Text + ' AND passwort = ' + Passwort.Text; MyDataSet1.Active := True;
IF MyDataSet1.EOF THEN |
Ich bekomme folgenden Fehler:
Im Project Surfbar.exe ist eine Exception der Klasse EDatabaseError aufgetreten.
Meldung: 'own column'webmaster' in 'where clause'
Was habe ich falsch gemacht?
Moderiert von
raziel: Quote- durch Delphi-Tags ersetzt
Blawen - So 19.02.06 15:21
DIGIMan hat folgendes geschrieben: |
Ich bekomme folgenden Fehler:
Im Project Surfbar.exe ist eine Exception der Klasse EDatabaseError aufgetreten.
Meldung: 'own column'webmaster' in 'where clause'
Was habe ich falsch gemacht? |
Stimmen die Angaben im SQL-String mit den Feldnamen überein?
DIGIMan - So 19.02.06 15:29
Ich muß es so machen, da ich die UserID in Form2 mit übergeben will!
Also müssen wir per IF-Schleife schauen ob die Daten korrekt sind!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.LoginClick(Sender: TObject); begin MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select id,username,passwort from users WHERE username = ' + Username.Text + '; MyDataSet1.Active := True;
IF MyDataSet1.EOF THEN begin // Kein Benutzer vorhanden ShowMessage('Benutzerdaten sind nicht korrekt'); else Form1.Hide; Form2.Show;
end;
end; |
Das bedeute die Augabe der Daten muß noch kommen und dann IF umändern aber wie?
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt
Blawen - So 19.02.06 15:43
DIGIMan hat folgendes geschrieben: |
Ich muß es so machen, da ich die UserID in Form2 mit übergeben will!
Also müssen wir per IF-Schleife schauen ob die Daten korrekt sind!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.LoginClick(Sender: TObject); begin MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select id,username,passwort from users WHERE username = ' + Username.Text + '; MyDataSet1.Active := True;
IF MyDataSet1.EOF THEN begin // Kein Benutzer vorhanden ShowMessage('Benutzerdaten sind nicht korrekt'); else Form1.Hide; Form2.Show; end; end; |
Das bedeute die Augabe der Daten muß noch kommen und dann IF umändern aber wie? |
??? Wieso so kompliziert?
Wie wäre es mit:
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.LoginClick(Sender: TObject); begin MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select id,username,passwort from users WHERE username = ' + Username.Text + ' AND Passwort = ' + Passwort; MyDataSet1.Active := True;
IF MyDataSet1.EOF THEN ShowMessage('Benutzerdaten sind nicht korrekt'); ELSE begin IF Query.FieldByName('PASSWORT').AsString = Passwort THEN begin ID := Query.FieldByName('ID').AsInteger; Form1.Hide; Form2.Show; end; end; end; |
Ich persönlich würde es so lösen (da der User eindeutig sein muss -> kein 2. User mir dem gleichen Usernamen)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.LoginClick(Sender: TObject); begin MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select id,username,passwort from users WHERE username = ' + Username.Text + ' AND Passwort = ' + Passwort; MyDataSet1.Active := True;
IF NOT MyDataSet1.EOF THEN begin ID := Query.FieldByName('ID').AsInteger; Form1.Hide; Form2.Show; end; ELSE ShowMessage('Benutzerdaten sind nicht korrekt');
end; |
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt
DIGIMan - So 19.02.06 15:56
Außer einige Fehler habe ich das jetzt so übernommen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.LoginClick(Sender: TObject); begin MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select id,username,passwort from users WHERE username = ' + Username.Text + ' AND passwort = ' + Passwort.Text; MyDataSet1.Active := True;
IF NOT MyDataSet1.EOF THEN begin UserID := MyDataSet1.FieldByName('id').AsInteger; Form1.Hide; Form2.Show; end; ELSE ShowMessage('Benutzerdaten sind nicht korrekt');
end; |
Aber ich bekomme nun folgende Fehler:
Delphi-Quelltext
1: 2: 3:
| [Fehler] surfbar1.pas(59): Undefinierter Bezeichner: 'UserID' [Fehler] surfbar1.pas(63): ';' nicht erlaubt vor einem 'ELSE' [Fataler Fehler] Surfbar.dpr(7): Verwendete Unit 'surfbar1.pas' kann nicht compiliert werden |
Was muß ich noch machen?
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt
Blawen - So 19.02.06 16:01
| Zitat: |
Was muß ich noch machen? |
Sorry, mein Fehler:
';' nicht erlaubt
->
; vor dem
end wegnehmen:
so müsste es aussehen:
Delphi-Quelltext
1: 2: 3:
| Form2.Show; end ELSE ShowMessage('Benutzerdaten sind nicht korrekt'); |
UserID
Die UserID habe ich als Integer angenommen (Sorry, die Deklaration habe ich unterschlagen -> var UserID : Integer)
(Im ersten Beispiel nannte ich es nur ID - Soorry)
Es ging mir nur darum, aufzuzeigen wie die ID des Datensatzes ermittelt werden kann.
Die weitere Verarbeitung der ID hängt vom konkreten Projekt ab.
DIGIMan - So 19.02.06 16:08
UserID:
Er kennt die var nicht, muß die nicht erst definiert werden, damit er sie benutzen kann?
[Fehler] surfbar1.pas(59): Undefinierter Bezeichner: 'UserID'
Blawen - So 19.02.06 16:15
DIGIMan hat folgendes geschrieben: |
UserID:
Er kennt die var nicht, muß die nicht erst definiert werden, damit er sie benutzen kann?
[Fehler] surfbar1.pas(59): Undefinierter Bezeichner: 'UserID' |
Eigentlich schon!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.LoginClick(Sender: TObject); var UserID : Integer;
begin MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select id,username,passwort from users WHERE username = ' + Username.Text + ' AND Passwort = ' + Passwort; MyDataSet1.Active := True;
IF NOT MyDataSet1.EOF THEN begin ID := Query.FieldByName('ID').AsInteger; Form1.Hide; Form2.Show; end ELSE ShowMessage('Benutzerdaten sind nicht korrekt'); end; |
Wie geschrieben, es ging mir im Beispiel darum, wie Du zur ID des aktuellen Datensatzes gelangst.
Was Du damit aber machen willst, ist bisher nicht definiert (Globale Variable, Parameter-Übergabe,... ?)
Somit ist je nach Vorgehen der Definitionsort der UserID unterschiedlich.
DIGIMan - So 19.02.06 16:17
So das Compilieren hat funktioniert aber wenn ich auf login klicke kommt
folgender Fehler: schaue Screenshot
DIGIMan - So 19.02.06 16:33
Mit der Datenbank error im Vorigen Beitag bin ich noch nicht weiter gekommen!
das soll mit der UserID passieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm1.LoginClick(Sender: TObject); var UserID : Integer; LoginTime : Integer;
begin MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Select id,username,passwort from users WHERE username = ' + Username.Text + ' AND passwort = ' + Passwort.Text; MyDataSet1.Active := True;
IF NOT MyDataSet1.EOF THEN begin UserID := MyDataSet1.FieldByName('id').AsInteger; LoginTime := ; MyDataSet1.Active := False; MyDataSet1.SQL.Text := 'Insert from stats set userID = ' + UserID + ', login = ' + LoginTime; MyDataSet1.Active := True;
Form1.Hide; Form2.Show; end ELSE ShowMessage('Benutzerdaten sind nicht korrekt');
end; |
Es soll in der Datenbank stats einen Eintrag folgenden, wenn der User sich eingetroggt hat!
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt
Blawen - So 19.02.06 16:34
DIGIMan hat folgendes geschrieben: |
So das Compilieren hat funktioniert aber wenn ich auf login klicke kommt
folgender Fehler: schaue Screenshot |
Die Fehlermeldung sagt: Fehler in der SQL-Syntax.
Ändere mal wie folgt:
Delphi-Quelltext
1:
| 'Select id,username,passwort from users WHERE username = "' + Username.Text + '" AND Passwort = "' + Passwort.Text + '"' |
(mann beachte die
" !
Blawen - So 19.02.06 16:42
Zeit: Soll wirklich nur die Zeit eruiert werden? Datum?
Aus der Delphi-Hilfe:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Timer1Timer(Sender: TObject);
var DateTime : TDateTime; str : string; begin DateTime := Time; str := TimeToStr(DateTime); Caption := str; end; |
Als Beispiel soll im Edit1-Feld die aktuelle Zeit ausgegeben werden:
Delphi-Quelltext
1:
| Edit1.Text := TimeToStr(Time); |
Moderiert von
raziel: Quote- durch Delphi-Tags ersetzt
DIGIMan - So 19.02.06 16:48
>Fehlt da nicht ein and zwische username und passwort?
Ich habe beides ausprobiert, aber es klappt einfach nicht :(
Blawen - So 19.02.06 16:49
DIGIMan hat folgendes geschrieben: |
>Fehlt da nicht ein and zwische username und passwort?
Ich habe beides ausprobiert, aber es klappt einfach nicht :( |
Selbstverständlich hast Du recht, irgendwie habe ich dies unterschlagen...
Delphi-Quelltext
1:
| 'Select id,username,passwort from users WHERE username = "' + Username.Text + '" AND Passwort = "' + Passwort.Text + '"' |
DIGIMan - So 19.02.06 16:56
hast du einen Messenger?
Das geht schneller und einfacher!
Ich würde dir mal das script schicken, damit du es dir anschauen kannst und es selber testes!
Blawen - So 19.02.06 17:02
DIGIMan hat folgendes geschrieben: |
hast du einen Messenger?
Das geht schneller und einfacher!
Ich würde dir mal das script schicken, damit du es dir anschauen kannst und es selber testes! |
Messenger: Im Prinzip schon, allerdings müsste ich auch die gleiche Entwicklungsumgebung haben...
Kannst Du den fertigen String nicht mal Testweise ausschreiben?
Delphi-Quelltext
1:
| 'Select id,username,passwort from users WHERE username = "Hans" AND Passwort = "1234"' |
Alternativ kannst Du ja auch einen SQL-Manager zum testen der SQL-Strings einsetzen (zb von hier
http://sqlmanager.net/de/products/mysql/manager/download (kostenlose Light Version)
Blawen - So 19.02.06 17:05
Eine weitere Möglichkeit gibt es noch:
Ev. müssen die Feldnamen GROSS geschrieben werden.
Delphi-Quelltext
1:
| 'Select ID,USERNAME,PASSWORT from USERS WHERE USERNAME = "Hans" AND PASSWORT = "1234"' |
DIGIMan - So 19.02.06 17:08
Es ist eine MySQL Datenbank und dort muß auf groß und kleinschreibung geachtet werden, wie bei PHP!
Du brauchst ja nur die Komponente die im ersten Beitrag ist installieren und dann mein Script!
Welchen Messanger benutzt du? Und wie ist der Username oder Email?
Ich habe in mein Form die Komponente: MyDataSet1
Abfrage startet ja mit: MyDataSet1.SQL.Text
Was bedeutet denn SQL habe ich auch im Inspektor drin, aber TEXT woher?
Blawen - So 19.02.06 17:20
Die Komponente habe ich mir mal installiert.
Kannst Du mir Deinen kompletten Source + die Datenbank-Struktur per PN senden?
Ich werde es mir anschauen
Blawen - So 19.02.06 19:58
Rückmeldung an die übrigen Leser:
Es war die Komponente...
Mit den ZEOS-Komponenten gehts wunschgemäss
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!