mysql_errno - wie fehlermeldung rausbekommen?
-
Hallo,
ich habe mir eine kleine klasse gebastelt die meine sql sachen erledigt. Funktioniert soweit auch alles sehr gut. Nur würde ich gern die Fehlermeldung wissen, wenn ein Fehler auftritt...
Also in meiner check_error() funktion in dem Dialogfenster anstatt nur "Fehler" die richtige meldung haben!?Danke & Gruß
#include "myDB.h" myDB::myDB() { } myDB::~myDB(){} wxMessageDialog* WxMessageDialog_SQL_fehler; MYSQL *mysql; void mysql_connect(); void mysql_disconnect(); void check_error(); wxString myDB::anfragen(wxString query) { MYSQL_ROW row; MYSQL_RES *res; wxString data; mysql_connect(); check_error(); mysql_query(mysql, query.c_str()); check_error(); res=mysql_store_result(mysql); check_error(); row = mysql_fetch_row(res); data=row[0]; mysql_disconnect(); return data; } bool myDB::einfuegen(wxString query){ mysql_connect(); check_error(); mysql_query(mysql, query.c_str()); check_error(); mysql_disconnect(); return true; } void myDB::mysql_connect(){ mysql=mysql_init(mysql); check_error(); mysql_real_connect(mysql, my_host, my_username, my_password, my_database, 0, NULL, 0); check_error(); } void myDB::mysql_disconnect(){ mysql_close(mysql); } void myDB::check_error(){ if(mysql_errno(mysql)){ WxMessageDialog_SQL_fehler = new wxMessageDialog(NULL, wxT("DB Fehler"), wxT("Fehler")); WxMessageDialog_SQL_fehler->ShowModal(); } }
-
-
das hab ich auch schon gelesen...werd aber nicht wirklich schlau draus
müsst ich das dann irgend wie so machen:
void myDB::check_error(){ if(mysql_errno(mysql)){ WxMessageDialog_SQL_fehler = new wxMessageDialog(NULL, wxT("DB Fehler"), wxT("Fehler: "<<mysql_errno(mysql))); WxMessageDialog_SQL_fehler->ShowModal(); }
-
ich habe es jetzt so gemacht:
void myDB::check_error(){ if(mysql_errno(mysql)){ std::stringstream s; std::string test; s<<"Fehler: "<<mysql_errno(mysql); test=s.str(); WxMessageDialog_SQL_fehler = new wxMessageDialog(NULL, wxT(test), wxT("DB Error")); WxMessageDialog_SQL_fehler->ShowModal(); s.str(""); s.clear(); }
es funktioniert. er gibt mir wenn ich einen fehler einbaue die Fehlernummer z.b. 1062. kann ich noch einbauen das er mir den Fehler beschreibt!? also was z.B. die 1062 bedeutet?
Danke & Gruß
Edit:
s<<"Fehler: "<<mysql_errno(mysql)<<" - "<<mysql_error(mysql);
damit gehts!
-
fub0815 schrieb:
das hab ich auch schon gelesen...werd aber nicht wirklich schlau draus
müsst ich das dann irgend wie so machen:
void myDB::check_error(){ if(mysql_errno(mysql)){ WxMessageDialog_SQL_fehler = new wxMessageDialog(NULL, wxT("DB Fehler"), wxT("Fehler: "<<mysql_errno(mysql))); WxMessageDialog_SQL_fehler->ShowModal(); }
ich weiß nicht, was dieses wxT bedeutet, aber versuche es doch mal so (Teile aus Deinem 2. Kommentar übernommen:
if(mysql_errno(mysql)) { std::stringstream s; s << "Fehler " << mysql_errno(mysql) << ": " << mysql_error(mysql); WxMessageDialog_SQL_fehler = new wxMessageDialog(NULL, wxT(test), wxT(s.str())); WxMessageDialog_SQL_fehler->ShowModal(); }
Ich weiß nicht, was WxMessageDialog_SQL_fehler sein soll, aber ich vermute, daß Du das Ding noch frei geben musst. Am einfachsten geht das in der Regel als Stack-Objekt. Dadurch vereinfacht sich der Code noch weiter auf:
if(mysql_errno(mysql)) { std::stringstream s; s << "Fehler " << mysql_errno(mysql) << ": " << mysql_error(mysql); wxMessageDialog d(NULL, wxT(test), wxT(s.str())); d.ShowModal(); }
Und Nur so nebenbei: Wozu weist Du nach der Messagebox dem stringstream zuerst einen Leerstring zu, dann löschst Du diesen wieder und anschliessend wird die Klasse automatisch freigegeben? Alles unnötig.
Tntnet
-
ich weiß nicht, was dieses wxT bedeutet, aber versuche es doch mal so (Teile aus Deinem 2. Kommentar übernommen:
Das "erste" wxT(test) ist die eigentliche Meldung die in der dialogbox erscheint, das zweite wxT("DB Error") ist die Fensterbeschriftung.
Und Nur so nebenbei: Wozu weist Du nach der Messagebox dem stringstream zuerst einen Leerstring zu, dann löschst Du diesen wieder und anschliessend wird die Klasse automatisch freigegeben? Alles unnötig.
richtig! hatte die stream geschichte aus einer anderen klasse von mir kopiert, da verwende ich den stream danach weiter und losche ihn also vorher. habs nur vergessen zu löschen!
Ich hatte es ja kurz nach meinem Post selbst rausgefunden(siehe Edit), trotzdem nochmal Danke!