Einbindung einer Datenbank in eine Unteransicht
-
void Raumabfrage2::OnDraw(CDC* pDC) { int y = 0; CString str; if (m_pSet->IsEOF()) return; m_pSet->MoveFirst(); while (!m_pSet->IsEOF()) { // pDC->TextOut(50, y, m_pSet->m_Nummer); // pDC->TextOut(150, y, m_pSet->m_Name); str.Format("%d", m_pSet->m_Anzahl); pDC->TextOut(50, y, str); m_pSet->MoveNext(); y += 20; } }Jo am besten zeigst de uns mal als was m_pSet->m_Name und m_nNummer definiert sind ... warscheinlich CStringW oder so ...
-
Es war als CStringW definiert...
Danke
-
CView::OnInitialUpdate();
//m_pSet=GetDocument()->GetpTabelleRaum();
if (m_pSet->IsOpen()){m_pSet->Close();}
m_pSet->m_strFilter=
"Anzahl=hoerer";
m_pSet->Open();Kann mir jemand sagen, wie ich diese Zeile in eine andere Ansicht als in die reguläre View einbinden kann. Bei mir kommt jetzt immer der folgende Fehler:
error C2039: 'GetpTabelleRaum' : is not a member of 'CDocument'
Danke schon mal im Voraus!!!
-
Wo hast Du denn die Funktion GetpTabelleRaum() definiert? Sicher nicht in Deiner Dokumentenklasse, sonst würde er ja über den Zeiger drauf zugreifen können. Außerdem verstehe ich nicht ganz was Du mit dem Aufruf m_pSet=GetDocument()->GetpTabelleRaum(); machen willst.
-
Bartnelke schrieb:
error C2039: 'GetpTabelleRaum' : is not a member of 'CDocument'
Du musst casten!
-
Was bitte schön ist casten????

Danke schon mal im Voraus.
-
Casten ist eine Typumwandlung.
In diesem Fall von CDocument in den Typ deiner Dokumentenklasse.Das geht (im einfachsten aber fehleranfälligsten Fall) so:
m_pSet=((CDeinDoc*)GetDocument())->GetpTabelleRaum();Ersetze CDeinDoc nun durch den Namen deiner Dokumentenklasse und der Compiler sollte glücklich sein.

-
Casten bedeutet Typumwandlung. Aber beantworte doch erst mal die Fragen wenn Du willst das wir Dir helfen? Wo ist denn nun die Funktion definiert? Was gibt denn die Funktion als Rückgabewert zurück?
-
AndyDD schrieb:
Wo ist denn nun die Funktion definiert? Was gibt denn die Funktion als Rückgabewert zurück?
Die Funktion ist im CDocument definiert und gibt als Wert m_TabelleRaum zurück, die auch als Variable im Document definiert wurde. Der Hinweis von estartu hat schon das Problem gelöst.
Danke.
Kann mir vielleicht noch jemand sagen, wie ich die Datenbank so filtern kann, dass ich die Datensätze bekomme, die größer als der Wert ist, den der Benutzer eingegeben hat?
Mein Vorschlag:
m_pSet->m_strFilter="Anzahl=hoerer";
da wird als Fehler angezeigt, aber erst nach dem Start der Oberfläche, dass er zuwenig Parameter übergeben wurden.Danke schon mal im Voraus.

-
Wenn Du auf Werte prüfst die größer einer Vorgabe sein sollen, dann darf man ja kein Gleichheitszeichen nehmen. Wenn ich das richtig verstanden habe, so steht ja in m_strFilter die WHERE-Anweisung einer SQL-Anfrage.
m_pSet->m_strFilter="Anzahl>Vorgabe";Die Fehlermeldung könnte davon kommen, dass Du eventuell noch den Tabellennamen angeben musst. Probier mal das:
m_pSet->m_strFilter="[DeinTabellenname].[Anzahl]>Vorgabe"; //oder m_pSet->m_strFilter="[Anzahl]>Vorgabe";
-
Die Vorgabe soll der Benutzer aber in einen Dialog eingeben und dieses Wert habe ich als hoerer definiert und dieser soll mit Zahl aus der Datenbank verglichen werden.
Danke.
-
m_pSet->m_strFilter.Format("Anzahl=%s", hoerer);Falls es als String eingegeben wird, sonst eben mit %d.
-
estartu schrieb:
m_pSet->m_strFilter.Format("Anzahl=%s", hoerer);Es escheinen bei mir trotz dem obigen Befehl alle Einträge der Datenbank.
Woran kann das jetzt liegen???Danke

-
Hast du nach dem Setzen des Filters nochmal neu geladen?
Mach danach malm_pSet->Requery();
-
Nachdem ich das Programm debuggert habe und das entsprechende Unterfenster öffnen will, kommt eine Fehlermeldung:
Debug Assertion Failed!
Was nun???
Danke im Voraus schon mal.
-
Bartnelke schrieb:
Nachdem ich das Programm debuggert habe und das entsprechende Unterfenster öffnen will, kommt eine Fehlermeldung:
Debug Assertion Failed!
Was nun???
Danke im Voraus schon mal.Lesen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-120832.html
-
Hallo,
was bitte ist an dieser Zeile falsch?
ASSERT(IsOpen());
Danke schon mal im Voraus.
-
An der Zeile ist nichts falsch.
Hast du das verlinkte gelesen? Diese Zeile soll dir mitteilen, dass du was vergessen hast.

Es wurde noch kein Open aufgerufen.Schau in den Callstack, welcher Befehl das auslöst und dann zeig mal her.
-
Das ist, was mir angezeigt wird:
Unhandled exception at 0x7c1ea077 (mfc71d.dll) in Raumplaner.exe: User breakpoint.
-
Sorry, war erst das falsche.
Hier jetzt das richtige:
> mfc71d.dll!CRecordset::Requery() Line 2038 + 0x1f C++