Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » problem mit aktualisierung einer access-DB

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.10.2005, 20:35 Uhr
mmc20
puss in boots


hi,
ich hab ein sdi-projekt mit 2 verschiedenen views, beider sind von CRecordView abgeleitet.
in view-a ist ein clistctrl welcher eine aktuelle auswahl der datenbank anzeigt, bei der auswahl eines listctrl-items sendet view-a (per sendmessage) eine identNr an die view-b, welche dann den kompletten (ausgewählten) datensatz in ihren dialogfeldern anzeigt.
werden jetzt in view-b die daten editiert, und in view-a ein neuer datensatz ausgewählt, so wird der editierte datensatz gespeichert und eine message an die view-a gesendet.
diese soll dann den inhalt des clistctrl aktualisieren.

sooo... hat jemand bis hier hin gelesen ? ok!

soweit klappt alles, nur ist die datenbank noch nicht aktualisiert wenn die view-a die "refresh-message" bekommt.
da jetzt irgendwo ein sleep() dazwischen zu hängen finde ich ziemlich blöd. hat jemand eine idee wie ich testen kann ob die daten schon aktuell sind und gegebenfalls warten ?

Dieser Post wurde am 10.10.2005 um 20:36 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.10.2005, 22:51 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
wie sieht es mit Requery() und Upate() aus?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.10.2005, 15:09 Uhr
mmc20
puss in boots


hi, ...das hab ich schon probiert, hier mal der code wie ich das editieren abschliesse

C++:
m_pSet->Edit();
UpdateData( TRUE );
if ( m_pSet->IsFieldDirty(NULL) ) {
    m_pSet->Update();
    ((CWnd*)((CFlatSplitterWnd*)GetParent())->GetPane(0,0))->SendMessage( WM_COMMAND, (WPARAM)WMU_VALIDATEDB, 0 );
} else
    m_pSet->CancelUpdate();


die message kommt ja auch an (und am anfang hat das ja auch mal funktioniert)
in der view-a wird durch die message dann nur das einlesen der datenbankauswahl in das listctrl aufgerufen

C++:
...
m_list.DeleteAllItems();
try {
    m_pSet->m_strSort = "Kunde, IdentText ";
//    m_pSet->m_strFilter = "";
    m_pSet->Requery();
    if ( m_pSet->GetRecordCount() > 0 ) {
        CString tmp="";
        int i=0;
        while ( !m_pSet->IsEOF() ) {
            m_pSet->GetFieldValue( "IdentNr", tmp );
                m_list.InsertItem( i, tmp );
            m_pSet->GetFieldValue( "Kunde", tmp );
                m_list.SetItemText( i, 1, tmp );
            m_pSet->GetFieldValue( "IdentText", tmp );
                m_list.SetItemText( i, 2, tmp );
            i++;
            m_pSet->MoveNext();
        }
        m_pSet->MoveFirst();
    }
} catch( CDBException* exError ) {
    AfxMessageBox( exError->m_strError );
    delete exError;
}
if ( m_iAktItem >= 0 ) // aktitem ist das zuletzt selektierte item der liste
    m_list.SetItemState( m_iAktItem, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
...


???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.10.2005, 17:11 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Sieht eigentlich "sauber" aus.

Zitat von mmc20:

C++:
m_pSet->Edit();
UpdateData( TRUE );
if ( m_pSet->IsFieldDirty(NULL) ) {
    m_pSet->Update();
    ((CWnd*)((CFlatSplitterWnd*)GetParent())->GetPane(0,0))->SendMessage( WM_COMMAND, (WPARAM)WMU_VALIDATEDB, 0 );
} else
    m_pSet->CancelUpdate();




Hast Du mal hier einen Haltepunkt gesetzt, ich meine wo springt er hier hin?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.10.2005, 18:33 Uhr
mmc20
puss in boots


ja, hab ich, sobald ich etwas editiert habe, macht er brav das update und sendet die message, die auch ankommt, aber wohl leider etwas zu früh.
wenn ich jetzt ein sleep(1000) zwischen update und sendmessage mache dann wird das geänderte auch richtig in view-a gelesen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.10.2005, 20:36 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
wie sieht es aus wenn Du m_n pSet->Update() prüftst, die Methode gibt doch einen boolschen Wert zurück. Damit sollte doch eigentlich abgesichert sein, das der Update fertig ist.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.10.2005, 21:36 Uhr
mmc20
puss in boots


naja, update liefert sofort eine 1 (Nonzero if one record was successfully updated), also hat das updaten ja geklappt.
es klappt ja auch, die daten werden ja in die datenbank geschrieben, wenn ich den datensatz danach noch einmal anwähle sind die geänderten daten ja zu sehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.10.2005, 22:11 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
gut, ich kann das jetzt hier nicht nachbauen, da ich meinen Rechner nich zur Verfügung habe. Wenn es noch ein bis zwei Tage Zeit hat, werde ich mal der Sache auf den Grund gehen, falls Du noch keine Lösung hast.


Bearbeitung von Uwe:

UpdateData() in der Benutzernachricht?


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 11.10.2005 um 22:12 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.10.2005, 22:41 Uhr
mmc20
puss in boots


hi...

Zitat von Uwe:

UpdateData() in der Benutzernachricht?


wie meinst du das genau?

ich hab jetzt erstmal einen 1s-timer dazwischen gehangen, bin aber immer noch an einer "saubereren" lösung interressiert.
bin mir sogar ziemlich sicher das das am anfang mal richtig geklappt hatte, dann hab ich etwas geändert um die auswahl im listctrl nach der aktualisierung wieder sichtbar zu machen, und danach gings halt nimmer.

naja ich bleib dran...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.10.2005, 10:04 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
hab das jetzt mal mit dem meinen Mitteln und Deinem geposteten Quellcode nachvollzogen. Also bei meinem Testprojekt wird sofort die Ansicht aktuallisiert. Was ich nicht eingebaut hab ist die Auswahl der DS über das CListCtrl, aber daran sollte es ja nicht liegen. Bei Bedarf kann ich Dir ja mein Projekt zukommen lassen.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 16.10.2005 um 10:04 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: