MySQL-Problem
-
Ich habe ein Problem beim Connect zu meiner MySQL-Datenbank.
Ich benutze den Wrapper von UnixTom und habe mir auch schon so ziemlich alles im FAQ durchgelesen, komme allerdings nicht weiter.Mein code
CMYSQLDatabase* dBase = new CMYSQLDatabase();switch(dBase->connect("localhost", "testdatenbank", 3306, "root", "test"))
{
case DB_CONNECTION_BAD:
MessageBox(NULL, "Fehler", "Hinweis", MB_OK);
return false;case DB_CONNECTION_OK:
MessageBox(NULL, "ok", "Hinweis", MB_OK);
return true;
}Der Connect kann nicht hergestellt werden und ich bekomme immer die Fehler-MessageBox!!!!
Die Parameter für den Connect sind eigentlich alle Korrekt. Habe sie extra mit dem Login-Dlg des Query-Browsers verglichen.
Muss ich als zweiten parameter den Namen der Datenbank oder das was als "Stored Connection" im Query-Browser steht eintragen?
Weiß einer von euch was falsch ist?
-
Also ich hab jetzt selber ne Lösung gefunden.
Fragt mich aber nicht warum es jetzt funktioniert!Ich habe im MySQL-Administrator mal das Passwort für die DB rausgenommen und dann mal nen Connect probiert. Und siehe da, es klappt.
Ich würde jetzt ja gerne wissen, warum das ohne Passwort funktioniert?Gibt es da vielleicht ein bekanntes Problem in der Implementierung der Connect-Methode?
-
zeig halt mal deinen Connect String her, dann kann man schauen, ich nimm mal an, du hast beim String einen Fehler, dass er das PWD nicht richtig erkennt und drum nicht connecten kann.
Also immer mal zeigen was man macht, um eigene Fehler aus zu schließen.
-
Der Code ist der aus dem ersten Beitrag:
CMYSQLDatabase* dBase = new CMYSQLDatabase(); switch(dBase->connect("localhost", "testdatenbank", 3306, "root", "test")) { case DB_CONNECTION_BAD: MessageBox(NULL, "Fehler", "Hinweis", MB_OK); return false; case DB_CONNECTION_OK: MessageBox(NULL, "ok", "Hinweis", MB_OK); return true; }
Der Connect
dBase->connect("localhost", "testdatenbank", 3306, "root", "test");
funktioniert nicht, obwohl das Pwd der DB "test" ist.
Ich bekomme immer DB_CONNECTION_BAD als Rückgabewert.
Sobald ich das Passwort für die DB lösche und den Connect:dBase->connect("localhost", "testdatenbank", 3306, "root", "");
ausführe, klappts.
-
Hm vielleicht schreitet ja gleich Unix-Tom ein ansonsten, tut mir leid ich seh da so kein Fehler. Hast du auf groß und Kleinschreibung geachtet? steht vielleicht ein Leerzeichen oder ` irgendwie im PWD kopier mal ganz bewusst per copy und paste das PWD aus dem Source. Sonst leider keine Ahnung.
-
Hast Du den MySQL-Server unter Windows installiert?
Ich hatte das auch schon öfter mal, dass, obwohl ich beim Installieren (oder war's beim ersten Start?) das PW für root angebe, dieses aber nicht in die DB eingetragen wird. Vielleicht mal manuell in die mysql-DB schauen, ob da unter users bei root ein PW drinsteht. Ansonsten muss das PW natürlich verschlüsselt dort gespeichert werden, bei phpMyAdmin gibt es da einen Werte-Typ "password", da dafür sorgt, dass das PW nicht im Klartext dort steht. Und da nach jeder Änderung den mySQL-Server neu starten bzw. zumindest die Benutzerrechte neu laden.Ansonsten weiß ich auch nicht, wäre jetzt nur nochmal ne Idee, wo Du nachschauen könntest.
-
Ich hab den Server unter Windows installiert und dabei ein Root-Pwd vergeben.
Das wird auch im MySQL-Administrator angezeigt(verschlüsselt).
Solange hier ein Passwort eingetragen ist, funktioniert der Connect nicht, wenn ich es lösche schon.
Habe auch schon per Copy und Paste das passwort aus dem Code übernommen, klappt aber auch nicht!Führe den Connect jetzt halt ohne Pwd durch. Zwar nicht so der Bringer aber naja.
Danke für die Hilfe!
-
Es gibt eine Funktion welche dir den Error ausgibt.
Es liegt nicht an der LIB. Ich verwende selbst passwörter.
-
Also ich habe nun folgenden Code:
if(dBase->connect("localhost", "testdatenbank", 3306, "root", "hallo")) { //hier springt er nicht rein } else { CString error = dBase->errorMessage(); }
Wenn ich mir jetzt error anschaue, steht da nur Datenmüll drin.
(irgendwelche Sonderzeichnem usw.)
-
nachdem du ja mysql local hast versuche mit dem clientprogramm zu connecten
mysql -h localhost -u root -phallo
daa schei was passiert.
dein source ist richtig.
es liegt 100% kein fehler im wrapper vor. dieser ist im produktiven einsatz.
-
Wenn ich die Command Line Client aufrufe und
mysql -h localhost -u root -p hallo;
aufrufe, bekomme ich immer den Fehler 1049: Uknown database '-h'!
Kann einer da was mit anfangen?
-
hm, bei mir funzt das so, ohne Fehler. Ich habe mySQL 3.23. Evtl. hast Du eine andere Version, wo die Parameter in einer anderen Reihenfolge oder evtl. ganz anders lauten müssen. Ich weiß zwar nicht, wie der Wrapper aufgebaut ist, aber evtl. ist da der Knackpunkt, dass die bei oder ab einer bestimmten Version einfach die Parameter geändert haben ... (ACHTUNG: nur geraten)
-
Ohh, hatte bei meinem Connect per Command-Line nen bock drin.
Das funktioniert jetzt also so wie UnixTom das geschrieben hat. Und was jetzt?
Das Pwd ist also auf jeden fall das richtige.
-
Habe ich das nu richtig verstanden. Mit dem CLI funktioniert es?
-
Ja, ich habe das was du geschrieben hast in die Console eingegeben und der Connect zur DB hat geklappt. Der Connect im Code funktioniert allerdings nicht.
-
Lade dir die neuen Dateien mal runter.
www.sensorme.de/dateien/mysqldateien.zip
www.sensorme.de/dateien/mysqldllV7.zip
-
Hinter dem Link liegen keine Dateien!
-
jetzt schon.
-
Sobald ich jetzt compiliere bekomme ich folgende Fehlermeldung:
Syntaxfehler: Fehlendes ';' vor Bezeichner 'fd'
Bei einem Doppelklick, wird in die Datei mysql_com.h gesprungen uns zwar an die Stelle :
typedef struct st_net { Vio* vio; my_socket fd; // <-- hier steht der Cursor ... }
Hab ich irgendwas im Studio falsch eingestellt?
-
#include <afxsock.h> // MFC-Socket-Erweiterungen
in stdafx.h