Einbindung einer Datenbank in eine Unteransicht



  • Das musst du mit deiner Recordsetklasse ersetzen.



  • Kann mir mal jemand die Definition von der CRecordsetklasse zeigen, denn im Moment sehe ich in meinem Programm den Wald vor lauter Bäumen nicht.

    Danke.



  • Okay, dann andersrum: Zeig mal die Deklaration von deinem m_pSet.



  • CTabelleRaum* m_pSet;
    sie sieht so aus und steht in der ...View.h Datei

    Danke.



  • Okay, dann musst du statt

    CFarbenSet farbSet;
    

    das schreiben

    CTabelleRaum m_raumSet;
    

    Und den Rest dann auch an deine Tabelle anpassen. Du hast ja sicherlich andere Felder als ich. 😉



  • Okay, soweit habe ich es verstanden...

    Nur kommt jetzt eine Fehlermeldung, aus der Zeile:
    _AFXDBCORE_INLINE BOOL CRecordset::IsEOF() const
    { ASSERT(IsOpen()); return m_bEOF; }

    beim Callstack steht das drin:
    > mfc71d.dll!CRecordset::IsEOF() Line 54 + 0x23

    Kannst du mir damit auch noch helfen???

    Danke. 🙂



  • Probieren wir es mal mit Hilfe zur Selbsthilfe 😉
    Was macht diese Zeile?

    ASSERT(IsOpen());
    

    Und wo in deinem Code steht der grüne Pfeil? (Dazu musst du im Callstack gucken.)



  • Der grüne Pfeil steht auf dieser Zeile:
    if(m_raumSet.IsEOF()){return;}

    ASSERT(IsOpen()) bedeutet doch, dass überprüft wird, ob was offen ist.
    Kann es sein, dass fehlt, was offen sein muss???

    Danke. 🙂



  • Bartnelke schrieb:

    ASSERT(IsOpen()) bedeutet doch, dass überprüft wird, ob was offen ist.
    Kann es sein, dass fehlt, was offen sein muss???

    Fast.
    Wenn du den Artikel nochmal angugst, findest du ganz unten ne Referenz. Da steht drin, dass das Recordset offen sein muss, bevor man IsEOF aufruft.
    Du hast also einfach das Open vergessen. 🙂

    Es fehlt also nicht das was offen sein soll - sondern es ist einfach noch zu.



  • Woran liegt das wieder, das alle Werte, die in der Datenbank sind, ausgegeben werden???

    Der Code:

    ...::OnDraw(CDC* pDC)
    {
            CString str;
    	CTabelleRaum m_raumSet;
    	m_raumSet.Open();
    	if(m_raumSet.IsEOF()){return;}
    	m_raumSet.MoveFirst();
    	while(!m_raumSet.IsEOF())
    	{
    		pDC->TextOut(100,y,m_raumSet.m_Nummer);
    		pDC->TextOut(200,y,m_raumSet.m_Name);
    		str.Format("%d",m_raumSet.m_Anzahl);
    		pDC->TextOut(50,y,str);
    		m_raumSet.MoveNext();
    		y+=20;}
    	}
    }
    
      ... ::OnInitialUpdate()
    {	
    	CView::OnInitialUpdate();
    	CTabelleRaum m_raumSet;
    	m_raumSet.m_strFilter.Format(_T("[Anzahl]>%d"),hoerer);
    	m_raumSet.Open(); 
    }
    

    Danke. 🙂



  • Wie lange leben Variablen? 😃



  • Variablen leben so lange bis die Methode abgeschlossen wird.
    Danke für die Hilfe.
    🙂 🙂 🙂 🙂



  • Bartnelke schrieb:

    Variablen leben so lange bis die Methode abgeschlossen wird.
    Danke für die Hilfe.
    🙂 🙂 🙂 🙂

    Es sei denn, es sind Membervariablen der Klasse. 🙂
    Kein Problem.



  • Kann mir vielleicht jemand helfen und mal die Definition von
    farbSet.SetBezeichnunggeben.

    Des weiteren habe ich ein Problem mit dem Löschen einer Datenbankzeile.
    Mit dem im Artikel angegebenen Code:

    **CFarbenSet farbSet;
    farbSet.Open();
    farbSet.Suche(Variable);

    farbSet.Delete(); // Diese Zeile löschen
    if (!farbSet.Update())
    {
    AfxMessageBox(_T("Es wurde nicht gespeichert."));
    }
    farbSet.Requery();**

    löscht es bei mir die Zeilen nach dem Primärschlüssel.
    Was kann ich tun, damit es nur die markierte Zeile in der Listbox löscht.



  • Bartnelke schrieb:

    Kann mir vielleicht jemand helfen und mal die Definition von
    farbSet.SetBezeichnunggeben.

    Klar, nur wird es dir nicht viel helfen fürchte ich. 😕

    bool SetBezeichnung(CString f_strBezeichnung) const;
    

    Eine stinknormale Set-Funktion eben.

    Was kann ich tun, damit es nur die markierte Zeile in der Listbox löscht.

    Du musst den "Cursor" des Recordset auf die zu löschende Zeile positionieren.
    Für genauere Hilfe bräuchte ich mal wie dein Recordset aussieht (welche Variablen sind drin?) und welchen Wert du für die Auswahl aus der Listbox hast.

    Hast du die ID vermerkt, wie ich das in den Beispielen gemacht habe?
    Combobox lässt sich ja leicht an Listbox anpassen.



  • Das mit der SetBezeichnung hat mir nicht wirklich geholfen.

    Was im Recordset steht:
    CTabelle1::CTabelle1(CDatabase* pdb)
    : CRecordset(pdb)
    {

    m_Name = L"";m_Nummer = 0;m_Mo730900 = FALSE;m_Mo9151045 = FALSE;
    m_Mo11001230 = FALSE;m_Mo14001530 = FALSE;m_Mo16001730 = FALSE;
    m_Mo18001930 = FALSE;m_DI730900 = FALSE;m_DI9151045 = FALSE;
    m_DI11001230 = FALSE;m_DI14001530 = FALSE;m_DI16001730 = FALSE;
    m_DI18001930 = FALSE;m_Mi730900 = FALSE;m_Mi9151045 = FALSE;
    m_Mi11001230 = FALSE;m_Mi14001530 = FALSE;m_Mi16001730 = FALSE;
    m_Mi18001930 = FALSE;m_Do730900 = FALSE;m_Do9151045 = FALSE;
    m_Do11001230 = FALSE;m_Do14001530 = FALSE;m_Do16001730 = FALSE;
    m_Do18001930 = FALSE;m_Fr730900 = FALSE;m_Fr9151045 = FALSE;
    m_Fr11001230 = FALSE;m_Fr14001530 = FALSE;m_Fr16001730 = FALSE;
    m_Fr18001930 = FALSE;
    m_nFields = 32;
    m_nDefaultType = dynaset;
    }

    und irgendwie kann ich bei der Listbox nicht das AddString und das SetItemData nicht herholen.



  • Bartnelke schrieb:

    Das mit der SetBezeichnung hat mir nicht wirklich geholfen.

    Hatte ich befürchtet, aber du sollst ja nicht sagen können, dass dir Infos vorenthalten werden. 😉

    und irgendwie kann ich bei der Listbox nicht das AddString und das SetItemData nicht herholen.

    Wieso?
    Ich habe gerade extra in die MSDN geschaut.
    http://msdn2.microsoft.com/en-gb/library/2cekde96.aspx
    http://msdn2.microsoft.com/en-gb/library/ck636w45.aspx
    http://msdn2.microsoft.com/en-gb/library/xsyk39cx.aspx



  • da muss zwischen den Variablennamen und deAddString bzw. SetItemData ein Pfeil hin und den habe ich nicht gemacht, weil in dem Artikel das ganze mit Punkt steht.

    Für die Auswahl aus der ListBox habe ich den Wert m_Vorlesender.



  • Bartnelke schrieb:

    da muss zwischen den Variablennamen und deAddString bzw. SetItemData ein Pfeil hin und den habe ich nicht gemacht, weil in dem Artikel das ganze mit Punkt steht.

    Och, woher soll ich denn wissen, dass du mit einem Zeiger arbeitest? 🙄
    Solche Anpassungen fallen unter Grundwissen, was ich voraussetze.

    m_Vorlesender kann ich im Recordset nicht finden.
    Wie identifizierst du denn die Datensätze eindeutig? Mir fehlt da sowas wie eine ID. 😕
    (Datenbankdesign-Grundlagen.)



  • Die ID ist die Nummer.
    Und m_Name und m_Vorlesender sollten verglichen werden und gleich sein um es zu löschen.
    🙂 🙂 🙂


Anmelden zum Antworten