Einbindung einer Datenbank in eine Unteransicht
-
Was für ein Typ ist m_Vorlesender?
Ich dachte, das sei ein CString, aber dagegen spricht das, was du abgeschrieben hast...
-
Also in Datei.h:
CString m_Vorlesender;in der Datei.cpp:
, m_Vorlesender(_T("")) DDX_LBString(pDX, IDC_LIST1, m_Vorlesender);Was für ein Typ ist m_Vorlesender?
Ich dachte, das sei ein CString, aber dagegen spricht das, was du abgeschrieben hast...so hatte ich das auch gedacht.

-
Mach doch bitte mal über die if ein
TRACE(m_Vorlesender);und guck ob der was ausgibt.
Interessant wäre auch noch ein Screenshot (reicht der Ausschnitt mit der lokalen Überwachung) in dem Moment.
Evtl. verstehe ich da was falsch oder du hast doch an der falschen Stelle geguckt.
-
Wo gibt er denn den Wert von Trace aus???
Danke.
-
In der Debugausgabe, steht aber auch in dem Artikel, den ich dir verlinkt habe.
Wenn du es nicht findest, geht auch einAfxMessageBox(m_Vorlesender);
-
Also die Ausgabe des Wertes der Variable m_Vorlesender ist leer.
Den Screenshot habe ich dir per Mail geschickt.Danke.
-
Ich habe schon zurückgemailt.

In der Kurzfassung (für Mitleser): Der String ist leer, du hast vermutlich UpdateData(TRUE) vergessen.
-
Danke.

Muss ich damit die Listbox upgedatet wird, was in die Einlesefunktion schreiben oder nachdem die Löschfunktion getätigt wurde???
-
Ich würde am Ende der Löschfunktion (also die, deren Code hier diskutiert wird) nochmal die Einlesefunktion aufrufen.
Und am Anfang der Einlesefunktion musst du die Liste provisorisch leeren, sonst hast du alles doppelt.
-
Also die Funktion, die die Listbox füllt, ist folgende:
void Dozent2::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)ich muss nun OnUpdate(???) hinschreiben, in die andere Funktion .
Was muss ich aber für die Fragezeichen hinschreiben. Denn wenn ich es Leer gelassen habe und wenn ich TRUE hingeschrieben, kammen immer Fehler.Oder bin ich wieder ganz falsch???

Danke.
-
Hmm, da hast du zwei Möglichkeiten:
Die einfache: Du lagerst das Füllen der Listbox in eine extra Funktion (z.b. FuelleListe) aus und rufst die von beiden Stellen aus auf.

Die von der ich nicht sicher bin ob es geht:
OnUpdate(this, NULL, NULL);Sollte compilieren, evtl. auch funktionieren, aber irgendwie widerstrebt mir die Variante.

-
void Dozent2::OnBnClickedLoeschen() { UpdateData(TRUE); CTabelle1 m_TabelleDozent; m_TabelleDozent.Open(); if (m_TabelleDozent.IsBOF()) { // Das Recordset ist leer } else { // Vorne anfangen m_TabelleDozent.MoveFirst(); while(!m_TabelleDozent.IsEOF()) { // Stimmt die Kombination? if (m_TabelleDozent.m_Name == m_Vorlesender) { m_TabelleDozent.Delete(); // Diese Zeile löschen return; } m_TabelleDozent.MoveNext(); // Weiter } } Fuellen(); }Kann es sein das meine Funktion Fuellen an der falschen Stelle ist???
Den beim Ausführen wurde es immer noch nicht upgedatet.Danke.

-
Nana, denk mal scharf nach:
Was passiert, wenn der was findet und löscht?Oder anders, wenn du nicht drauf kommst: Setz einen Breakpoint in Zeile 26 und lass was löschen.

-
Okay, die Funktion Füllen() habe ich in Zeile 21 geschrieben, weil an der Stelle wo ich sie erst hatte, niemals durchlaufen wurde.
Jetzt ist es aber so, wenn ich an der Zeile ein Breakpoint setze, dann funktioniert dieses.
Wenn ich das Programm aber ohne Breakpoint laufen lasse, dann aktualisiert sie die Datenbank nicht.
Was ist den nun schon wieder verkehrt???
Danke.
-
Bartnelke schrieb:
Okay, die Funktion Füllen() habe ich in Zeile 21 geschrieben, weil an der Stelle wo ich sie erst hatte, niemals durchlaufen wurde.

Jetzt ist es aber so, wenn ich an der Zeile ein Breakpoint setze, dann funktioniert dieses.
Wenn ich das Programm aber ohne Breakpoint laufen lasse, dann aktualisiert sie die Datenbank nicht.
Was ist den nun schon wieder verkehrt???
Danke.
Puh, keine Ahnung.

Mach mal ne Messagebox statt nem Breakpoint.
-
Also er zeigt mir dann auch die Messagebox an.
Kann es sein, dass ich die Datenbank vielleicht vorher noch schließen muss???

Danke.
-
Versuchs doch einfach.

-
Also nach dem ich sie geschlossen hatte, funktionierte es.
Aber jetzt habe ich noch ne Frage:
Ich will die Daten von der Datenbank im Dialog anzeigen lassen.
Die Felder sind schon alle definiert. Mein Vorschlag ist:void Dozent2::OnLbnDblclkList1() { UpdateData(TRUE); m_neuervorlesender=m_Vorlesender; Invalidate(); }Nur leider funktioniert das nicht: Was ist daran falsch???
Danke.

-
Das ist kein View.
UpdateData(FALSE);wäre es.
PS: Was macht UpdateData denn? Und was macht der Parameter?
-
UpdateData(TRUE) ruft intern DoDataExchange auf und uberträgtden Inhalt auf die Controls in den Variablen.
UpdateData(FALSE) sorgt dafür, das die die Daten von den Variablen auf die Controls überträgt.Aber noch ne Frage:
Was ist an dem folgenden Code falsch???void Vorlesung::OnBnClickedUebernehmenvorlesung2() { UpdateData(TRUE); CVorlesung m_TabelleVorlesung; // Instanz anlegen m_TabelleVorlesung.Open(); // Die Daten holen if (m_TabelleVorlesung.IsBOF()) { // Das Recordset ist leer } else { // Vorne anfangen m_TabelleVorlesung.MoveFirst(); while(!m_TabelleVorlesung.IsEOF()) { // Stimmt die Kombination? if (m_TabelleVorlesung.m_Name == m_vorhandenev) { m_TabelleVorlesung.Edit(); //diese Zeile bearbeiten // Daten verändern m_TabelleVorlesung.m_Name=m_veranstaltung; m_TabelleVorlesung.m_Vorlesender=m_select; m_TabelleVorlesung.m_Zuhoerer=m_sitzplatz; } m_TabelleVorlesung.MoveNext(); // Weiter }} if (!m_TabelleVorlesung.Update()) // Die Änderungen schreiben { AfxMessageBox(_T("Es wurde nicht gespeichert.")); } m_TabelleVorlesung.Requery(); // Bei Bedarf neu laden }

Danke.