Einbindung einer Datenbank in eine Unteransicht



  • Kann mir jemand helfen, dass der Wert, den ich un einem modalen Dialog eingebe, soll mit den Werten einer Datenbank verglichen werden und dann sollen mir die Datensätze angezeigt werden, welche größer sind.
    😕 😕 😕 😕 😕 😕 😕 😕
    Vielen Dank schon mal.



  • Hast du schon meinen Artikel dazu gelesen?
    Den Link dahin findest du in der Ankündigung hier im MFC Forum.
    🙂



  • Kannst du mir sagen, wo du die Zeile "CFarbenSet farbSet;" definiert hast.

    Danke. 🙂



  • 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


Anmelden zum Antworten