MYSQL (UnixToms WrapperKlasse) connect Problem
-
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.