H
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