Problem mit Listenauffüllen aus Db



  • Hallo an alle.

    Ich habe ein kleines Problem mit meiner CListView in Verbindung mit einer Datenbank.
    Ich lese Daten aus der Access Db in eine CListView. Dort habe ich 4 Spalten.
    In der Db habe ich auch 4 Spalten. Wenn ich dann die Liste in OnUpdate() fülle, dann wird nur die erste Spalte mit den Daten gefüllt. Wenn ich dann (zur Laufzeit) m_strFilter ändere, schreibt es mir alle Daten korrekt in die Liste.

    Hier mal der Code:

    void CDbView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
    {
        CDbDoc * pDoc = GetDocument();
    
        GetListCtrl().DeleteAllItems();
    
        int j = 0;
    
        pDoc->m_Set.Requery();
    
            for (pDoc->m_Set.MoveFirst(); pDoc->m_Set.IsEOF() == FALSE; 
                 pDoc->m_Set.MoveNext())
        {
            GetListCtrl().InsertItem(j, "a");
            GetListCtrl().SetItemText(j, 0, (LPCSTR)pDoc->m_Set.m_Spalte1);
            GetListCtrl().SetItemText(j, 1, (LPCSTR)pDoc->m_Set.m_Spalte2);
            GetListCtrl().SetItemText(j, 2, (LPCSTR)pDoc->m_Set.m_Spalte3);
            GetListCtrl().SetItemText(j, 3, (LPCSTR)pDoc->m_Set.m_Spalte4);
            j++;
        }
        pDoc->m_Set.Close();
    }
    

    nun, kann mir einer erklären was ich falsch mache?

    Achja: m_Set wird in der Doc Klasse (Konstruktor) deklariert, und mit Open() geöffnet



  • Soweit ich mich recht erinnere, liefert Dir InsertItem einen Integer-Wert zurück. Diesen musst Du dann anstelle von j bei SetItemText eintragen!!!
    Der Wert wird nicht unbedingt an der gewünschten Position eingetragen!
    Ob das jetzt wirklich der Fehler ist, kann ich nicht sagen, jedoch hatte ich so auch schon merkwürdige Ergebnisse!
    Das liegt (glaub ich) an der internen Sortierung.

    Viel Erfolg!



  • Davon mal abgesehen:
    Gehst Du davon aus, dass Dein Recordset nur 1x aktualisiert wird oder warum schließt Du den anschließend (gehst aber intern davon aus, dass er bei Eintritt in die Methode geöffnet ist)?
    Vielleicht solltest Du noch sowas einbauen:

    if (IsOpen())
     Requery();
    else
     Open();
    //...
    


  • Nee das alles funzt auch nicht.
    Die Sub Einträge werden beim ersten mal einfach nicht angezeigt. 😕



  • hallo...

    vielleicht hilft dir mein source

    while( !reczeit.IsEOF()  )
        {
    
                // in CListCtrl einfügen
            long item = m_list.InsertItem(0,reczeit.m_Datum);
            m_list.SetItemText(item,1,reczeit.m_ZeitEin);
            m_list.SetItemText(item,2,reczeit.m_ZeitAus);
            m_list.SetItemText(item,3,reczeit.m_Sollzeit);
            m_list.SetItemText(item,4,reczeit.m_IstZeit);
            //m_IstZeit);
    
            // Aktellen Datensatz um eins weitersetzen
            reczeit.MoveNext();
    
        }
    

    ich habe es so geloest
    ich habe den link nicht gefunden wo du noch mehr darüber finden kannst ich suche aber weiter....

    mfg uwe



  • Ok, danke erstmal für den Source.
    Werde ihn gleich mal ausprobieren.



  • D'OH auch das geht nicht.
    Schon langsam steigt mir dieser Kram an den Hals.
    Ach Ja:
    Kennt jemand eine "WinMgmt.exe" Anwendung. Sie ist bei mir im system32 Ordner und wenn man sie löscht erstellt sie sich nach einiger Zeit wieder.
    Das blöde ist, dass sie mir alle 2 Minuten eine Speicherzugriffsverletzung anzeigt. Und das kann in diesen Zeiten ziemlich nerven.
    Zur Information: Ich benutze 2 Betriebssysteme (Win 2000, Win ME)


Anmelden zum Antworten