Ungültige Cursor-Position
-
Hi zusammen, wenn ich unten stehenden Source ausführe, bekomme ich immer eine Fehlermeldung "Ungültige Cursor-Position", die anderen Funktionen die ich dort aufrufe funktionieren bei anderen aufrufen immer. Aber entweder die Kombination der Funktionen oder sonst irgendwas in unten stehender FKT läuft schief. Hat einer ne Ahnung was da schief laufen könnte, oder in welcher aufgerufenen FKT es sein könnte? (wäre glaub zuviel alle FKTs zu posten)
void CEinstellungenView::OnBtnDelete() { if(AfxMessageBox("Wollen sie wirklich den ausgewählten Datensatz löschen?",MB_YESNO) == IDYES) { int nID =0; nID = m_cmbPCD.GetCurSel(); if (nID != -1) // es muss was gewählt sein { nID = m_cmbPCD.GetItemData(nID); } m_pSet->IDsuchen(nID); m_pSet->Delete(); m_cmbPCD.ResetContent( ); m_pSet->loadPCD(m_cmbPCD); } }
-
m_pSet ist offen? (Sollte es, wenn ich den Code richtig im Kopf habe.)
Wurde etwas gefunden? Du prüfst nicht, ob wirklich IDsuchen was gefunden hat.Ich hab den Fehler auch schon öfters gehabt, aber ich habe es noch nicht geschafft, die Ursache(n) zu notieren.
Also, bevor du löschst, prüfe bitte auf EOF.
-
Ok also ich bin dadurch jetzt schon mal ein Stück weiter gekommen. Hier nochmal den neuen Source:
void CEinstellungenView::OnBtnDelete() { if(AfxMessageBox("Wollen sie wirklich den ausgewählten Datensatz löschen?",MB_YESNO) == IDYES) { int nID =0; nID = m_cmbPCD.GetCurSel(); if (nID != -1) // es muss was gewählt sein { nID = m_cmbPCD.GetItemData(nID); } if(m_pSet->IDsuchen(nID) && !m_pSet->IsEOF()) { m_pSet->Delete(); m_cmbPCD.ResetContent( ); m_pSet->loadPCD(m_cmbPCD); } } }
so bei loadPCD(m_cmbPCD); kackt er ab. Die FKT schaut so aus:
void CDokumentenVerwaltungSet::loadPCD(CComboBox& Combo) { short index=0; CDBVariant varValue; MoveFirst(); while (!IsEOF()) { GetFieldValue( index, varValue ); //Merken, an welche Position es geschrieben wird (wegen evtl. Sortieren oder so) int nIdx = Combo.AddString(*(varValue.m_pstring)); Combo.SetItemData(nIdx,m_ID); MoveNext(); } Combo.SetCurSel(0);// <-- hier schmiert er ab ich kann aber auch 1 machen der schmiert immer ab! }
springt dann hier hin:
CATCH_ALL(e) { CWinThread* pWinThread = AfxGetThread(); if ( pWinThread != NULL ) { lResult = pWinThread->ProcessWndProcException(e, &pThreadState->m_lastSentMsg); TRACE1("Warning: Uncaught exception in WindowProc (returning %ld).\n", lResult); } else { TRACE0("Warning: Uncaught exception in WindowProc.\n"); lResult = 0; } DELETE_EXCEPTION(e); } END_CATCH_ALL pThreadState->m_lastSentMsg = oldState; return lResult; }
Ne Ahnung??
-
Könnte daran liegen:
MSDN:
[...] and you must explicitly call one of the Move functions in order to move off the deleted record.[edit]...oder auch nicht. Ich sehe da gerade ein MoveFirst().[/edit]
-
Nein, ich habe leider keine Ahnung.
Aber: Geh in die Zeile, wo er abschmiert und drück F9 (Breakpoint setzen).
Dann starte mit F5 das Programm und lass ihn abschmieren.
Wenn du auf den Breakpoint aufläufst, dann drück F11, um in SetCurSel reinzudebuggen und arbeite dich langsam (mit F10 und F11) weiter, bis du hoffentlich herausfindest, warum eine Exception fliegt.Edit: Wurde was in die Combobox eingefügt? Also die Schleife durchlaufen?
-
jo er schreibt schön alles wieder in die Combo rein, und dann fliegt sie, die Exception!
Ich dank ech beiden dennoch recht herzlich, werde mich mal reindebuggen! Also noch tiefer wie bisher!
-
Ha! Ich hab das Problem!!
Aber keine Lösung dazu
Also folgendes Problem:
Ich lösche einen Datensatz aus der DB somit fällt die ID aus der Datenbank, und sobald er jetzt in meiner Schleifewhile (!IsEOF()) { GetFieldValue( index, varValue ); //Merken, an welche Position es geschrieben wird (wegen evtl. Sortieren oder so) int nIdx = Combo.AddString(*(varValue.m_pstring)); Combo.SetItemData(nIdx,m_ID); MoveNext(); }
auf den Datensatz trifft der gelöscht wurde, kackt er ab. Is ja eigentlich auch klar, jetzt kann ich aber nicht Update machen, weil er da dann schon sagt Versuch zu erneuern fehlgeschlagen. GetFielValue dürfte eigentlich den fehlenden Datensatz nicht finden, da anscheinend der Datensatz direkt nach delete weg ist, ohne update. Wie kann das also sein dass er den Datensatz laden will??
-
Requery fehlt!
-
Wo war doch gleich der Knutschende Smily? Hättest ihn mal wieder verdient!
Jetzt geht es einwandfrei super! Vielen lieben Dank, ich wusste doch dass du den Fehler findest!