Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

"Servicemodul" zum "Anstöpseln" an verschiedene Datenbanken

Begonnen von nurmikss, April 24, 2019, 15:56:16

⏪ vorheriges - nächstes ⏩

nurmikss

Hallo zusammen,

ich bekomme immer wieder Datenbanken (aus Fachprogramm exportiert) mit gleicher Struktur, aber unterschiedlichen Inhalten. Die Inhalte soll ich nach verschiedenen Mustern analysieren, ggf. anpassen und die Datenbankinhalte wieder in die Fachanwendung importieren.
Dazu aktiviere ich jedes Mal den Verweis auf "Microsoft VBsript regular expressions", füge in der VBA-Oberfläche ein paar Funktionen hinzu, damit ich die regulären Ausdrücke dann nutzen kann und erstelle ein paar Abfragen. Bei jeder neuen Datenbank das gleiche Prozedere. Die Datenbanken haben immer neue Namen.

Eigentlich müsste es genügen, wenn ich die Vorarbeit nur einmal mache, in eine Art "Servicemodul" packe und dieses dann nur noch an die neu gelieferte Datenbank "anstöpsle". Man müsste nur angeben, wo der Stöpsel reinkommt - also wo die neue Datenbank ist und wie sie heißt.
Sofern das Servicemodul eigene Tabellen hat, muss vor dem Reimportieren in die Fachanwendung der "Stöpsel" wieder "gezogen" werden, da die Tabellenstruktur für einen erfolgreichen Reimport nicht verändert werden darf.

Kann mir jemand Tipps geben, wie ich das anpacke ?

P.S.: Bitte Bescheid sagen, wenn das Thema eher in ein anderes Unterforum gehört.
Ich verwende Microsoft Office Professional plus 2010

Beaker s.a.

@nurmikss
Zitatalso wo die neue Datenbank ist und wie sie heißt.
Das lässt sich mit einem Filedialog doch einfach realisieren.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

PhilS

Ich sehe hier zwei Möglichkeiten.

Wenn ich deinen Text richtig verstanden habe, dann befinden sich in den wechselnden Datenbanken ja nur Tabellen und sonst nichts. In dem Fall schließe ich mich @Beaker S.A. an. Du musst in dein "Tool-Frontend" immer nur die jeweilige Datenbank verknüpfen.

Wenn du mehr bearbeiten willst, als nur Daten, dann könntest du dein Service-Modul als Add-In programmieren, dass Arbeiten in andere Datenbanken ausführen kann. - Das ist allerdings etwas komplexer als die erste Option.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

nurmikss

Jetzt zeigt sich meine mangelnde VBA-Erfahrung  :-\:
Wie packe ich das an: Wie erstelle ich das Frontend ? Dort möchte ich ja keine neuen Tabellen generieren, sondern zunächst mal nur in einem Formular auf die ausgewählte Datei bzw. ausgewählte Tabellen  zugreifen. Eine neue Access-Datei anlegen, geht so nicht, denn dann wird von mir verlangt, dass ich zumindest eine Tabelle anlege.
Ich verwende Microsoft Office Professional plus 2010

MzKlMu

Hallo,
Du legts eine neue Datenbank an, und dann verknüpfst die Access Tabellen der andern Datenbanken.
Dann kannst Du Formulare anlegen und die Tabellen wie direkt vorhandene Tabellen nutzen.

ZitatJetzt zeigt sich meine mangelnde VBA-Erfahrung
Mit VBA hat das nicht das geringste zu tun. Das sind ganz normale Standardfunktionalitäten von Access, da muss man nichts programmieren.
Gruß Klaus

PhilS

Zitat von: nurmikss am April 25, 2019, 17:55:20
Wie packe ich das an: Wie erstelle ich das Frontend ?
Wenn du die Komponenten deines "Servicemoduls" bereits hast, macht eine Kopie dieser Datenbank und lösche dann alle Tabelle. - Fertig.
Wenn du dann eine neue Tabellen-Datei bearbeiten willst, dann in deinem Servicemodul unter "Externe Daten" - "Access" -  "Verknüpfen" die Datendatei und darin deren Tabellen auswählen. - Das ist eine vereinfachte Abfolge, sollte aber das Prinzip verdeutlichen.
Jetzt hast du dein Servicemodul mit den aktuellen Datentabellen.
Die Datendatei kannst du nach deiner Bearbeitung dann an die entsprechende Stelle weiterleiten.
Bei der nächsten Datei zur Bearbeitung den hier beschriebenen Prozess dann einfach wiederholen. (Kopie am Anfang dann nicht mehr unbedingt nötig.)


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

nurmikss

OK, ich habe meine Abfragen usw. in einer Datenbank angelegt und die Tabellen gelöscht. Bei Aufruf einer Abfrage kommt (natürlich) eine Fehlermeldung, dass die Tabellen fehlen. Nach Verknüpfung mit einer externen Access- Datei, die die Tabellen enthält, funktionieren die Abfragen.

Allerdings bleiben beim Schließen der Datei - auch ohne Speichern ! - die (über 100) Verknüpfungen bestehen und müssen für eine weitere Zuordnung manuell gelöscht werden ! Eine weitere Zuordnung würde die alten Zuordnungen nicht überschreiben, sondern einen neuen Satz Verknüpfungen (,,Tabellenname", ,,Tabellenname1", usw.) anlegen.

Wie kriege ich es hin, dass sie Verknüpfungen zu einer bestimmten Datei wieder verschwinden ? Ich brauche die Verknüpfungen ja nur temporär und danach die gleichen Verknüpfungen zur nächsten Datei usw.

Der Einfachheit halber habe ich beim Verknüpfen "alle" ausgewählt obwohl ich nur einen Teil der Tabellen brauche. Aber das Problem bleibt das gleiche, wenn ich 10 Tabellen löschen muss, die ich vorher manuell zugeordnet hatte.

Ich habe so eine Konstruktion schon mal mit einem anderen Datenbankprogramm gemacht, aber da kam beim Schließen der Datei die Frage, ob die Änderungen (nämlich die neuen Verknüpfungen) gespeichert werden sollen. Und der Endanwender konnte nur "nein" antworten, weil er keine Berechtigung für Programmänderungen hatte. Auch noch ein bisschen technisch, aber machbar.
Ich verwende Microsoft Office Professional plus 2010

Beaker s.a.

@nurmikks
Private Sub EinName()
    Dim tdf As DAO.TableDef
    For Each tdf In CurrentDb.TableDefs
        If Len(tdf.Connect) > 0 Then
        'nur verknüpfte Tabellen
        DoCmd.DeleteObject acTable, tdf.Name
    Next tdf
End Sub

löscht alle verknüpften Tabelle aus der DB.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)