Die Darstellung von Dateinamen inklusive Pfad ist in Access (und auch in anderen Anwendungen) problematisch, wenn dazu lediglich ein Textfeld, ein Kombinationsfeld oder ein Listenfeld zur Verfügung steht. In der Regel reicht der Platz nicht, um den kompletten Dateinamen darzustellen. Dieser Beitrag zeigt, wie Sie Dateinamen entsprechend gekürzt darstellen und dennoch bei Bedarf die Bearbeitung in Text- oder Kombinationsfeldern erlauben.
Beginnen wir mit einem einfachen Textfeld namens txtDateiname, das einen mit einem Datei öffnen-Dialog ausgewählten Dateinamen aufnehmen soll. Dies erledigen Sie in der Regel mit einer Konstellation wie in Bild 1. Die Schaltfläche rechts löst beim Anklicken das Ereignis Beim Klicken aus, das wiederum die folgende Ereignisprozedur startet:
Bild 1: Einfaches Textfeld zum Aufnehmen eines Dateinamens plus Schaltfläche
Private Sub cmdDateiAuswaehlen_Click() Me!txtDateiname = OpenFileName(CurrentProject.Path, , "Access-Datenbank (*.mdb,*.accdb)|Alle Dateien (*.*)") End Sub
Die Prozedur verwendet die Funktion OpenFilename, um einen Datei öffnen-Dialog anzuzeigen. Die Datei, die der Benutzer mit diesem Dialog auswählt, wird dann als Wert des Textfeldes txtDateiname eingetragen.
Dies funktioniert auch reibungslos, allerdings zeigt das Textfeld zu lange Dateinamen wie in Bild 2 an.
Bild 2: Anzeige eines zu langen Dateinamens
Dateiname kürzen
Was also tun Ganz einfach: Sie nutzen eine kleine Funktion, die den Dateinamen für unsere Zwecke aufbereitet. Das Ergebnis soll so wie in Bild 3 aussehen. Zwischen dem ersten und dem letzten Backslash sollen so viele Verzeichnisse durch drei Punkte (…) ersetzt werden, bis der Ausdruck eine bestimmte Zeichenlänge erreicht – die dann vom Textfeld dargestellt werden kann.
Bild 3: Textfeld mit gekürztem Dateinamen
In diesem Fall hat die Funktion tatsächlich alle Elemente bis auf den Laufwerksbuchstaben und den Dateinamen entfernt.
Bevor wir einen Blick auf die Funktion werfen, welche die Kürzung vornimmt, schauen wir uns noch an, welche Möglichkeiten es zur weiteren Verarbeitung des Dateinamens gibt. So möchte der Benutzer gegebenenfalls doch noch den kompletten Dateinamen sehen oder diesen sogar weiterverwenden. Das Betrachten des Dateinamens lässt sich ganz einfach realisieren, indem Sie den Dateinamen nach dem Einlesen als Wert der Eigenschaft ControlTipText einstellen. Der Dateiname erscheint dann nach dem Überfahren des Textfeldes mit der Maus (s. Bild 4).
Bild 4: Anzeige des vollständigen Dateinamens
Wenn Sie den Wert des Textfeldes weiterverarbeiten möchten, könnten Sie erstens auf den Inhalt der Eigenschaft ControlTipText zugreifen. Wenn Sie diese gar nicht nutzen möchten, legen Sie entweder ein weiteres Steuerelement an, das den Dateinamen zwischenspeichert, oder Sie verwenden die Tag-Eigenschaft des Steuerelements.
Die Prozedur cmdDateiAuswaehlen2_Click, die beim Mausklick auf die Schaltfläche neben dem zweiten Textfeld ausgelöst wird, liest zunächst den Dateinamen in die Variable strDateiname ein (s. Listing 1).
Listing 1: Füllen des Textfeldes mit gekürztem Dateinamen
Private Sub cmdDateiAuswaehlen2_Click() Dim strDateiname As String strDateiname = OpenFileName(CurrentProject.Path, , "Access-Datenbank (*.mdb,*.accdb)|Alle Dateien (*.*)") If Len(strDateiname) > 0 Then Me!txtDateiKurz = DateinameKuerzen(strDateiname, 50, True) Me!txtDateiKurz.ControlTipText = strDateiname Me!txtDateiKurz.Tag = strDateiname End If End Sub
Nach einer Prüfung, ob ein Dateiname eingelesen wurde, führt die Prozedur drei Schritte durch: Sie wendet die weiter unten beschriebene Funktion DateinameKuerzen auf den Wert von strDateiname an und trägt das Ergebnis in das Textfeld txtDateiKurz ein und fügt den vollen Dateinamen als Wert der Eigenschaften ControlTipText und Tag ein.
Manuelle änderung des Dateinamens
Was geschieht, wenn der Benutzer den Dateinamen manuell ändern möchte Dazu wird der Benutzer in das Textfeld klicken und die gewünschten änderungen vornehmen. Nun müsste man allerdings zu diesem Zeitpunkt den gekürzten Eintrag entfernen und den vollen Dateinamen anzeigen, damit eine Bearbeitung möglich wird.
Dazu verwenden wir die beiden Ereignisse, die beim Eintreten in das Textfeld und beim Verlassen ausgelöst werden: Bei Fokuserhalt und Bei Fokusverlust.
Das Ereignis Bei Fokuserhalt des Textfeldes txtDateiKurz soll die folgende Ereignisprozedur auslösen:
Private Sub txtDateiKurz_GotFocus() Me!txtDateiKurz.Text = Me!txtDateiKurz.Tag End Sub
Dies stellt die Eigenschaft Text des Textfeldes auf die in der Eigenschaft Tag gespeicherte lange Version des Dateinamens ein.
Der Benutzer kann den Dateinamen nun bearbeiten. Wenn die Eingabe abgeschlossen ist, was beispielsweise beim Verlassen des Textfeldes der Fall ist, soll der geänderte Text wieder in den beiden Eigenschaften Tag und ControlTipText landen und die gekürzte Fassung angezeigt werden.
Dazu schreibt die folgende Prozedur zunächst die geänderte lange Version in die Eigenschaften Tag und ControlTipText und fügt dann die gekürzte Version als Inhalt des Textfeldes ein:
Private Sub txtDateiKurz_LostFocus() Me!txtDateiKurz.Tag = Me!txtDateiKurz Me!txtDateiKurz.ControlTipText = Me!txtDateiKurz Me!txtDateiKurz = DateinameKuerzen(Me!txtDateiKurz, 50, True) End Sub
Dateinamen kürzen
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo