Einbindung einer Datenbank in eine Unteransicht
-
Ich schreibe ein Programm mit MFC und möchte eine Datenbank in eine Unteransicht aufrufen und Daten eingeben.
Das Programm ist eine SDI.
Zum einem bekomme ich für den Teil
"pDC->TextOut(150,y,m_pSet->m_Name);",
den ich aus einen Buch abgeschrieben habe,folgenden Fehler:
'BOOL CDC::TextOutA(int,int,const CString &)' : cannot convert parameter 3 from 'CStringW' to 'const CString &'Zum anderen will ich die Zeile
m_pSet=&GetDocument()->m_TabelleRaum;
gerne in der Unteransicht haben, aber der Computer kennt sie nicht.Könnt ihr mir bitte helfen?
-
Das mit dem CString sieht nach Unicode-Problem aus. Zeig mal deinen Aufruf.
-
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;
}
}
ich hoffe, dass ist was du brauchst.
-
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.