PDA

Vollständige Version anzeigen : Versionierung und Update von Access-Datenbanken


Cosmic Kramer
22.10.2001, 09:21
Hallo zusammen,
ich erstelle eine Access-Lösung, die "in Produktion" von mehreren Leuten für unterschiedliche Projekte (d.h. jeder nutzt eine Kopie der Datenbank mit seinem eigenen Datenbestand) eingesetzt werden soll. Bei der Entwicklung gehe ich prototypisch vor, d.h. es ist vorgesehen und wird wohl auch so sein, daß die Datenbank ständig erweitert wird. Jetzt suche ich nach einer möglichst einfachen Lösung, wie ich nach der Implementierung einer neuen Version (Entwicklungsbereich) alle im Umlauf befindlichen Datenbanken (im Produktionsbereich) updaten kann und das möglichst automatisiert. Es sind dazu im Prinzip zwei Schritte notwendig:
1. erstellen von Kopien der Entwicklungsdatenbank und löschen aller Testdaten (Anmerkung: z.Z. umfaßt die DB mehr als 50 Tabellen!)
2. Datenübernahme von der alten Version im Produktionsbereich in die neue DB
Nun habe ich bei der Umsetzung mehrere Schwierigkeiten:
zu 1.:
- das Anlegen einer neuen DB und der Import der gesamten Struktur (ohne Daten!) wäre ein prima Weg, wenn Access bei mir nicht im Beziehungsfenster (wo die Verknüpfungen der Tabellen festgelegt sind; physisches Datenmodell, wie auch immer...) alle Tabellen neu anordnen würde. Bei dem Anspruch die DB ständig erweitern zu können und einem nicht ganz kleinen Datenmodell (50 TBL) ist dieser Fehler nicht akzeptabel (dauert zu lange um das Datenbankschema wieder übersichtlich zurecht zu ziehen). Ich kopiere daher die komplette Datenbank und bräuchte nun die Möglichkeit, alle Datensätze in allen 50 Tabellen zu löschen. Wie müßte dazu der entsprechende VBA-Code aussehen, oder gibt es eine andere, bessere Möglichkeit?
zu 2.:
Die Aufteilung der Datenbank in Frontend und Backend ist angedacht, bringt mir zur Lösung dieses Problems z.Z. aber noch nichts, da sich höchstwahrscheinlich auch noch Änderungen an der Datenbankstrukur ergeben werden (Erweiterungen um zusätzliche Attribute, Änderungen des Datenmodells wg. Normalisierung oder Hinzufügen neuer Bereiche).
Wie kann ich über Anfügeabfragen alle leeren Tabellen der neuen Version automatisiert mit den Daten aus der alten Version füllen? Dabei muß ich beachten, daß Änderungen definiert werden können (z.B. "Attribut A in alter Version entspricht Attribut B in neuer Version").
Für das 'reindenken' in meine Ausführungen und eventuelle Unterstützung danke ich schon mal im Voraus!
Gruß, CK

Sascha Trowitzsch
22.10.2001, 09:59
Hi Cosmic,

- bei diesem Projekt ist es unumgänglich, zuerst die Aufteilung in FE/BE vorzunehmen. Alles andere führt zu Chaos.
- Wenn du das Beziehungslayout bei neuer Verknüpfung mit der Tabellenstruktur nicht wie ein Spinnennetz aussehen soll, dann benutze folgendes Util: http://www.trigeminal.com/lang/1031/utility.asp?ItemID=12#12
- Während des Prototypings würde ich nie mehrere Rechner mit jeder Testversion versorgen. Zwei reichen.
- Zum Löschen aller Inhalte: Nicht kopieren, sondern neue leere Datenbank erstellen und aus der alten alle Tabellen importieren. Dabei aber die Option 'nur Struktur' auswählen. Dann hast du die Tabellen und die Beziehungen, aber ohne Inhalte.
- Wenn Änderungen an den Properties oder Attributes der Felder notwendig werden, so kommst du um Handarbeit nicht herum. Ein universelles Tool, mit dem man gleichzeitig Daten anfügen und die Felddefinition ändern kann, macht keinen Sinn. Erst das eine, dann das andere.

Ciao, Sascha

Anne Berg
22.10.2001, 10:10
Also, die Aufteilung in Frontend/Backend kann ich prinzipiell nur empfehlen. Das erleichtert das Update der Anwendungs-DB doch erheblich. Und die Beziehungen bleiben unberührt.
Strukturänderungen können 'notfalls' auch per VBA durchgeführt werden.
Ich habe das in meinen Anwendungen so gelöst, daß ich bei jedem Start einen Versionsvergleich durchführe und ggfls. die Übernahme anbiete. Dazu habe ich einen entspr. Eintrag in einer Konfigurationstabelle (könnte man auch über benutzerdefinierte DB-Eigenschaften lösen) und eine DB-Kopie (Original-/Update-Version) auf dem Server.

Um das Löschen der Testdaten zu automatisieren, kann man die Tabledefs-Auflistung durchlaufen und für jede Tabelle eine 'Delete * from ...'-Anweisung ausführen.

Hoffe, das hilft Dir weiter.