Woher kommt die leere Error-Meldung?
-
Wenn dir die komische MessageBox angezeigt wird, wechsel mal ins VC und drück auf die Schaltfläche, wo ein Pause-Symbol drin ist.
Dann schau dir den Callstack an, ob du da was findest.
-
Öhm Pause? Ich find keine Pause und call Stack geht da nicht, und was soll ich sehen wenn ich call Stack mache??
-
Okay, im Menü Debug ist der Befehl "Anhalten". Den meinte ich.
Wenn du das Programm anhälst, hast du irgendwo im VC eine Liste, welche Funktion welcher Klasse welche Funktion mit welchen Parametern aufgerufen hat - bis hin zu der Stelle, wo du gerade bist. (Zur Not musste die einschalten, das geht über "Ansicht"-"Debug-Fenster">"Aufrufliste".)
Da sollte als oberstes irgendwas mit DoMessageBox oder so sein. Und dann guckst du dir die anderen Funktionen an, bis du irgendwann in deinem eigenen Code landest, vielleicht siehst du dann, wo die Meldung herkommt.
-
Also das mit dem Anhalten finde ich nicht, ich mein ich hab ne englische Version aber ich find auch kein Stop oder ähnliches. Hab aber mit Step by Step Debug raus gefunden, dass der Fehler ein wenig weiter liegt.
In meiner Zeilem_pSet->GetFieldValue( index, varValue);
Die ich da das zweite mal hintereinander aufrufe kommt dann ne datei die er laden will und nicht findet in dem Source
// Diagnostic Trace void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...) { #ifdef _DEBUG // all AfxTrace output is controlled by afxTraceEnabled if (!afxTraceEnabled) return; #endif va_list args; va_start(args, lpszFormat); int nBuf; TCHAR szBuffer[512]; nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args); // was there an error? was the expanded string too long? ASSERT(nBuf >= 0); if ((afxTraceFlags & traceMultiApp) && (AfxGetApp() != NULL)) afxDump << AfxGetApp()->m_pszExeName << ": "; afxDump << szBuffer; va_end(args); } #endif //_DEBUG
IN der Zeile nBuf=... da will er irgendwas laden was er nicht finden kann, mach ich dann cancel oder ich step da davor schon drüber dann kommt das misteriöse Fenster in der Zeile lResult = pWin ...
// more special case for WM_INITDIALOG if (nMsg == WM_INITDIALOG) _AfxPostInitDialog(pWnd, rectOld, dwStyle); } 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;
-
So, jetzt kommt erstmal die Frage, wenn ich nicht mehr weiter weiß: Hast du schon ein RebuildAll gemacht?
Ich meinte übrigens die Schaltfläche: http://www.larsaf-iii.de/forum/VC_Pause.jpg
-
Hm jo hab ich gemacht, da tut sich aber nichts!
CDBVariant varValue; short index =0; m_pSet->GetFieldValue( index, varValue); selectedPCD = *(varValue.m_pstring); index = 1; m_pSet->GetFieldValue( index, varValue); selectedAnweisungsindex = varValue.m_lVal; AfxGetMainWnd()->SendMessage(WM_COMMAND, IDM_DOKUMENTE);
So sieht das gesamte aus! ich nehm an, das ich nicht 2 mal getFieldValue machen darf.
-
Ich glaube das eher nicht - zumindest, wenn ich mir so das Beispiel aus der MSDN angucke.
// Create and open a database object; // do not load the cursor library CDatabase db; db.OpenEx( NULL, CDatabase::forceOdbcDialog ); // Create and open a recordset object // directly from CRecordset. Note that a // table must exist in a connected database. // Use forwardOnly type recordset for best // performance, since only MoveNext is required CRecordset rs( &db ); rs.Open( CRecordset::forwardOnly, _T( "SELECT * FROM SomeTable" ) ); // Create a CDBVariant object to // store field data CDBVariant varValue; // Loop through the recordset, // using GetFieldValue and // GetODBCFieldCount to retrieve // data in all columns short nFields = rs.GetODBCFieldCount( ); while( !rs.IsEOF( ) ) { for( short index = 0; index < nFields; index++ ) { rs.GetFieldValue( index, varValue ); // do something with varValue } rs.MoveNext( ); } rs.Close( ); db.Close( );
Hast du vielleicht nur ein Feld?
-
ja genau diese Hilfe der MSDN hatte ich auch. Wie nur ein Feld? Ich habe eine Matrix mit 2 Spalten und momentan 6 Zeilen.
-
Sorry, so ohne den Code im Debugger unter den Fingern stocher ich eben etwas im Morast.
Was steht denn in der Variablen, wenn du das in deinem Code einbaust?
short nFields = rs.GetODBCFieldCount( );
Bei welcher Anweisung kracht es denn genau?
m_pSet->GetFieldValue( index, varValue); //1 selectedAnweisungsindex = varValue.m_lVal; //2
-
es kracht bei der zuweisung also bei //2 ODBC-Fildcount mach ich ja in der FKT nicht, da mein short index ja statisch ist, aber aus ner anderen FKT hab ich nFieldcount =2 . Ich habe noch etwas heraus gefunden, diese Meldung kommt NUR dann wenn ich davor die suchfunktion (siehe erster Post in diesem Thread) ausgeführt habe! war nicht so leicht klar weil ich die Funktion auch auf KillFocus hatte.