CStringArray mit Daten aus Datenbank übergeben



  • Hi,

    hab folgendes Problem. Möchte aus einer Tabelle, die die Spalten ID, Name und Comment hat, die Name-Spalte komplett auslesen und in ein CStringArray schreiben. Die Funktion soll dann dieses Array zurückgeben...

    habe bisher folgendes... aber ein paar probleme.

    1. wenn ich der Funktion den Rückgabewert CStringArray gebe und das Array zurückgeben will kriege ich folgenden Fehler

    Fehler 1 error C2248: "CObject::CObject": Kein Zugriff auf private Member, dessen Deklaration in der CObject-Klasse erfolgte. c:\programme\microsoft visual studio 8\vc\atlmfc\include\afxcoll.h 593

    2. habe ich das Gefühl, daß am Ende in dem Array nur ein Wert steht, auch wenn er öfter durch die While-Schleife läuft.

    void Database::getErrorClasses(){
    	choose_database("ErrorClass");
    	connect();
    	if((mysql_select_db(MySQL, db)) != 0){
    		throw "Database doesn't exists. Please choose an existing Database.";
    	}
    
    	MYSQL_RES  *result;
    	MYSQL_ROW  row;
    	CStringArray errorName;
    
    	mysql_query(MySQL, "SELECT NAME FROM daten ORDER BY ID ASC");
    
    	result = mysql_use_result(MySQL);
    	while (row = mysql_fetch_row(result)){
    
    		errorName.Add(row[0]);
    	}
    
    	mysql_free_result(result); 
    }
    

    würde mich über Hilfe sehr freuen.
    Danke.



  • Das ist zwar eher ein MFC Problem, aber ok:
    CStringArray als Rückgabewert ist vielleicht nicht so praktisch. Glaube das geht auch gar nicht, weil die Klasse keinen Zuweisungs-Operator besitzt 🙂 Mach das besser mit einer Referenz, ist ohnehin schneller als das angedachte Vorgehen:

    void bla::Dawoduherkommst()
    {
        CStringArray errorName;
        if (getErrorClasses(errorName))
            // alles super
        else
            // nich so dolle
    }
    
    bool Database::getErrorClasses(CStringArray& refErrorClasses)
    {
        choose_database("ErrorClass");
        connect();
        if((mysql_select_db(MySQL, db)) != 0)
        {
            throw "Database doesn't exists. Please choose an existing Database.";
            return false;
        }
    
        MYSQL_RES  *result;
        MYSQL_ROW  row;
    
        mysql_query(MySQL, "SELECT NAME FROM daten ORDER BY ID ASC");
    
        result = mysql_use_result(MySQL);
        while (row = mysql_fetch_row(result))
        {     
            refErrorClasses.Add(row[0]);
        }
    
        mysql_free_result(result);
        return true; 
    }
    


  • Mh versteh ich nicht ganz...

    Ich beschreib nochmal genauer was ich möchte. Also ich hab einen MFC Dialog mit einem Drop Down Menü. Nun möchte ich die Namen, welche in der "Name" Spalte stehen in dieses Drop Down Menü einfügen.

    Ich dachte mir, dass ich erstmal aus der Datenbank die Namen in ein Array schreibe und dann aus diesem Array einfach die Namen zu dem Drop Down Menü hinzufüge.

    Die Daten aus der Datenbank auslesen funktioniert schon, das Problem ist eher, die Daten irgendwie zwischen zu speichern um die dann in das Drop Down Menü reinzuschreiben.



  • moeporfant schrieb:

    ...
    Die Daten aus der Datenbank auslesen funktioniert schon, das Problem ist eher, die Daten irgendwie zwischen zu speichern um die dann in das Drop Down Menü reinzuschreiben.

    Hä? Ja wenn du sie fertig im Array hast, wo ist dann noch das Problem? 😕



  • mein Problem ist, wie kann ich das Array nun "returnen"...

    wie muss ich die Funktion und das CStringArray definieren.


Anmelden zum Antworten