Autor Beitrag
DIGIMan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: So 19.02.06 13:14 
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
Einloggen, um Attachments anzusehen!
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 13:44 
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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Try
  with ZConnection do        // ZEOS Verbindungskomponente
    begin
      User     := User;      // z.B. root      (bei allen Übergaben handelt es sich um String-Werte!)
      Password := Passwort;  // z.B. 123456
      HostName := Hostname;  // z.B. localhost
      Port     := Port;      // meist 3306
      Database := DB;        // z.B. meineDB
      Protocol := Protocol;  // z.B. mysql-4.1
      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


Zuletzt bearbeitet von Blawen am So 19.02.06 14:43, insgesamt 1-mal bearbeitet
DIGIMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 13:54 
user profile iconDIGIMan 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: (?)

ausblenden Delphi-Quelltext
1:
passwort := edit1.Text					


Zeos:
Welche Delphi Version setzt Du ein?
DIGIMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 14:03 
user profile iconDIGIMan 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 (sourceforge.net/proj...amp;package_id=28219)

Es geht also nicht um die eigentliche Verbindung, sondern darum ob der Benutzername und das Passwort übereinstimmen?

ausblenden 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.


Zuletzt bearbeitet von Blawen am So 19.02.06 14:34, insgesamt 1-mal bearbeitet
DIGIMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 14:14 
user profile iconDIGIMan 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: So 19.02.06 14:28 
Hier ein Screenshot von meinem Rechner!
Einloggen, um Attachments anzusehen!
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 14:33 
user profile iconDIGIMan 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: www.dsdt.info/tutorials/mysqldirect/

Ansonsten:
Obiger Weg sollte grundsätzlich gehen:

- Einen Select String mit den Bedingungen Edit1 und Edit2 generieren
ausblenden 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:
ausblenden 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;  
  //z.B. 'Select * from Mitarbeiter WHERE Personalnummer = 1000 AND Passwort = 1234'
  Query.Active := True;

  IF Query.EOF THEN .... // Kein Benutzer vorhanden
end;


Zuletzt bearbeitet von Blawen am So 19.02.06 14:54, insgesamt 1-mal bearbeitet
DIGIMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: So 19.02.06 14:48 
Das ist schon mal super und ich werde es gleich mal testen....
DIGIMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: So 19.02.06 15:01 
Ich habe das mal so eingabaut:

ausblenden 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;
  //z.B. 'Select * from Mitarbeiter WHERE Personalnummer = 1000 AND Passwort = 1234'  
  MyDataSet1.Active := True;

 
  IF MyDataSet1.EOF THEN  // Kein Benutzer vorhanden


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 user profile iconraziel: Quote- durch Delphi-Tags ersetzt
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 15:21 
user profile iconDIGIMan 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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!

ausblenden 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 user profile iconraziel: Code- durch Delphi-Tags ersetzt
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 15:43 
user profile iconDIGIMan 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!

ausblenden 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:
ausblenden 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 // Kein Benutzer vorhanden
    ShowMessage('Benutzerdaten sind nicht korrekt');
  ELSE 
    begin  //theoretisch darf es nur einen User/Benutzer geben, wie gewünscht eine Unterabfrage
      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)

ausblenden 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 user profile iconraziel: Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von Blawen am So 19.02.06 16:51, insgesamt 1-mal bearbeitet
DIGIMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: So 19.02.06 15:56 
Außer einige Fehler habe ich das jetzt so übernommen:

ausblenden 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:

ausblenden 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 user profile iconraziel: Code- durch Delphi-Tags ersetzt
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 19.02.06 16:15 
user profile iconDIGIMan 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!

ausblenden 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.


Zuletzt bearbeitet von Blawen am So 19.02.06 16:50, insgesamt 2-mal bearbeitet