Hallo,
Ich bin neu hier, arbeite jedoch mit Access seit 1995.
Momentan mit AC2003. Ich habe ca 15 Datenbanken in der Firma im Einsatz. Für globale VBA-Funktionen habe ich eine MDE-DB im Einsatz.
Wenn ich in dieser MDE etwas ändere, muss ich anschießend alle 15 Datenbanken öffnen, und den Code kompilieren.
Jetzt die Frage: Gibt es eine Möglichkeit diese Kompilierung mit einem VBA-Befehl zu starten? Dann ggf diese Funktion in ein Autostart_Komp Makro legen, und dieses per Kommandozeile starten? Mit einer Batchdatei könnte ich dann alle 15 Datenbanken mit einem Klick kompilieren (natürlich wenn ich sie exklusiv öffnen kann)
Vielen Dank ... vielleicht hat schon jemand in dieser Richtung etwas gebastelt.
Gruß
Claude
Hallo und willkommen hier im Forum.
die ganze Sachlage versteh ich nicht:
Wie kannst Du eine MDE-Datei am Code ändern und sie kompilieren wollen?
(Eine "richtige" MDE ist codemäßig und entwurfsmäßig nicht änderbar)
Handelt es sich wirklich um eine mit Access konvertierte (kompilierte) DB?
"habe ich eine MDE-DB im Einsatz."
gibt es nur die eine oder mehrere (verschiedenene) mde-Dateien?
Vermutlich ist aber Deine Situation missverständlich erläutert...
Hallo,
Danke für die Antwort.
Erklärung: Nur die Bibliothek-Datenbank ist eine MDE, alle andere 15 Datenbanken sind MDBs. Alle 15 haben ein Verweis auf die MDE, um deren globalen Funktionen zu nutzen.
Gruß
Claude
Hallo,
ok, und warum willst Du dann die mde kompilieren? Wenn, wie ich vermute, die mde als solche verändert werden soll, dann kann das nur zunächst über die ursprüngliche (originale) MdB-Datei geschehen, indem diese bearbeitet und anschliessend (wieder) in eine neue mde-Datei (mit gleichem Namen) überführt (kompiliert) wird. Diese "neue" mde-Datei muss dann an alle Stellen, wo sie verwendet wird, kopiert werden.
Hallo,
Ich versuche es noch Mal zu erklären.
Ich habe eine Bibliothek-Datenbank mit globalen Funktionen. Dies ist eine MDE.
In den 15 Benutzer-MDB Datenbanken habe ich ein Verweis auf diese MDE, um globale Funktionen zu nutzen.
Wenn ich eine neue MDE erzeuge (Funktionen erweitert oder optimiert), bzw die MDE durch die neue ersetze, ist der Code in den 15 MDBs sofort dekompliliert. Ich muss daher jede der 15 wieder öffnen, und den VBA Code komplilieren. Es ist ein Geduldspiel, da die Datenbanken im 3-Schicht-Betrieb verwendet werden, und ich nur Feiertage nutzen kann, um alle 15 Datenbanken exklusiv öffnen zu können. Dann brauche ich 30-45 Minuten um alle zu kompilieren. Deshalb suche ich eine schnellere Lösung.
Ist es jetzt verständlicher?
Gruß
Claude
Hallo,
meiner Meinung nach, ist das extra Kompilieren des Codes der MDB's nicht notwendig. Die erste Verwendung von Code kompiliert automatisch.
Zitat von: Access Hilfe zu kompilierenEs ist zwar empfehlenswert, die Module Ihres Projekts mit den oben beschriebenen Befehlen explizit zu kompilieren, jedoch nicht unbedingt erforderlich. Microsoft Access kompiliert ein Modul, bevor eine darin befindliche Prozedur ausgeführt wird, wenn das Modul noch nicht kompiliert vorliegt.
ok, Danke
Das werde ich bei der nächsten Änderung beobachten.
Gruß
Claude
Hallo,
ZitatDas werde ich bei der nächsten Änderung beobachten.
das kannst du nicht beobachten, das sieht man im Debugger nicht. Und der Befehl IsCompiled hilft auch nicht.
Hast Du in
jedem Modul der MDB's die
Option Explicit
gesetzt.
Damit wird man zu Variablendeklaration gezwungen, was auch eine Kompilierung erzwingt.
Doch noch eine Frage: Die 15 Datenbank werden mit der Runtime 2003 verwendet. Wird dann auch hier automatisch kompiliert?
Danke
Gruß
Claude
Hallo,
meiner Meinung nach, wird eine Runtime immer kompiliert.
Hast Du das gelesen mit der Option Explicit, ist die gesetzt, in jedem Modul, auch Formular und Berichtsmodule?
Zitat von: MzKlMu am April 27, 2014, 19:31:05
...Option Explicit, ist die gesetzt, in jedem Modul, auch Formular und Berichtsmodule?
Ja, mache ich grundsätzlich.
Gruß
Claude
Du könntest hier querlesen: accde als Bibliothek (http://www.ms-office-forum.net/forum/showthread.php?p=1542010)
Hallo und vielen Dank.
Interessant ist dieser Hinweis:
MDE in MDA umbennen:
ZitatGefahrlos umbenennen ja, den Nachteil der Bibliothekseinbindung umgehen nein.
Den Nachteil kann man umgehen indem man die Bibliothek so verwendet als sei sie ein Addin. Das hat mit der ursprünglichen Strategie die Bibliothek als Verweis einzufügen aber nix mehr zu tun. In der o.g. Lösung wird kein Verweis mehr benötigt, und damit entfällt auch der Zwang zum Neukompilieren.
Werde ich Mal testen ...
Gruß
Claude
Hallo,
Kurzes Feedback: Ich habe bei der letzten Änderung der MDE das Problem, dass eine Datenbank beim Schließen ein offenes Access-Fenster (Runtime) hinterließ. Somit konnte ich die Datenbank nicht mehr exklusiv öffnen, da diese im 3-Schicht-Betrieb verwendet wird. Heute habe ich die User vom Admin rausschmeissen lassen, und danach die Datenbank kompiliert. Jetzt ist das Problem behoben. Also ist automatisches kompliliert bei der ersten Öffnung doch nicht genau das gleiche, wie die Komplilierung des VBA Codes manuel durchzuführen.
Gruß
Claude
Hallo,
Zitat von: MzKlMu am April 27, 2014, 17:54:13Und der Befehl IsCompiled hilft auch nicht.
wie meinst du das? Ich glaube, ich habe da andere Erfahrungen, und zwar setze ich folgenden Code ein:
' Alle Module kompiliert ??
If Not Application.IsCompiled And SysCmd(acSysCmdRuntime) Then
' Ruft einen versteckten SysCmd-Befehl auf, um alle Module der
' Datenbank zu kompilieren bzw. zu speichern.
Call SysCmd(504, 16483)
End If
und denke, der kommt auch gelegentlich zum Einsatz.
ZitatSomit konnte ich die Datenbank nicht mehr exklusiv öffnen
Du solltest eh keine produktiv eingesetzte DB exklusiv (d.h. zur Bearbeitung) öffnen, sondern das Original stets lokal bearbeiten und nach Abschluss der Änderungen und Erweiterungen zur allgemeinen Verwendung bereitstellen.
Hallo, Danke für die Antwort.
Ich entwickle die Änderungen in einer Test-Datenbank. Danach werden die geänderte Objekte in die Produktiv-Datenbank exportiert, danach kompiliere ich den Code.
Oder was meinst du mit "bereitstellen?"
Danke
Gruß
Claude
Ich meine, du solltest eine komplette, kompilierte und komprimierte DB bereitstellen.
Die Frontends sollten übrigens lokal auf dem Benutzer-PC ausgeführt und nicht vom Server gestartet werden.
Ja, verstehe. Das wäre für mich zu viel Aufwand. Ich habe keine richtige Trennung Front/Backend. Nur ein paar wichtige Tabellen, die sich auf einem SQL-Server befinden.
Ist wohl nicht sehr professionnel ... betreibe ich aber so seit 1996.
Aber Danke für den Hinweis.
Gruß
Claude