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) |
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
ZeitGeist87 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 else end else begin 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
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 else end else begin 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
bruce185 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 end else begin 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
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!