Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Compilerfehler beim Umstieg von 2003 auf 2010

Begonnen von boris64, Juli 17, 2012, 14:24:55

⏪ vorheriges - nächstes ⏩

boris64

Hallo,

Bei der Umstellung einer Access-DB von 2003 auf 2010 gibt es an diversen Stellen Compilerfehler,
zB bei
Dim rs as Recordset
rs.FindFirst ...

FindFirst ist unbekannt. Mir ist der Grund schon teilweise bekannt. Es fehlt die explizite Deklaration
Dim rs as DAO.Recordset
Wenn man das ändert, geht alles.
Trotzdem verstehe ich das eigentliche Problem nicht ganz und wäre sehr dankbar, wenn es mir jemand erklären könnte:

- Warum kommt der Compilerfehler überhaupt? (Geht "Dim rs as Recordset" implizit nicht auf DAO, sondern auf ADO?)
- Was ist, wenn auch zb auf TableDef, QueryDef, Database referenziert wird. Kann man dort auch gefahrlos auf DAO.xxx gehen?
- Was ist, wenn man aus Versehen mischt, also zB von der DATABASE einen Recordset holt, den aber auf eine DAO.RecordSet variable zuweist?

Vielen Dank im Voraus!



database

Hallo,

der Grund ist in den Verweisen zu suchen.
In der neuen Access-Version findest du dort die MS Office 14.0 Access Database Object Library aktiviert.
Nimm die raus und setze dafür einen Verweis auf Microsoft DAO 3.6 Object Library Danach sollten die Compilerfehler wieder verschwinden - sofern es sich um die 32 Bit Version von Access handelt.

HTH

boris64

Hallo,

hier scheint es diese Library nicht zu geben.
Es gibt "Microsoft Access 14.0 Object Library", die kann aber nicht entfernt werden
(Fehler: "Verweis oder Steuerelement wird zur Zeit verwendet und kann daher nicht entfernt werden)

Ausserdem gibt es eine
"Microsoft Office 14.0 Access database engine Object Library"
Ist das die, die du meinst? Ist das der 2010er "Ersatz für DAO"?

Diese kann man entfernen und wenn man dann DAO 3.6 dazuholt und höher priorisiert als die "Microsoft ActiveX Data Objects 2.1 library", dann geht es.
Aber: denselben Effekt habe ich auch, wenn ich "Microsoft Office 14.0 Access database engine Object Library" höher als "Microsoft ActiveX Data Objects 2.1 library" priorisiere.

D.h. es liegt nicht daran, ob man DAO 3.6. hat oder nicht.
Gleichzeitig heisst es doch aber auch, dass DAO in der "Microsoft Office 14.0 Access database engine Object Library" enthalten ist, oder?
Oder sehe ich das falsch?





DF6GL

#3
Hallo,

"Microsoft Office 14.0 Access database engine Object Library"  ist die neue (MS sei es gedankt) Bezeichnung für das DAO-Zugriffsobjekt in neuer Version (Die Jet hat sich ja auch geändert).  Schau mal in den Objektkatalog.


Nichtsdestoweniger ist es mangelnde Programmierarbeit, auf die "Default"-Referenzierung zu setzen anstatt konsequent und überall die explizite anzuwenden.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

boris64

Vielen Dank!

Was würdest Du denn als Umstieg empfehlen?

Alle Referenzen auf DAO.Recordset ändern
(plus: dassselbe für alle TableDef, QueryDef, Database?)

Oder ist es generell besser, die "Microsoft Office 14.0 Access database engine Object Library"
höher als die "Microsoft ActiveX Data Objects 2.1 library" zu priorisieren?


Gruss

boris64

oder gar "Microsoft Office 14.0 Access database engine Object Library" rauswerfen und DAO 3.6 benutzen?

DF6GL

Hallo,


empfehlen würde ich die Änderung auf explizite Referenzierung...... Das kostet im Nachhinein Aufwand, wäre aber ein "fundierter" Weg zu fehlerreduziertem Code....

Alles Andere führt irgendwann, wenn z. B. in einer anderen Version die Priorität nicht passt oder gar der Verweis auf die richtige Library fehlt, wieder zum gleichen Frust über diese "Fehlfunktion"


Wenn schon mit A2010  und DAO gearbeitet wird, dann nimm auch das DAO-Objektmodell mit der Version, das bei A2010 dabei ist.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

boris64

thx.

Ich seh das auch so.
Leider stammen die Access-DB's um die es mir geht, nicht von mir, sondern von "unbedarften" Usern, denen der Unterschied zwischen Recordset und DAO.Recordset (zu recht) schnurzpiepegal ist.
Und meistens funktioniert es ja auch über Jahre ohne Probleme, bis ... ja bis zur nächsten Office-Version...

In diesem Sinne: Danke für die Hilfe, und bis zur nächsten Office-Version!