Automatisches verknüpfen von Tabellen in Access

Ich habe einen Ordner mit etwa 100 DB`s (Access2010).
Ich möchte über VB aus den Datenbanken deren Bezeichnung etwa so beginnt „0001_Name…“ jeweils den Inhalt der Tabelle „Referenz“ in die Tabelle „Gesamtreferenz“ der Frontenddatenbank kopieren.

Der Name der Datenbanken in denen sich die gesuchten Tabellen befinden beginnt immer mit einer 4 stelligen Zahl.z.B.:
0001_NameX.accdb
0002_NameY.accdb

„Gesamtreferenz.accdb“ ist die DB, und „Gesamtreferenz“ ist die Tabelle wo alles rein soll.

Zur Zeit habe ich alle Tabellen manuel verknüpft und mit Anfügeabfragen für jede einzelne Tabelle deren Inhalt in die Gesamtreferenz Tabelle geschrieben.
Ach ja, ein Macro habe ich auch noch.

Ich bin mir sicher das das Ganze auch mit einer Schleife im VB gelöst werden kann, nur leider weiß ich nicht wie.

Moin, jetlag,

wenn längere Zeit niemand antwortet, liegt die Vermutung nahe, dass Dich keiner versteht :wink:

Wenn ich Dich richtig verstehe, soll aus 100 Dbs je eine Tabelle, die überall gleich heißt, in eine neue Tabelle kopiert werden. Wo da etwas verknüpft wird, ist mir allerdings schleierhaft.

Besorg Dir ein Verzeichnis aller Datenbanken mit „Dir Ordner >> dir.txt“, lies die Datei dir.txt zeilenweise, öffne eine DB nach der anderen, führe die jeweilige Anfügeabfrage aus, schließe die laufende DB und zum Schluss die Referenz-DB.

Sollte das alles falsch verstanden sein, dann wäre es vielleicht angebracht, dia fachliche Aufgabe zu schildern und nach einer Lösung zu suchen.

Gruß Ralf

Hallo,

mal vor5rausgesetzt ich habe dich richtig verstanden…

  • also es gibt n-Datenbanken die alle in einem Verzeichnis liegen.
  • alle DBs haben eine Tabelle gleichen Namens und gleicher Struktur
  • der Inhalt eben dieser Tabellen soll in eine separaten Tabelle zusammengefasst werden

Mein Vorschlag mittels VBA:
Verknuepfe eine der Tabellen manuell in deiner Ziel-Datenbank

Nehme ein FileSystemObject und hole dir damit die Liste der DBs im Verzeichnis.

Dim fs As Object
Dim aktFolder As Object
Dim fl As Object

Set fs = CreateObject(„Scripting.FileSystemObject“)
Set aktFolder = fs.GetFolder(deinPfadName)
For Each fl In aktolder.Files
’ in fl.Path ist der Dateiname
next fl

In der Schleife ueber die Dateiliste, kannst du dann die .Connect Eigenschaft des Tabeldef-Objekts deiner verkuepften Tabelle manipulieren.

z.B.

Dim tblDef As TableDef

set tblDef = CurrentDB/TabeleDefs(„verknTabelle“)

tblDef.Connect = „;DATABASE=“ & fl.Path & „;TABLE=“ & dein_Tabellen_Name & „:stuck_out_tongue_winking_eye:WD=“

tblDef.RefreshLink

===============================

Dann kannst du mittels Abfrage, SQL-Anweisung oder satzweise deine Daten kopieren.

mal einfach so hingeschrieben ohne Anspruch auf Freiheit von Syntaxfehler, aber die Logik sollte passen.

Hope this helps
Peter

Hallo Ralf,

Bisher hatte ich nur etwa 30 Datenbanken von denen ich jeweils die Tabelle „Referenz“ in der Datenbank „Gesamtreferenz“ verknüpft hatte.
Dann habe ich mit Anfügeabfragen die Tabellen (jede einzeln, also 30 Abfragen) einer einzigen Tabelle zusammengefasst. Diese Tabelle heißt so wie die Datenbank „Gesamtreferenz“
Jetzt habe ich aber etwa 100 solcher Datenbanken und da dachte ich mir sowas müste doch auch über ein VB script zu lösen sein.

Also das sollte das Programm machen:

Suche im Verzeichnis nach einer Datenbank die im Namen an vorderster Stelle eine Zahl hat (1_Spidan.accdb)
Öffne die Datenbank und stelle eine Verknüpfung her zu der Tabelle „Referenz“
Füge den Inhalt der Tabelle „Referenz“ an die Tabelle „Gesamtreferenz“ an.
Lösche die Verknüpfung

Suche im Verzeichnis nach der nächsten Datenbank die an vorderster Stelle im Namen eine Zahl hat (2_Hella.accdb)
Bei einer Fehlermeldung versuche die nächste z.B: 3_ATE.accdb
Öffne die Datenbank und stelle eine Verknüpfung her zu der Tabelle „Referenz“
Füge den Inhalt der Tabelle „Referenz“ an die Tabelle „Gesamtreferenz“ an.
Lösche die Verknüpfung

usw.

Also ich habe mal mit einer Schleife experimentiert (mein erstes mal)

Das funktioniert solange als ich die Datenbank nur so bezeichne: 1.accdb, 2.accdb ,…
Jetzt muß ich aber leider zu der Zahl auch noch eine aussagekräftige Bezeichnung haben wie zB Spidan, Hella, ATE usw.

Von da weg weiß ich nicht mehr weiter.

Hi jetlag,

wo ist jetzt das Problem? Mehr als das, was in den bisherigen Antworten steht, weiß ich nicht, und was Du unter Verknüpfen verstehst, ist mir immer noch rätselhaft.

Das funktioniert solange als ich die Datenbank nur so
bezeichne: 1.accdb, 2.accdb ,…
Jetzt muß ich aber leider zu der Zahl auch noch eine
aussagekräftige Bezeichnung haben wie zB Spidan, Hella, ATE
usw.

Auch diese Passage ist mir unverständlich - weder was da klappt noch was nicht :frowning:

Eine Variable in Datenbankbefehlen zu verwenden ist keineswegs trivial, da stellt sich die Frage, ob sich der Lernaufwand lohnt. Mit simplen Mitteln wie dem Directory-Befehl, einem Editor wie sed und regexp erstellst Du im Handumdrehen die nötigen Abfragen.

Gruß Ralf