Korrekte Anzeige von Daten, die im Dialog nach der Ansicht verändert wurden



  • ich habe ein Projekt, wo ich zwischen mehreren Ansichten wechseln kann. Einige Ansichten sind FormViews und es können bestimmte Daten für die vorhandenen Räume verändert werden. In einer anderen Ansicht kann dann eine Übersicht über die Belegungszeiten der Räume erhalten werden. Diese ist eine ScrollView. Die Daten sind alle in der MyDocumentDoc definiert.

    Nun habe ich mir Belegungszeiten der Räume anzeigen lassen und habe festgestellt, dass die Raumdaten, die ich in die FormView eingegeben habe, nicht korrekt sind(beispielsweise falsche Bezeichnung). Wenn ich nach der Änderung dieser Daten die Belegungszeiten mir anzeigen lassen will, erscheint als erstes eine doppelte Angabe, was in der Zeit stattfindet.

    Kann mir jemand helfen, dass dieses nicht mehr geschieht????
    Danke
    😕 😕 😕


  • Mod

    Das kann Dir niemand sagen, wenn Du uns nicht sagst wie Du die Daten verwaltest.

    Meine Kristallkugel auf der Fensterbank jedenfalls funktioniert nicht bei diesem Problem...



  • Die Daten die in der FormView eingeben werden, werden in einer Datenbank gespeichert und verwaltet.

    AnzV=0;	//Anzahl der Veranstaltungen auf 0 setzen (für Mehrfach-Berechnungen)
    
    	CString TempPool, WertArt, WertHoerer, WertName, WertSemester, WertVorl;
    	CDatabase db;
    
    	db.OpenEx("DBQ=vorlesung.mdb;DRIVER=Microsoft Access Driver (*.mdb);FIL=MS Access for Microsoft Access;UID=Admin;PWD=;");
    	CRecordset rs( &db );
    	rs.Open( CRecordset::forwardOnly, _T( "SELECT * FROM Vorlesung " ) );
    
    	while( !rs.IsEOF() ) 
    	{	rs.GetFieldValue("Name", WertName);
    		rs.GetFieldValue("Art", WertArt);
    		rs.GetFieldValue("Semester", WertSemester);
    		rs.GetFieldValue("Pool", TempPool);
    		rs.GetFieldValue("Vorlesender", WertVorl);
    		rs.GetFieldValue("Zuhörer", WertHoerer);
    		Veranstaltung[AnzV].Hoerer=WertHoerer;
    		Veranstaltung[AnzV].Name=WertName;
    		Veranstaltung[AnzV].Pool= (TempPool == "1");
    
    		if (WertSemester=="WS")
    			Veranstaltung[AnzV].Semester=0;
    		else Veranstaltung[AnzV].Semester=1;
    
    		if (WertArt=="V")
    			Veranstaltung[AnzV].Art="Vorlesung";
    		else Veranstaltung[AnzV].Art="Übung";
    
    		Veranstaltung[AnzV].Vorlesender=WertVorl;
    		rs.MoveNext( );
    		AnzV++;
    }
    rs.close();
    }
    

    So wird er in der CMyDocumentDoc aufgerufen und im CMyDocumentDoc erfolgt auch die Zuordnung der Daten die in der ScrollView angezeigt werden.



  • Martin Richter schrieb:

    Das kann Dir niemand sagen, wenn Du uns nicht sagst wie Du die Daten verwaltest.

    oder hattest du damit, was anderes gemeint????


  • Mod

    Hier kann ich nur sehen, wie Du die Daten liest. Ich kann aber nicht sehen, warum evtl. Daten doppelt eingetragen werden.



  • Der Code mit dem das eingetragen wird, sieht so aus:

    for (pDoc->i=0; pDoc->i<pDoc->AnzV; pDoc->i++)
    		{
    			if (pDoc->Veranstaltung[pDoc->i].Vorlesender==pDoc->m_dozent)
    			{
    				pDoc->zeit=pDoc->Veranstaltung[pDoc->i].Zeit;	//Um Schreibarbeit zu ersparen
    				if (pDoc->zeit>-1 && pDoc->zeit<6)
    				{	
    					pDC->TextOut(285,-110-300*(pDoc->zeit),pDoc->Veranstaltung[pDoc->i].Name.Left(14));
    					pDC->TextOut(285,-160-300*(pDoc->zeit),pDoc->Veranstaltung[pDoc->i].Name.Mid(14,15));
    					pDC->TextOut(285,-210-300*(pDoc->zeit),pDoc->Veranstaltung[pDoc->i].Vorlesender);
    			           pDC->TextOut(300,-260-300*(pDoc->zeit),pDoc->Veranstaltung[pDoc->i].Art);	
    		                     pDC->TextOut(300,-310-300*(pDoc->zeit),pDoc->Veranstaltung[pDoc->i].Raum);
    				}}}
    

    die pDoc->Veranstaltung[pDoc->i].Variable werden alle im CMyDocument zugeordnet.
    Der Bereich ist mit MM_Lometric fixiert, damit es auch ohne große Umwandlung gedruckt werden kann.



  • Gibt es irgendeinen Befehl, bei dem das CDocument neu geladen wird??? Denn wenn ich das Projekt schließe und dann noch mal neu starte wird es richtig angezeigt.

    Danke.


  • Mod

    Warum is pDoc->i eine Laufzeit Variable im Dokument?

    Das neue laden des Dokumentes fixed nicht Deinen Fehler! Es gleicht nur Deine Sympthome aus



  • Ich habe sie im CDokument definiert, weil ich sie an anderen Stellen auch benötige und sie nicht doppelt definieren wollte.


  • Mod

    Bartnelke schrieb:

    Ich habe sie im CDokument definiert, weil ich sie an anderen Stellen auch benötige und sie nicht doppelt definieren wollte.

    Lerne ertsmal etwas C++. Was passiert nun, wenn Du in einer Schleife eine Funktion aufrufst, die genau diese Variable auch wieder benutzt. Chaos!

    Merke: So etwas macht man nicht! Du sparst damit gar nichts. Die vergeuedest Speicher, und der Code ist langasmer.



  • Okay, das merke ich mir.

    Nur nachdem ich das geändert habe, bekomme ich immer noch diesen Fehler.
    Hast du noch ne Idee woran es liegen könnte???


  • Mod

    An dem was ich bisher sehe, kann ich nicht burteilen wie der Transfer zwischen Daten und Anzeige bei Dir funktioniert.
    Meine Kristallkugel geht immer noch nicht.

    Was hälst Du von Debuggen um heauszubekommen wann welche Daten angezeigt werden?


Anmelden zum Antworten