Austausch von Modulen und Abfragen per VBA

Hallo,

ich habe eine Accessdatenbank, an der derzeit noch viel herum entwickelt wird, diese Datenbank wird von mehreren Filialen benutzt.

Ich schiebe derzeit geänderte Formulare und Berichte per VBA (siehe unten) in eine Datei update.mdb über eine entsprechende Routine in den „vor Ort“ Versionen kann die Filiale auf den neusten Stand gebracht werden.

Leider fehlt mir die Syntax für das Austauschen von Abfragen und Modulen.

Für das Austauschen der Formulare und Berichte gehe ich wie folgt vor:

Alle geänderten Formulare und Berichte liegen in einer Datei update.mdb

Der User hat einen Button Update, der ein Formular aufruft, in dem ein Feld Quelle vorhanden ist, in dem Pfad und Name der Datenbank angibt, in der die auszutauschende Formulare, etc. liegen. In der vorhanden Datenbank wird dann zunächst z.B. das Formular gelöscht und dann das neue importiert.

Dim dbs As Database, ctr As Container, doc As Document

'Formulare
Set dbs = DBEngine.Workspaces(0).OpenDatabase(Me.Quelle)
Set ctr = dbs.Containers!Forms
For Each doc In ctr.Documents
DoCmd.DeleteObject acForm, doc.Name
DoCmd.TransferDatabase acImport, „Microsoft Access“, _
Me.Quelle, acForm, doc.Name, doc.Name
Weiter:
Next doc
Set dbs = Nothing

Klappt alles wunderbar mit Formularen und Berichten, mir fehlt jedoch die Syntax mit der ich auf einem ähnlichen Weg, Abfragen und Module austauschen kann, Tabellen brauche nicht, da diese per Replikation (Datenbank ist in Front- und Backend getrennt) erneuert werden.

Soweit ist es derzeit kapiere, könnte das Problem darin bestehen, dass ich die Containers bei Abfragen und Modulen nicht anwenden kann, sondern evtl. über das application Objekt gehen müßte, da schweigen sich aber meine Accessbücher aus.

Hat jemand ein Tip, wenn ja herzlichen Dank im Voraus
(Bewertungspunkte garantiert)

PeterHallo,

ich habe eine Accessdatenbank, an der derzeit noch viel herum entwickelt wird, diese Datenbank wird von mehreren Filialen benutzt.

Ich schiebe derzeit geänderte Formulare und Berichte per VBA (siehe unten) in eine Datei update.mdb über eine entsprechende Routine in den „vor Ort“ Versionen kann die Filiale auf den neusten Stand gebracht werden.

Leider fehlt mir die Syntax für das Austauschen von Abfragen und Modulen.

Für das Austauschen der Formulare und Berichte gehe ich wie folgt vor:

Alle geänderten Formulare und Berichte liegen in einer Datei update.mdb

Der User hat einen Button Update, der ein Formular aufruft, in dem ein Feld Quelle vorhanden ist, in dem Pfad und Name der Datenbank angibt, in der die auszutauschende Formulare, etc. liegen. In der vorhanden Datenbank wird dann zunächst z.B. das Formular gelöscht und dann das neue importiert.

Dim dbs As Database, ctr As Container, doc As Document

'Formulare
Set dbs = DBEngine.Workspaces(0).OpenDatabase(Me.Quelle)
Set ctr = dbs.Containers!Forms
For Each doc In ctr.Documents
DoCmd.DeleteObject acForm, doc.Name
DoCmd.TransferDatabase acImport, „Microsoft Access“, _
Me.Quelle, acForm, doc.Name, doc.Name
Weiter:
Next doc
Set dbs = Nothing

Klappt alles wunderbar mit Formularen und Berichten, mir fehlt jedoch die Syntax mit der ich auf einem ähnlichen Weg, Abfragen und Module austauschen kann, Tabellen brauche nicht, da diese per Replikation (Datenbank ist in Front- und Backend getrennt) erneuert werden.

Soweit ist es derzeit kapiere, könnte das Problem darin bestehen, dass ich die Containers bei Abfragen und Modulen nicht anwenden kann, sondern evtl. über das application Objekt gehen müßte, da schweigen sich aber meine Accessbücher aus.

Hat jemand ein Tip, wenn ja herzlichen Dank im Voraus
(Bewertungspunkte garantiert)

PeterHallo,

ich habe eine Accessdatenbank, an der derzeit noch viel herum entwickelt wird, diese Datenbank wird von mehreren Filialen benutzt.

Ich schiebe derzeit geänderte Formulare und Berichte per VBA (siehe unten) in eine Datei update.mdb über eine entsprechende Routine in den „vor Ort“ Versionen kann die Filiale auf den neusten Stand gebracht werden.

Leider fehlt mir die Syntax für das Austauschen von Abfragen und Modulen.

Für das Austauschen der Formulare und Berichte gehe ich wie folgt vor:

Alle geänderten Formulare und Berichte liegen in einer Datei update.mdb

Der User hat einen Button Update, der ein Formular aufruft, in dem ein Feld Quelle vorhanden ist, in dem Pfad und Name der Datenbank angibt, in der die auszutauschende Formulare, etc. liegen. In der vorhanden Datenbank wird dann zunächst z.B. das Formular gelöscht und dann das neue importiert.

Dim dbs As Database, ctr As Container, doc As Document

'Formulare
Set dbs = DBEngine.Workspaces(0).OpenDatabase(Me.Quelle)
Set ctr = dbs.Containers!Forms
For Each doc In ctr.Documents
DoCmd.DeleteObject acForm, doc.Name
DoCmd.TransferDatabase acImport, „Microsoft Access“, _
Me.Quelle, acForm, doc.Name, doc.Name
Weiter:
Next doc
Set dbs = Nothing

Klappt alles wunderbar mit Formularen und Berichten, mir fehlt jedoch die Syntax mit der ich auf einem ähnlichen Weg, Abfragen und Module austauschen kann, Tabellen brauche nicht, da diese per Replikation (Datenbank ist in Front- und Backend getrennt) erneuert werden.

Soweit ist es derzeit kapiere, könnte das Problem darin bestehen, dass ich die Containers bei Abfragen und Modulen nicht anwenden kann, sondern evtl. über das application Objekt gehen müßte, da schweigen sich aber meine Accessbücher aus.

Hat jemand ein Tip, wenn ja, herzlichen Dank im Voraus
(Bewertungspunkte garantiert)

Peter

Irgendwie recht lang geworden, dein Artikel ;=)

Üblicherweise teilt man die Anwendung in Frontend/Backend auf und tauscht jeweils das komplette Frontend aus - dann kann man sich die ganzen Klimmzüge ersparen…

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)

Irgendwie recht lang geworden, dein Artikel ;=)

Hallo Reinhard,

hatte ich beim Schreiben schon befürchtet, wollte mich nur klar ausdrücken. Was offensichtlich doch nicht gelungen ist :smile:

Ich habe ein Back- und Frontend. Die Klimmzüge muß ich deshalb machen, weil ich mit insgesamt 6 verschiedenen Teil- und Vollreplikaten sowie einer Version im Firmennetzwerk (der Rest in Filialen) arbeite, deren Tabellennamen anders heißen müssen, also muß ich im Formular die Tabellen verknüpfen, tausche ich nun ein Formular aus, sind dort die Pfade zu den falschen Tabellen drin, deshalb der Versuch dies anders zu lösen, was auch hervorragend funktioniert, mir fehlt nur der Kniff wie ich die Module und Abfragen tauschen kann.

Peter

Irgendwie recht lang geworden, dein Artikel ;=)

Hallo Reinhard,

hatte ich beim Schreiben schon befürchtet, wollte mich nur
klar ausdrücken. Was offensichtlich doch nicht gelungen ist

-)

Nee - damit meinte ich, dass du den Artikel mehrfach hintereinander kopiert hast, so dass man nicht so recht das Ende findet…

Ich habe ein Back- und Frontend. Die Klimmzüge muß ich deshalb
machen, weil ich mit insgesamt 6 verschiedenen Teil- und
Vollreplikaten sowie einer Version im Firmennetzwerk (der Rest
in Filialen) arbeite, deren Tabellennamen anders heißen
müssen, also muß ich im Formular die Tabellen verknüpfen,
tausche ich nun ein Formular aus, sind dort die Pfade zu den
falschen Tabellen drin, deshalb der Versuch dies anders zu
lösen, was auch hervorragend funktioniert, mir fehlt nur der
Kniff wie ich die Module und Abfragen tauschen kann.

Pfade in Formularen? Und die Tabellen müssen jeweils anders heissen?

Den Sinn und die Notwendigkeit des Ganzen kann ich nicht so recht nachvollziehen, ich denke mal, das sollte man einfacher hinbekommen!

Ansonsten - Abfragen und Module kannst du doch genauso über die entsprechenden Container bzw. Auflistungen identifizieren und mit Transferdatabase kopieren. Wenn du Module kopierst, dekompilierst du aber deine Datenbank - insofern ist das keine empfehlenwerte Vorgehensweise.

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)

Hallo Reinhard,

vielleicht gehe ich das wirklich zu umständlich an oder denke um die Ecke.

Deshalb nochmal mein Szenario:

Eine Hauptfiliale dort läuft die Datenbank im Netz. Auf dem Server nur die Tabellen, auf den Workstations die Formulare, Module etc. Die Tabellendatenbank ist repliziert, DesignMaster liegt im Hintergrund gearbeitet wird mit einem Replikat.

Nun habe ich auf dem Server mehrere Voll- bzw. Teilreplikate der Tabellendatenbank erzeugt. Diese habe ich dann auf eine lokale Festplatte kopiert, dort auch die MasterFormulardatenbank hinein kopiert, bei der noch kein Bezug auf Tabellen vorhanden ist und dann die Tabelle des Replikats mit der Formulardatenbank verknüpft.

Die Filialen schicken ihre Tabellendatenbank derzeit gezippt per Einwahl auf den Server, dort werden sie in das Serververzeichnis kopiert, dann synchronisiert und wieder zurückgeschickt ( hier bin ich am Lesen wie eine direkte Synchronisation geht, glaube auch es verstanden zu haben, will aber aufgrund vor der Synchronisation die Daten vorher checken).

Und deshalb glaube ich halt, dass ich die Formulardatenbank nicht einfach auftauschen kann.

Meine Frage:

Mache ich das im Ansatz falsch. Habe ich das Konzept von Frontend und Backend falsch verstanden und mache odrt einen Fehler, oder ist es dem Access egal wo die Datenbank liegt, wenn ich relative Pfade verwende, also Replikat1 wird erzeugt auf dem Server im Verzeichnis Filiale1 und die Formulardatenbank liegt auf dort, alle weiteren Repliate liegen in anderen Verzeichnis kriegen dann aber den gleichen Namen. Wenn Access den relativen Pfad verwendet, dann geht das, werde ich gleich testen.

Wäre trotzdem nett, wenn du ( oder jemand anderes) mir bzgl. des Ansatzes ein Feedback geben könntest, weil ich mich mit Replikation und Aufteilung in Back- und Frontend zum ersten Mal beschäftige und da jede Hilfe gebrauchen kann, noch dazu wenn einer nervt und immer wieder fragt, warum das und jenes noch nicht funktioniert.

Nebenbei: Jetzt habe ich kapiert, was du mit zu lang meinest. Wer T-DSL Flat hat, schreibt seine Anfragen schon mal online, und hat dann bei wer-weiss-was oft das Problem, das der Artikel nicht mehr versendet wird (20 min, ich weiß), deshalb kopiere ich den Artikel in die Zwischenablage und wenn ich nicht versenden kann, dann schreibe ich einen neuen und dann scheine ich STRG C irgendwie öfters betätigt zu haben :smile:

Besten Dank für deine bisherigen und (hoffentlich zukünftigen)Antworten

Peter

Relative Pfade gehen nicht - aber man kann die Pfade ja jeweils anpassen (siehe sinngemäß http://www.donkarl.com/FAQ/FAQ3TAbfragen.htm#3.1 - FAQ 3.1).
Ansonsten sehe ich nicht, warum man das Frontend nicht einfach austauschen sollte - ich jedenfalls mache das immer so…

Gruß aus dem Norden
Reinhard Kraasch (http://www.kraasch.de - Access Tipps & Tricks)