Mehrdimensionaler vector



  • Hi,
    hab eine Anfängerfrage.

    Fall: Ein SQL-statement "Select * from irgendwas" liefert eine unbekannte Anzahl von Spalten. Alle Spalten sind vom Typ varchar, im Programm dann am einfachsten CString.

    Wie bekomme ich nun einen vector hin, der auf eine variable Anzahl von Spalten vorbereitet ist. Und wie greife ich dann auf die einzelnen Felder zu?

    Bisher hab ich ein Klasse mit einer definierten Anzahl von Spalten (hier 2):

    class MyData
    {
    public:
    	MyData()
    	{
    		id = _T("");
    		name = _T("");
    	}
    CString id;
    CString name;
    
    };
    ...
    vector<MyData> myTable;
    

    dann fülle ich den vector iterativ:

    for( int i ...
    myTable.push_back( MyData() );
    myTable[i].id = mRecord[0];
    myTable[i].name = mRecord[1];
    

    Wie kann man sowas universeller gestalten? Oder besser, was könnt ihr empfehlen, wenn man im Prinzip eine Tabelle von n*n benötigt, auf die bequem per Zeilen/Spalten-Index zugegriffen werden kann. Das ganze muss nicht unbedingt eine Datenklasse sein, sollte aber schon eine Membervariable sein auf die die Methoden der Klasse zugreifen können, da das Problem ja darin besteht, am Anfang der Programmausführung nicht zu wissen wie viele Spalten anfallen werden. Sowas wie char* x[100000][200000] will ich gerne vermeiden 🙄

    Über ein paar Anregungen würde ich mich freuen.

    👍
    koreson



  • Falls du über ODBC zugreifst, nimm DTL als library und
    im falle von unbekannten feldern dann dtl::DynamicDBView.
    www.dtemplatelib.sourceforge.net

    Statt CString solltest du evtl. std::string nehmen,
    und wenn schon in MFC, dann solltest du CRecordset dir ansehen.

    Devil



  • Und wenn dus selber machen willst benutz std::vector<std::vector<foo> >.



  • Oh, das ging ja schnell.

    Ich nutze MySQL über TCP/IP.
    Klappt auch alles super, nur jetzt möchte ich virtuelle CListCtrls machen und muss das recordset zwischenspeichern. Ist auch bis zu 10 mal schneller, lohnt sich also.
    Ist
    vector< vector< CString > > myTable;
    der richtige Ansatz?
    Wenn ja, wie benutzt man denn dann da die push_back()-Funktion, also bezgl der Indizes? Notation und so.
    Hab schon einiges durchprobiert, bekomme aber immer einen Syntaxfehler.
    Ist string hier besser als CString?
    Danke.

    koreson



  • Vielen Dank für den pädagogischen Ansatz.
    Da googels sich schon leichter, mehr aber auch nicht.
    Problemn ist gelöst. Alles klar.

    gruss
    koreson


Anmelden zum Antworten