PDA

Vollständige Version anzeigen : DAO Zugriff auf eine Access 2000 Datenbank


ruewe1
19.02.2001, 08:51
Hallo,

ich möchte über DAO auf eine Access 2000 DB zugreifen (Visual C++).
Bekomme die Fehlermeldung: "Nicht erkennbares Datenbankformat" !
Wenn ich die DB in eine Access 97 DB umwandel funktioniert das.

Habe schon Verweis auf DAO 3.6 in Access eingestellt, aber ohne Erfolg.

Vielleicht hat jemand eine Idee?

Hubi
19.02.2001, 09:01
Die Einstellung des Verweises zur DAO alleine reicht nicht aus. Zu beachten ist auch die Reihenfolge der Verweise. Der Verweis zu DAO muss vor dem zu ADO sein. Oder am besten, du nimmst den Verweis zu ADO ganz heraus, wenn du nicht damit programmierst.
Zudem sollte die Deklaration in Access 2000 explicit erfolgen. Also nicht Dim db as Database, sondern Dim db as DAO.Database

Gruß Hubert

ruewe1
19.02.2001, 10:45
Danke für Deine schnelle Antwort, Hubert.

Leider habe ich nur noch folgende Verweise eingestellt:
- Visual Basic for Applications
- Microsoft Access 9.0 Object Library
- Microsoft DAO 3.6 Object Library
- Ole Automation
Somit hat der DAO Verweis auch schon die höchstmögliche Priorität.

Meine Datenbank deklariere ich ja in Visual C++ 6.0 (CDaoDatabase db), ich arbeite ja gar nicht mit VB oder VBA.
Somit kann ich sie doch gar nicht mit Dim db as DAO.Database deklarieren, oder ?

Hubi
19.02.2001, 11:17
Hallo Rüdiger,

ich nehme mal an, du verwendest die Access-Datenbank als Backend-DB für deine Anwendung. Wurde diese Access-DB ursprünglich auf Access97 erstellt und dann nach Access 2000 konvertiert oder wurde sie gleich in Access 2000 erstellt?Gegebenenfalls solltest du eine neue, leere Access Datenbank in Access 2000 erstellen und dann anschließend die Tabellen importieren. Danach sollte das Ganze eigentlich wieder funktionieren.

Gruß Hubert

ruewe1
19.02.2001, 17:06
Hallo Hubert,

ich habe die Datenbank in Access 2000 direkt erstellt. Nur als ich gemerkt habe das es nicht funktioniert habe ich sie von Access 2000 in eine Access 97 Datenbank konvertiert.

Trotzdem Danke.

Hubi
20.02.2001, 06:58
Guten Morgen Rüdiger,

Visual C++ ist zwar nicht meine Programmiersprache, aber kann´s vielleicht tatsächlich daran liegen, das du mit Visual C++ nicht direkt auf eine Access 2000-Datenbank zugreifen kannst? Deshalb auch der Fehler "Nicht erkennbares Datenbankformat". Dieser Fehler tritt nämlich auch auf, wenn man z.B. mit einer Access 97 Front-DB auf eine Access 2000 Backend-DB via Verknüpfung zugreifen möchte. Ich vermute, dass Visual C++ auf das DB-Format von Access 97 ausgerichtet ist.

Gruß Hubert

Olaf Meuther
20.02.2001, 07:00
auch unter VC++ muß der Verweis auf DAO 3.6 gesetzt werden.

ruewe1
26.02.2001, 09:41
Hallo Olaf,

danke für Deinen Beitrag. Wie kann ich denn in MS Visual C++ 6.0 einen Verweis auf DAO 3.6 setzen ?

Sascha Trowitzsch
26.02.2001, 23:33
Hi zusammen,
die Verweise in der DB spielen keine Rolle.
Wenn der Zugriff auf 97er-mdbs funktioniert, dann ist die Connection auf die DAO3.6 nicht korrekt. Du greifst über ODBC drauf zu? Oder hast du eine spezielle Klasse für die Connection? Wahrscheinlich hast du falsche Parameter für die ODBC angegeben. Wenn beide Access-Versionen installiert sind, dann gibt es auch zwei DB-Treiber, die unterschiedlich angesprochen werden.
Poste mal den Connection-Code.

Ciao, Sascha

ruewe1
28.02.2001, 13:03
Hallo Sascha,

danke für Deinen Beitrag.

Ich greife nicht über ODBC, sondern über DAO (Klasse CDaoDatabase) auf die Datenbank zu, und habe nur Access 2000 installiert.
Parameter sind glaube ich nicht falsch, weil ich im Code nur die 97 Datenbank im Pfad eintragen muss und schon funzt alles:


CDaoDatabase db;
CDaoRecordset rs(&db);
COleVariant OleValue;
COleVariant OleDatum;
CString SQL;

SQL = "SELECT * from DatumsTest";

CWaitCursor cursor;

db.Open(S:\\wiewelho\\Ausbildung\\Abschlussprüfung\\Vorbereitung\\Ressourcenverw altung97.mdb");
//Wenn ich hier auf die Access 2000 DB verweise kommt die o.g. Fehlermeldung

rs.Open(dbOpenDynaset, SQL);
rs.GetFieldValue(0, OleValue);
m_Id = V_I4(&OleValue);

UpdateData(false);

db.Close();
rs.Close();

Sascha Trowitzsch
01.03.2001, 01:03
Hi,

melde mich nochmal zu später Stunde... hatte diesen Thread ganz vergessen.

Soweit ich weiß, kommt CDaoDatabase nur mit DAO3.5x klar. Es ist ja eine Klasse, die nicht über die DAO-Engine läuft, sondern eigene Zugriffsmethoden implementiert hat. Und die sind in VC++6 noch nicht bei DAO 3.6 angekommen. (Vielleicht ja in C# ? :-))
Also wirst du wohl über den Umweg ODBC gehen müssen um die 2000er-DB ansprechen zu können.

Aber ich programmiere Datenbanken selten in C und weiß nicht, ob's da draussen im Netz irgendwo angepasste Klassen gibt.

Soweit, Sascha