Einbindung einer Datenbank in eine Unteransicht
-
Hat vielleicht noch ne Idee, dass der Filter auch funktioniert weil im Moment gibt er mir alle Datensätze der Tabelle aus.
CView::OnInitialUpdate();
m_pSet=((CRaumplanerDoc*)GetDocument())->GetpTabelleRaum();
if (m_pSet->IsOpen()){m_pSet->Close();}
m_pSet->m_strFilter.Format("Anzahl>=%d",hoerer);
m_pSet->Open();Danke.

-
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 DateiDanke.
-
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 + 0x23Kannst 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.