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


Anmelden zum Antworten