Dokumente, PDF-Dateien, Kalkulationen etc. – für viele Anwendungen wäre es sinnvoll, Access-Daten mit externen Dateien zu verbinden. Sei es, um die Korrespondenz zusammen mit einem Kunden zu speichern oder um auf das komplette Marketing- und Support-Material über den entsprechenden Artikeldatensatz zugreifen zu können. Wir zeigen Ihnen, wie Sie genau diese Verknüpfung mit wenig Auf – wand und ohne Speicherplatzprobleme her stellen. Dabei spielt es keine Rolle, Die Prozedur startet über „CreateObject“ eine neue Instanz von Access. Wenn ein Kennwort angegeben ist, öffnet die Methode „Open Database“ die Datenbank und übergibt dabei das Kennwort. Dann wird die Datenbank mit „OpenCurrentDatabase“ für die Bearbeitung per Benutzeroberfläche initialisiert. Zwei weitere Anweisungen, „.RunCommand acCmdAppRestore“ und „.RunCommand acCmdAppMaximize“, sorgen nun da für, dass das zweite Access-Fenster maximiert im Vordergrund angezeigt wird.
Ob Sie Word-Texte, Excel-Kalkulationen, PDF-Dateien oder BMP-Grafiken in Access einbinden möchten.
Die standardmäßig von Access an gebotenen OLE-Felder scheiden hier von Anfang an aus, denn abgesehen davon, dass Sie auf diesem Weg nicht jeden Dateityp einbinden können, ist ihr Einsatz immer mit einer erheblichen Vergrößerung der Datenbank verbunden. Geschwindigkeitseinbußen und ein erhöhtes Risiko für Datenverlust sind die Folge. Mit der Anhang-Funktion bietet Access 2007 zwar eine interessante Alternative, aber unsere Lösung ist dennoch schneller, flexibler und speichersparender!
Zur Lösung des Problems wird einfach nicht die komplette Datei in der Datenbank gespeichert, sondern es werden nur Pfad und Dateiname in einem normalen Textfeld festgehalten. Sie müssen daher selber da für sorgen, dass die Datei bei Bedarf irgend wie angezeigt werden kann, während bei einem OLE-Feld ein Doppelklick genügen würde.
Behilflich ist Ihnen dabei eine API-Funktion namens „ShellExecute()“. Diese Funktion hat normalerweise die Aufgabe, Anwendungen kontrolliert zu starten. Man kann sie aber auch dazu einsetzen, ein beliebiges Dokument oder eine beliebige Datei zu öffnen. „ShellExecute()“ analysiert dabei die Erweiterung der Datei, fragt über andere Funktionen beim Betriebssystem an, welche Anwendung dafür zuständig ist, und öffnet diese Anwendung mit der Datei als Parameter. Wenn Sie „ShellExecute()“ also einen Dateinamen mit der Kennung DOC übergeben, wird dementsprechend Word oder bei einem PDF-Dokument der Adobe Acrobat Reader gestartet. Für den Entwickler hat das den Vorteil, dass er sich innerhalb der Datenbank nicht darum kümmern muss, welche Anwendung für welche Dateierweiterung aufzurufen ist. Vielmehr kann er Zuordnungen nutzen, die auch unter Windows genutzt werden.
Dazu aber gleich etwas mehr, denn bevor eine Datei über „ShellExecute()“ geöffnet werden kann, müssen Pfad und Dateiname irgendwo gespeichert und beispielsweise einzelnen Kunden, Lieferanten oder Artikeln zugeordnet werden können. Die zweckmäßigste Lösung besteht darin, eine zusätzliche Tabelle „Externe Datei en“ einzusetzen, die mit der Haupttabelle über einen Primärschlüssel wie „Kunden-Code“, „Lieferanten-Nr“ oder „Artikel-Nr“ verknüpft ist. Verwaltung und Anzeige können dann ganz einfach über ein Unterformular abgewickelt werden. Anhand der Beispieldatenbank „Nordwind“ werden wir das im Folgen den einmal demonstrieren.
Im ersten Schritt legen Sie die benötigte Zusatztabelle an:
- Wechseln Sie im Datenbankfenster in den Bereich „Tabellen“, klicken Sie auf NEU und wählen Sie im folgen den Dialog den Eintrag „Entwurfsansicht“ per Doppelklick aus. In Access 2007 klicken Sie auf der Multifunktionsleiste „Erstellen“ auf das Symbol TABELLE.
- Legen Sie ein Feld an, das den gleichen Namen, den gleichen Datentyp und die gleichen Eigenschaften auf – weist wie der Primärschlüssel in der Haupttabelle. In unserem Beispiel ist das das Feld „Kunden-Code“ vom Datentyp „Text“ mit einer Länge von fünf Zeichen. Bei einer Lieferanten oder Artikelverwaltung käme hier beispielsweise ein Feld „Lieferanten-Nr“ oder „Artikel-Nr“ zum Einsatz. Dieses Feld dient später der Verknüpfung zur Haupttabelle.
- Legen Sie ein Feld „Stichwort“ vom Datentyp „Text“ mit einer Länge von „50“ Zeichen an. Dieses Feld speichert einen kurzen Hinweis auf den Inhalt der externen Datei wie beispielsweise „Besuchsbericht I/2007“, „Angebot Elektroartikel“ oder ähnlich.
- Erstellen Sie ein Feld „Datei“ vom Datentyp „Text“ mit einer Länge von „250“ Zeichen. In diesem Feld wird der Pfad der externen Datei in der Form „X:\Pfad\Dateiname.Erw“ festgehalten.
- Legen Sie ein Feld „Auf genommen – Am“ vom Datentyp „Datum/Zeit“ an und stellen Sie die Eigenschaft „Standard wert“ auf „Jetzt()“. Dieses Feld wird beim Anlegen neuer Datensätze und somit bei der Zuordnung neuer externer Dateien auf das aktuelle Systemdatum und die Zeit gesetzt. Sie können es beispielsweise ein setzen, um die externenDateien später im Unterformular chronologisch auf – zulisten.
- Speichern Sie die Tabelle unter dem Namen „Externe Dateien/Kunden“ und verlassen Sie den Entwurfsmodus. Ein Primärschlüssel muss für diese Tabelle nicht angelegt werden – beantworten Sie die entsprechende Abfrage mit NEIN.
Im zweiten Schritt legen Sie eine Abfrage an, die einerseits die Verknüpfung zwischen Haupt- und Detailtabelle – hier „Kunden“ und „Externe Dateien/Kunden“ – herstellt und das Ergebnis nach dem Stichwort oder Datum sortiert:
- Wechseln Sie im Datenbankfenster in den Bereich „Abfragen“, klicken Sie auf NEU und klicken Sie im folgen – den Dialog zweimal auf den Eintrag „Entwurfsansicht“. In Access 2007 wechseln Sie auf die Multifunktionsleiste „Erstellen“ und klicken auf das Symbol ABFRAGEENTWURF.
- Wählen Sie dann zunächst die Haupttabelle, also zum Beispiel „Kunden“, „Lieferanten“ oder „Artikel“, und an – schließend die dazugehörige Detailtabelle für die externen Dateien, also beispielsweise „Externe Dateien/Kunden“, per Doppelklick aus. Klicken Sie dann auf SCHLIEßEN. Access stellt daraufhin automatisch eine Verknüpfung zwischen dem Primärschlüsselfeld der Haupttabelle und dem gleichnamigen Feld in der Detailtabelle her.
- Klicken Sie zweimal auf das Sternchen, um alle Felder der Detailtabelle zu verwenden.
- Wählen Sie das Feld „Stichwort“ oder „Aufgenommen Am“ per Doppelklick aus, deaktivieren Sie das Kontrollkästchen in der Zeile „Anzeigen“ und stellen Sie die Sortierung auf „Aufsteigend“ (wenn nach Stichwort sortiert werden soll) oder auf „Absteigend“ (wenn nach dem Datum sortiert und neueste Dateien am Anfang auf gelistet werden sollen).
- Sichern Sie die Abfrage unter dem Namen „AFufo Externe Dateien/Kunden“ oder ähnlich und verlassen Sie den Entwurfsmodus.
Im dritten Schritt erstellen Sie ein Unterformular und fügen es in das Haupt -formular ein. Als Basis können Sie das Unterformular „UF Externe Dateien/Kunden“ aus unserer Beispieldatenbank verwenden.
Übertragen Sie das Formular in Ihre Datenbank.
Gehen Sie dann wie folgt vor:
- Öffnen Sie das Unterformular im Entwurfsmodus.
- Stellen Sie die Eigenschaft „Datenherkunft“ auf den Namen der zu verwendenden Abfrage, in unserem Bei – spiel „AFufo Externe Dateien/Kunden“.
- Weitere Anpassungen sind nicht notwendig, da die Funktionen des Unterformulars unabhängig von Feldnamen arbeiten.
- Speichern Sie die Änderungen und verlassen Sie den Entwurfsmodus.
Das Unterformular arbeitet mit Funktionen, die in einem Modul „modWinDialogs“ und der Klassenbibliothek „clsShellExec“ abgelegt sind. Diese beiden Objekte müssen Sie im vierten Schritt aus der Beispieldatenbank in Ihre Datenbank übertragen.
Im fünften und letzten Schritt fügen Sie das Unterformular in das Hauptformular ein:
- Öffnen Sie das Hauptformular im Entwurfsmodus.
- Ziehen Sie das dazugehörige Unterformular, hier „UF Externe Dateien/Kunden“, aus dem Datenbankfenster in das Hauptformular. Access stellt automatisch die passende Größe dafür ein.
- Markieren Sie das Unterformular- Steuerelement und lassen Sie das Eigenschaftenfenster anzeigen.
- Prüfen Sie die Einstellungen in den Eigenschaften „Verknüpfen von“ und „Verknüpfen nach“. Diese sollten bereits die korrekten Feldnamen – in unserem Beispiel „Kunden-Code“ und „Kunden-Code“ – enthalten. Bei Bedarf passen Sie die Felder entsprechend an.
- Speichern Sie die Änderungen und lassen Sie das Formular testweise anzeigen.
Im Hauptformular wird zunächst ein leeres Unterformular angezeigt. Die Kopfzeile enthält neben den Bezeichnungsfeldern „Stichwort“ und „Datei“ zwei Symbole. Setzen Sie den Cursor zunächst in das Feld STICHWORT und geben Sie bei spielsweise „Besuchsbericht I/2007“ oder ähnlich ein.
Klicken Sie dann auf das erste Symbol Datei AUSWÄHLEN/ZUORDNEN im Formularkopf. Über einen komfortablen Dateiauswahldialog können Sie die gewünschte externe Datei ganz einfach lokalisieren oder geben Sie Pfad und Dateiname aber manuell in das Feld DATEI ein.
Über die Liste DATEITYP im Auswahldialog können Sie die Auswahl auf verschiedene Dateigruppen wie „Office- Dateien“, „Bilder“ oder „Alle Dateien“ einschränken und Ihre Daten bestände so etwas einfacher durchsuchen.
Um eine der externen Dateien an zeigen zu lassen, setzen Sie den Cursor einfach in das Feld STICHWORT oder DATEI und klicken dann auf das Symbol DATEI ANZEIGEN im Formularkopf. Daraufhin wird die zugehörige Anwendung zusammen mit der Datei gestartet. Alternativ dazu können Sie auch direkt einen Doppel klick in das Feld STICHWORT oder DATEI ausführen.
Sollten Sie die Zuordnung einer externen Datei einmal nicht mehr benötigen, können Sie den dazugehörigen Datensatz im Unterformular wie gewohnt löschen: Wechseln Sie einfach in den betreffen – den Datensatz und wählen Sie das Menü BE AR BEITEN-DATENSATZ LÖSCHEN an. In Access 2007 wechseln Sie auf die Multifunktionsleiste „Start“ und klicken auf den Pfeil neben LÖSCHEN. An schließend wählen Sie den Eintrag DATENSATZ LÖSCHEN aus.
Häufig haben Sie die zu einem Kunden, Lieferanten oder Artikel gehörenden Dateien bereits in einem speziellen Verzeichnis auf Ihrer Festplatte gespeichert. Damit Sie in solchen Fällen nicht jede Datei einzeln aufnehmen müssen, haben wir eine Sonderfunktion „Verzeichnis ein lesen“ in die Datenbank integriert:
Wenn Sie beim Klick auf das Symbol DATEI AUSWÄHLEN/ZUORDNEN die Strg-Taste gedrückt halten, wird eine Ordnerauswahl angezeigt, über die Sie das gewünschte Verzeichnis auswählen können.
Anschließend wird für jede in diesem Verzeichnis gefundene Datei ein neuer Datensatz mit dem Stichwort „Neue Datei“ und dem jeweiligen Pfad an gelegt. Anschließend können Sie die entsprechen den Stichwörter eingeben und auf diesem Weg viel Zeit bei der Zuordnung der Dateien sparen.