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.
wenn längere Zeit niemand antwortet, liegt die Vermutung nahe, dass Dich keiner versteht
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.
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.
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.
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
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.