Zugriff auf Navision Datenbank
-
Hallo,
ich muß aus einer Navision DB Daten auslesen (read-only).
Dazu ist der C/ODBC Treiber installiert und eingerichtet.Funktioniert der Zugriff wie in diesem Beispiel hier:
// 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( );generell?
Ich bekomme jedesmal eine Fehlermeldung wenn ich nur mit OpenEx und Close arbeite ohne Abfrage:
db.OpenEx ("DSN=blabla", CDatabase::noOdbcDialog);
*"Dies kann auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in bla.exe oder in einer der geladenen DLLs hinweist.
Dies kann auch darauf zurückzuführen sein, dass der Benutzer F12 drückt, während bla.exe den Fokus hat."*
Kann hier jemand helfen?
-
Nachtrag:
Zugriff funktioniert jetzt bestens.
Allerdings wird immer noch mit der obigen Meldung unterbrochen, wenn ich die Release Version vom Editor aus starte. Beim Starten des Exefiles außerhalb von VS erscheint die Meldung nicht.
In beiden Fällen funktioniert aber das Auslesen der Daten korrekt.
Ist das ein VS Problem was auf eine noch unsaubere Programmierung hindeutet?
-
Wo und wie bekommst Du diesen Fehler?
Als Messagebox? Im Debug Ausgabefenster?
-
Hallo,
Es ist eine MessyBox von VS "Microsoft Visual Studio":
*Windows hat einen Haltepunkt in XXX.exe ausgelöst.
Dies kann auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in XXX.exe oder in einer der geladenen DLLs hinweist.
Dies kann auch darauf zurückzuführen sein, dass der Benutzer F12 drückt, während XXX.exe den Fokus hat.*
Die Wahl ist dann "Unterbrechen" oder "Weiter". Dies passiert 2x hintereinander.
Wird unterbrochen, landet man dort:
*
afxcrit.cppvoid AFXAPI AfxUnlockGlobals(int nLockType)
{
ASSERT(_afxCriticalInit);
ENSURE((UINT)nLockType < CRIT_MAX);// unlock specific resource
ASSERT(_afxLockInit[nLockType]);
#ifdef _DEBUG
ASSERT(--_afxResourceLocked[nLockType] >= 0);
#endif
LeaveCriticalSection(&_afxResourceLock[nLockType]);
}*Es muss irgendwas mit DB Zugriffen beim Öffnen zu tun haben.