Einbindung einer Datenbank in eine Unteransicht
-
Sorry, war erst das falsche.
Hier jetzt das richtige:
> mfc71d.dll!CRecordset::Requery() Line 2038 + 0x1f C++
-
Hmm, dann ist das Recordset wohl doch noch nicht offen beim Filtern.
Dann ersetz mal das Requery durch Open.
-
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.