Woher kommt die leere Error-Meldung?
-
Hi Leute ich habe eine kleine Suchfunktion, die mir meine DB durchsucht, wenn ich eine Suche eingegeben habe und dann auf meinen Button clicke, zeigt er mir zwar das richtige Ergebnis an, es kommt aber eine Messagebox im Stil von MB_ICONERROR ohne Text einfach nur die Messagebox!
hier mal der Source!
void CMeineKlasseView::OnBtnSuche() { bool Suchergebnis=FALSE; CDBVariant varValue; UpdateData(TRUE); short nFields = m_pSet->GetODBCFieldCount(); for( short index = 0; index < nFields; index++ ) { m_pSet->MoveFirst(); while (!m_pSet->IsEOF()) { m_pSet->GetFieldValue( index, varValue ); if (m_pSet->m_PCD_NR == m_Suche) { Suchergebnis = TRUE; break; } m_pSet->MoveNext(); } if (m_pSet->IsEOF()) { m_pSet->MoveFirst(); break; } } if (!Suchergebnis) MessageBox("Die angeforderte PCD Nummer ist nich vorhanden !","ERROR",MB_ICONERROR); // Formular aktualisieren UpdateData(FALSE); }
-
wo wird die wohl herkommen?
natürlich von
MessageBox("Die angeforderte PCD Nummer ist nich vorhanden !","ERROR",MB_ICONERROR);
Benutze AfxMessageBox() oder
MessageBox([b]NULL[/b],"Die angeforderte PCD Nummer ist nich vorhanden !","ERROR",MB_ICONERROR);
-
Moment das hat nichts mit meiner Messagebox zu tun! Die ist in ner If abfrage habe mal das Icon meiner Box geändert und die leere hat immernoch das ERROR Symbol drin!
Die letztere Variante gibt dann auch noch nen Fehler!
MessageBoxA' : function does not take 4 parameters
-
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.