MYSQL (UnixToms WrapperKlasse) connect Problem
-
Mir geht es zuerst nur um den Verbindungsaufbau. Alles was danach nicht funktioniert, wird wohl an meinem Code liegen
int iRet; dBase = new CMYSQLDatabase(); iRet = dBase->connect("gadmovorg", "test", 3306, "root", "passwd"); switch(iRet) { case DB_CONNECTION_BAD: // Verbindung konnte nicht aufgebaut werden ... break; case DB_CONNECTION_OK: // Verbindung steht break; }
Laut Funktionsdefinition ist der 1. Paramenter nen CString in dem der Maschinennamen
int connect(CString maschine,CString database,UINT port,CString user,CString password);
Der 'connect' funktioniert fehlerfrei bei 'localhost'. Ich möchte jedoch auf eine MySQL-Datenbank zugreifen, die sich auf einem anderen Rechner innerhalb des LANs befindet. Sowohl IP als auch der Rechnername ('gadmovorg') enden mit einer Message
Benutzerdefinierter Haltepunkt aus Quellcode aufgerufen bei (0x778813b1);
und einer Debug-Meldung
HEAP[SQL.exe]: Invalid Address specified to RtlFreeHeap( 420000, 924ed0 )
Kann mir jemand oder UnixTom selber sagen welche 'Namen' akzeptiert werden bzw. wie sie übersetzt werden (über die hosts-Datei?) damit ein Zugriff auf andere Rechner möglich ist?
-
Hab in einem anderen Thread gefunden das die Angabe der IP möglich ist.
m_databaseconnect.connect("db.partynet.at","martin",3306,"martin","entfernt")
Oder die IPADRESSEIch habe "192.168.68.213" eingegeben, dennoch kommt keine Verbindung zustande. Muss die IP noch in ein bestimmtes Format umgewandelt werden?
-
Normalerweise ist der Zugriff auf eine mySQL datenbank nur für localhost freigegeben. Wenn der Zugriff freigegeben ist könnte auch die Firewall auf dem anderen Rechner das port 3306 blockieren.
Kurt
-
Das werd ich heute Abend mal nachprüfen. Jedoch stellt sich mir noch die Frage, wieso der connect nicht einfach nur fehlschlägt, sondern im Debugger beim connect einfach hängen bleibt (siehe obige Fehlermeldung mit Haltepunkte+Heapfehler).
Allgemeine Frage. Wenn ich mit der eigenen IP-Adresse auf die Datenbank zugreife sollte das doch das gleiche sein, wie wenn ich per 'localhost' zugreife.
-
Gadmovorg schrieb:
Allgemeine Frage. Wenn ich mit der eigenen IP-Adresse auf die Datenbank zugreife sollte das doch das gleiche sein, wie wenn ich per 'localhost' zugreife.
Nehme an das ist das gleiche. ( muss aber nicht wenn der Datenbankserver nur Verbindungen von localhost dh. IP = 127.0.0.1 entgegennimmt ).
Kurt
-
welche VC-Version?
Connect kommt mit DB_CONNECTION_BAD zurück wenn ein Fehler aufgetreten ist.
VC7 reagiert auf eine mit VC6 compilierte sehr unterschiedlich weil die MFC auch drin ist.
-
Ich verwende VC6. Habe einen Rechner zum compilieren und einen zweiten, auf dem die Datenbank liegt.
void CSQLDlg::OnBtnConnectDB() { UpdateData(); char* err; dBase = new CMYSQLDatabase(); switch(dBase->connect(m_strHostAdresse, "test", 3306, "Gast", "open")) { case DB_CONNECTION_BAD: err = dBase->errorMessage(); MessageBox(err, "Hinweis", MB_OK); break; case DB_CONNECTION_OK: MessageBox("Verbindung aufgebaut", "Hinweis", MB_OK); break; } }
Am VC6-Rechner habe ich das Problem, dass er eben nicht aus dem Connect zurück kommt. Ich erhalte eine
"Benutzerdefinierte Haltepunkt aus Quellcode aufgerufen bei 0xAdresse"
MessageBox und die Debugmeldung
"HEAP[SQL.exe]: Invalid Address specified to RtlFreeHeap".Nach viermaliger HEAP-Meldung lande ich im case DB_CONNECTION_BAD. Der Return wert von errorMessage zeigt auf den anfang der CMYSQLDatabase Klasse bzw. auf das error[100]-Array. In dem steht folgendes:
**"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ@@D"
**
Starte ich die Applikation (Release) auf dem MySQL-Rechner funktiert der Aufbau. Habe die Rechte entsprechend erweitert, für Host '%' eingetragen, und kann nun auch mit der entsprechender IP (192.168.68.213) auf die Datenbank zugreifen.Es ist mir schleierhaft wieso ich mich nicht von einem anderen Rechner mit der MySQL-Datenbank verbinden kann. Hinzu kommt noch der HEAP-Fehler beim connect und die kryptische errorMessage. Irgendwas muss ich falsch machen, denn die Wrapper funktioniert bei euch/dir ja auch.
Falls ihr noch irgendwelche Tipps habt, lasst es mich wissen :).
-
Soo. Es gab wohl noch andere Problem mit der Datenbank. Habe sie neu drauf gespielt und jetzt bekomme ich auch nen DB_CONNECTION_OK von anderen Rechnern aus. Leider treten diese HEAP-Fehler noch immer auf. Gibt es irgendwas etwas zu beachten bei deiner DLL, wenn ich im Debugmodus arbeite? Irgendwelche VC-Einstellungen ?
Habe sowohl die header included also auch den pfad für die lib eingegeben. (Das Kompilieren läuft ja fehlerfrei)
edit:
Habe noch vergessen anzumerken, dass ich diese HEAPmeldung nur noch 3 mal bekomme und ich zum Schluss beim aufräumen (Destruktor) 3x Object dumps erhalten, jeweils mit 17 Byte.CSQLDlg::~CSQLDlg() { if(dBase) { if(dBase->connected) dBase->disconnected(); dBase->free(); // Ich nehm mal hier wird innerhalb der dBase aufgeräumt dBase = NULL; } }
-
du brauchst nichts aufräumen. lediglich wenn du die gleiche verbindung für einen weiteren select verwendet musst du free() aufrufen.
Der Destructor macht den Rest.
-
Ich werd mal direkt auf die MySQL C API zugreifen. Bin mir sicher, dass der Fehler bei mir liegt. Aber da ich keine Information drüber bekommen wo der Fehler ist(k.a. wie die errorMessage() zu verwenden ist
), hoffe auf diese Weise was rauszukriegen.
-
die bib verwendet die capi.
-
Ja, das weiß ich. Jedoch finde ich meinen Fehler nicht, bzw. wieso ich die Heapfehler bei dem connect erhalte. Habe nun die orginal Library verwendet und es läuft nun ohne Fehlermeldung... bis jetzt :).
-
Die VC6-Version wurde mit eine alten C-API gelinkt. Kann sein das es daran liegt wenn du eine andere verwendest.