Frage zum Artikel "Datenbank mit C"
-
Hallo,
ich versuche gerade die Daten meines Programms in meine mySQL-DB zu schreiben.
Mein Codeschnipsel ist in Anlehnung an euren Artikel entstanden.Der Codeschnipsel funktioniert, nur leider steigt die Speicherauslastung. Ein memory leak wird nicht angezeig ( vom VC++ Debugger ). Woran liegt das? Gebe ich den Speicher irgendwo nicht frei?
// Variablen CString cmd; int rows =-1; CString str_updateID; int int_updateID =-1; CString artikelbezeichnung, warengruppe, orderbuch_volumen, artikelID; vector<CString> updated_artikelIDs; // mySQL Variablen MYSQL *connection; MYSQL_RES *ergebnis; MYSQL_ROW zeile; int anz; // Initialisierung connection = mysql_init(NULL); // Verbindung herstellen if(mysql_real_connect(connection,"localhost","abc","xyz","MYlog",0,NULL,0) == NULL) { // Verbindungsfehler mysql_close(connection); return false; } // Aktuelle update_id abfragen cmd = "SELECT `data` FROM `config` WHERE `name` = 'update_id' LIMIT 1"; if((mysql_query(connection, LPCSTR(cmd)) == 0)) { ergebnis = mysql_store_result(connection); zeile = mysql_fetch_row(ergebnis); str_updateID = zeile[0]; int_updateID = atoi(str_updateID)+1; str_updateID.Format("%i",int_updateID); mysql_free_result(ergebnis); }else { // Fehler beim Ausführen mysql_close(connection); return false; } // Artikel-Schleife for( int i=0; i<size; i++ ) { // Artikel bereits eingetragen? cmd.Format("SELECT `id` FROM `artikel` WHERE `warengruppe` = '%s' AND `artikelbezeichnung` = '%s' LIMIT 1",warengruppe,artikelbezeichnung); if((mysql_query(connection, LPCSTR(cmd)) == 0)) { ergebnis = mysql_store_result(connection); rows = (unsigned long) mysql_num_rows(ergebnis); zeile = mysql_fetch_row(ergebnis); if(rows==1) artikelID = zeile[0]; mysql_free_result(ergebnis); // Wenn ja, dann aktualisieren if(rows==1) { cmd.Format("UPDATE `artikel` SET `orderbuch_volumen` = '%s' WHERE `id` = '%s' LIMIT 1",orderbuch_volumen,artikelID); if((mysql_query(connection, LPCSTR(cmd)) != 0)) { // Fehler beim Ausführen mysql_close(connection); return false; } // artikelID merken, damit dieser später die neue UpdateID zugewiesen werden kann updated_artikelIDs.push_back(artikelID); }else // Wenn nein, dann eintragen { cmd.Format("INSERT INTO `artikel` ( `warengruppe` , `artikelbezeichnung`, `orderbuch_volumen`) VALUES ( '%s', '%s', '%s')",warengruppe ,artikelbezeichnung, orderbuch_volumen); if((mysql_query(connection, LPCSTR(cmd)) != 0)) { // Fehler beim Ausführen mysql_close(connection); return false; } // artikelID des neuen artikel abfragen cmd.Format("SELECT `id` FROM `artikel` WHERE `warengruppe` = '%s' AND `artikelbezeichnung` = '%s' LIMIT 1",warengruppe,artikelbezeichnung); if((mysql_query(connection, LPCSTR(cmd)) == 0)) { ergebnis = mysql_store_result(connection); zeile = mysql_fetch_row(ergebnis); artikelID = zeile[0]; mysql_free_result(ergebnis); // artikelID merken, damit dieser später die neue UpdateID zugewiesen werden kann updated_artikelIDs.push_back(artikelID); }else { // Fehler beim Ausführen mysql_close(connection); return false; } } } [...]
Vielen Dank!
Michael