Datenabgleich bei Refresh in Map, ListCtrl & DB
-
Hallo zusammen,
Juhu das Forum ist wieder zu erreichen, versuche es seit mehreren Stunden

Folgendes Problem, ich lese aus einer Datenbank, Datensätze in eine Map ein, den Inhalt dieser Map schreibe ich in einen ListCtrl. Funktioniert auch.
Aber, ich möchte nun bei einem Refresh, lediglich die Daten aktualisieren die sich noch nicht in der Map befinden und jene welche sich nicht mehr in der Datenbank befinden aus der Map entfernen.
Das hinzufügen klappt bestens, aber die Sache mit dem entfernen bekomme ich einfach nicht hin. Wie könnte ich das realisieren, das ein Eintrag aus dem ListCtrl als auch aus der Map entfernt wird, wenn dieser nicht mehr in der DB enthalten ist????
Meine Map hat folgende Aufteilung:
CString (Identkey) und Struct*, das Struct besteht aus CStrings und Bools:
Header:struct SEvents { CString m_AEntry; CString m_BEntry; CString m_CEntry; CString m_DEntry; BOOL m_bBool1; }; std::map<CString, Struct*> DB_Mapcpp:
Struct DB; std::map<CString, Struct* >::iterator nPos = DB_Map.find(DB.m_Identkey); if( nPos == DB_Map.end() ) { Struct* DBinMap = new Struct( DB ); DB_Map.insert(std::make_pair(DBinMap->m_Identkey, DBinMap)); }Diese ganz Geschichte wird bei jedem Refresh neu durchlaufen, dabei wird die Map (DB_Map) komplett geleert, so verhindere ich, das beim hinzufügen in den ListCtrl die DB-Einträge sich verdoppeln. Sprich das ListCtrl darf leider nicht komplett geleert werden (DeleteAllItems()). Mein Problem ist jetzt halt festzustellen ob ein Eintrag im ListCtrl überhaupt noch in der DB existiert, tut er das nicht muss er entfernt werden, ansonsten ignoriert.
Kann mir jemand einen Tipp geben wie ich das umsetze? Ich stehe auf dem Schlauch.
Vorweihnachtliche Grüße :xmas1:
-
Wenn das ListCtrl von der Map gefüllt wird solltest Du dir überlegen wie Du die Map füllst.
ListCtrl jedesmal neu füllen ist nicht gut den das Dauert "sehr lange" wie so alles was ausgegeben wird.
Du solltest also Feststellen was neue ist und was gelöscht wurde und dann nur das im LCtrl upzudaten.
Du ließt aus der DB ein und vergleichst die Map mit deinem DB-Objekt.
Somit weiß du was in der Map geändert wurde und kannst im LCtrl darauf reagieren.
Also lieber im Hintergrund etwas vergleichen als immer neue einzulesen.