Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Überprüfen ob ein nick in der MySQL Datenbank existiert?


bruce185 - Do 12.04.07 02:12
Titel: Überprüfen ob ein nick in der MySQL Datenbank existiert?
Hallo,
also ich habe mir die MySQL Direct von Delphi-Treff geloadet und habe eine verbindung zu meinem Datenbank hergestellt.
Jetzt möchte ich prüfen ob dieser Nick was ich in Edit1 eingeben habe, schon in der Datenbank existiert?

In PHP funktioniert es so:


Delphi-Quelltext
1:
2:
3:
4:
5:
  $sql1 = "SELECT * FROM usertable WHERE (nick = '".$_POST["nick"]."')"; 
  $result = mysql_query ($sql1); 
      if (mysql_num_rows ($result) > 0
        echo "Vorhanden";
      }


Ich hab das mal so in Delphi probiert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm4.Button3Click(Sender: TObject);
var
    exx: boolean;
    nickvorhanden: string;
begin
  nickvorhanden := 'SELECT * FROM user WHERE nick="'+Edit1.Text+'"';
  FResult := FMysql.query(nickvorhanden, true, exx);
  if assigned(FResult) then
  begin
    ShowMessage('Nick vorhanden')
  end
  else begin
    ShowMessage('Nick nicht vorhanden')
  end;
end;


leider zeigt er mir immer an, dass dieser Nick schon Vorhanden ist obwohl das nicht der fall ist.
Ich wäre euch sehr dankbar, wenn ihr mein problem lösen könnt.

Vielen Dank.

MfG


ZeitGeist87 - Do 12.04.07 07:21

Moin!

Nimm doch einfach das Statement


SQL-Anweisung
1:
Select count(nick) from usertable where Nick = '<der Nick>'                    


und prüf, ob count(nick) > 0 ist.
Sollte dies der Fall sein, ist der Nick bereits vorhanden.
Ist das Ergebnis jedoch 0 (oder kleiner), kann er verwendet werden.

LG
Stefan


bruce185 - Do 12.04.07 07:52

Danke Dir.
Aber wie überprüfe ich das in Delphi auf Button klick?
Sry, aber das möchte irgendwie nicht funktionieren.


mkinzler - Do 12.04.07 07:53

Zeige mal den Code deiner onClick-Methode


bruce185 - Do 12.04.07 08:00

Also ich habe das erst so probiert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm4.Button3Click(Sender: TObject);
var
    exx: boolean;
    nickvorhanden: string;
begin
  nickvorhanden := 'SELECT * FROM user WHERE nick="'+Edit1.Text+'"';
  FResult := FMysql.query(nickvorhanden, true, exx);
  if assigned(FResult) then
  begin
    ShowMessage('Nick vorhanden')
  end
  else begin
    ShowMessage('Nick nicht vorhanden')
  end;

end;


Also so tu ich ja die Daten an MySQL Query schicken, aber ich weiss dann nicht, wie ich überprüfen kann ob der Nick schon vorhanden ist.

Danke schonmal.

MfG


mkinzler - Do 12.04.07 08:15

Welche Komponenten verwendest du?
BTW. Pass mal die Abfrage an, wie user profile iconZeitGeist87 es geschrieben hat. Das Problem an deinem Code ist das ein leeres Ergebnis auch eine Ergebnis.


ZeitGeist87 - Do 12.04.07 08:15


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm4.Button3Click(Sender: TObject);
var
    exx: boolean;
    nickvorhanden: string;
begin
  nickvorhanden := 'SELECT count(Nick) from user WHERE nick="'+Edit1.Text+'"';
  FResult := FMysql.query(nickvorhanden, true, exx);
  if assigned(FResult) then
  begin
    if FResult.fieldbyname('count(Nick)').asinteger > 0 then
     //User existiert
    else
     //User existiert nicht
  end
  else begin
   //fehlermeldung
  end;

end;


da ich das FResult-Object nicht kenn, kann ich anhand des fieldbyname... nur raten.

LG
Stefan


noidic - Do 12.04.07 08:16

Mh, sieht für mich so aus, als wäre das Result immer vorhanden, auch wenns leer ist (macht ja auch irgendwo Sinn). Wie bereits geschrieben solltest du eine Count-Abfrage machen und das Ergebnis auf 0 prüfen.


bruce185 - Do 12.04.07 08:28

Danke Dir.
Irgendwie wird das aber nicht erkannt: FResult.fieldbyname.
Also fieldbyname ist unbekannt.
Ich benutze MySQL direct units eine Verbindung ist ja bereits aufgebaut, also wenn ich mein Prog starte, wird sofort eine Verbindung positiv aufgebaut.
Aber irgendwie komme ich da nicht weiter mit dem überprüfen...

EDIT: Könnte das damit gehn:
FResult.FieldIndexByName ?

EDIT: Ich hab das mal so probiert:


Delphi-Quelltext
1:
if FResult.FieldIndexByName('count(nick)') > 0 then                    


Der zeigt mir dann immer das an, was in der else drin steht, wenn ich hinter die klammer ein . setze, dann kommt ein fehler das der quelltext nicht angezeigt werden kann.

MfG


mkinzler - Do 12.04.07 08:40

http://www.dsdt.info/tutorials/mysqldirect/?page=4&x=4&y=6


bruce185 - Do 12.04.07 08:52

Danke.
Das habe ich ja schon längst durch, nur weiss ich nicht wie ich überprüfen kann ob ein Nick schon eingetragen wurde.


ZeitGeist87 - Do 12.04.07 08:55

Nachdem ich mir das Tut angesehen habe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm4.Button3Click(Sender: TObject);
var
    exx: boolean;
    nickvorhanden: string;
begin
  nickvorhanden := 'SELECT count(Nick) from user WHERE nick="'+Edit1.Text+'"';
  FResult := FMysql.query(nickvorhanden, true, exx);
  if assigned(FResult) then
  begin
    if strtoint(FResult.fieldValue(0)) > 0 then
     //User existiert
    else
     //User existiert nicht
  end
  else begin
   //fehlermeldung
  end;

end


LG
Stefan


bruce185 - Do 12.04.07 09:00

Hey Cool, darauf wäre ich nicht gekommen, funktioniert sehr gut.

Vielen Dank.

MfG


ZeitGeist87 - Do 12.04.07 09:02

Strtoint ist normalerweise da nicht so toll, da wir aber eine Abfrage absetzen, bei der nur ein Integer zurückgegeben wird, macht das Ganze hier keine Probleme!

LG
Stefan


bruce185 - Do 12.04.07 12:04

Hallo nochmal,
ich wollte mal wissen wie ich überprüfen kann ob dieser Nick mit dem PW übereinstimmt?

Ich hab das mal so probiert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
nickvorhanden := 'SELECT * from user WHERE nick="'+Edit1.Text+'" AND passwort="'+Edit2.Text+'"';
FResult := FMysql.query(nickvorhanden, true, exx);
if strtoint(FResult.fieldValue(0)) > 0 then
begin

end;


Sry, aber ich versteh das irgendwie nicht :cry:
Wäre sehr nett, wenn das mir einer erklären könnte.

Vielen Dank.

MfG


ZeitGeist87 - Do 12.04.07 12:07

user profile iconbruce185 hat folgendes geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
nickvorhanden := 'SELECT count(IDSPALTE) from user WHERE nick="'+Edit1.Text+'" AND passwort="'+Edit2.Text+'"';
FResult := FMysql.query(nickvorhanden, true, exx);
if strtoint(FResult.fieldValue(0)) > 0 then
begin
 //existiert
end
else
begin
 //existiert nicht
end;



LG
Stefan


bruce185 - Do 12.04.07 13:30

Danke Dir für Deine hilfe.
Der führt irgendwie immer nur die Else aus, also ist Existiert nicht obwohl der Nick mit dem PW in der Datenbank existiert.
Wenn ich count(id) weg mache und stattdesen ein * setze, dann bekomme ich die fehlermeldung das es kein gültiger integerwert ist.
Wieso eigentlich?

MfG


ZeitGeist87 - Do 12.04.07 13:57

Wenn du Select * from.. machst, und das erste Feld einen String behinhaltet, z. B. Mustermann, dann kann das natürlich in keinen Integer umgewandelt werden.

Count(Spalte) gibt dir immer einen Integer zurück.

Zeig doch mal den Datensatz!

LG
Stefan


einfach112 - Do 04.11.10 10:43

Hallo !
Leider ging es hier nicht weiter aber ich habe genau das gleiche problem ! ! !
es wird immer nur angezeigt exsistiert nicht !

aber was muss ich nun machen ! ?
Danke schonmal wie immer im voraus !
einfach112