CRecordset: komisches Verhalten (scheinbar 3 Datensätze vorhanden, ist aber nur einer...)



  • Hallo!

    Ich habe eine Tabelle mit einem Datensatz.
    Der wird in ein Recordset gelesen und dann will ich darin vor und zurück blättern können.

    Das mache ich so:

    // ------------------------------------------------------------------------------------------------
    // ------------------------------------------------------------------------------------------------
    void CErgebnisView::OnBtnVorRe() 
    {
    	CErgebnisDoc* pDoc = dynamic_cast<CErgebnisDoc*>(GetDocument());
    	ASSERT(pDoc);
    	if (!pDoc->GetDatenRechts().IsBOF())
    	{
    		pDoc->GetDatenRechts().MovePrev();
    		ZeigeDatenAn(pDoc->GetDaten(), pDoc->GetDatenLinks(), pDoc->GetDatenRechts());
    	}
    	else
    	{
    		CLog::Melde(_T("Es sind keine älteren Daten für diese Seite vorhanden."));
    	}
    }
    // ------------------------------------------------------------------------------------------------
    // ------------------------------------------------------------------------------------------------
    void CErgebnisView::OnBtnWeiterRe() 
    {
    	CErgebnisDoc* pDoc = dynamic_cast<CErgebnisDoc*>(GetDocument());
    	ASSERT(pDoc);
    	if (!pDoc->GetDatenRechts().IsEOF())
    	{
    		pDoc->GetDatenRechts().MoveNext();
    		ZeigeDatenAn(pDoc->GetDaten(), pDoc->GetDatenLinks(), pDoc->GetDatenRechts());
    	}
    	else
    	{
    		CLog::Melde(_T("Es sind keine neueren Daten für diese Seite vorhanden."));
    	}
    }
    

    Nun müßte der mir ja eigentlich bei egal welchem Knopf melden, dass da keine weiteren Daten sind - tut er aber nicht. 😕

    Was läuft da schief?



  • !pDoc->GetDatenRechts().IsBOF()

    was machst du da denn genaut? Und was ist das - vielleicht versteh ich das jetzt gerade auch nur nicht.
    Aber eine Methode einer Methode aufrufen? Hast du nciht das Recordset als Membervariable und kannst das auf BOF oder EOF abfragen?



  • Ups, das hätte ich erklären sollen. 😃

    pDoc->GetDatenRechts() gibt ein Recordset zurück. Das ist nämlich Membervariable im Doc.
    Das wurde auch schon geöffnet und der letzte Datensatz wird angezeigt. 🙂



  • Achso, okay - dann macht das Sinn 😉

    Aber soweit sehe ich da eigentlich keinen Fehler, wenn ich nachher zeit
    haben sollte, versuch ich es mal selbst nachzubauen.

    Mal ganz dumm:

    if(!(pDoc->GetDatenRechts().IsEOF()))
    

    schonmal versucht? 🙄



  • Eben gerade, funktioniert nicht. 😞



  • darf ich als Laie mal meinen Senf dazu geben? Klar darf ich braucht ja niemand lesen 😃

    Also ich meine schon bei einer 0815 Anwendung mit einem 0815 RecSet gemerkt zu haben, dass die standard Pfeiltasten genau gleiches Problem aufweisen. wenn ich einen Datensatz habe kann ich dennoch zumindest einmal auf Pfeil vor bzw zurück drücken bevor er die Pfeile ausgraut. Kann es nicht sein, dass du folgendes machen musst?

    void CErgebnisView::OnBtnVorRe() 
    {
        CErgebnisDoc* pDoc = dynamic_cast<CErgebnisDoc*>(GetDocument());
        ASSERT(pDoc);
        pDoc->GetDatenRechts().MovePrev();
        if (!pDoc->GetDatenRechts().IsBOF())
        {
            //pDoc->GetDatenRechts().MovePrev();
            ZeigeDatenAn(pDoc->GetDaten(), pDoc->GetDatenLinks(), pDoc->GetDatenRechts());
        }
        else
        {
             pDoc->GetDatenRechts().MoveNext();
            CLog::Melde(_T("Es sind keine älteren Daten für diese Seite vorhanden."));
        }
    }
    

    Nur so ne Idee



  • Hab ne Zeile übersehen, sorry.

    Funktioniert aber irgendwie nicht, ich guck nachher mal weiter. 🙂


Log in to reply