Wie fülle ich ein Access-Kombinationsfeld in VBA?

Hallo,

ich arbeite an einer Datenbank mit diversen Produkten. Zu diesen Produkten möchte ich Bilder hinterlegen. Diese liegen in der Ordnerhierarchie unterhalb der AccessDB

bspw:
Datenbank ===> c:\Programme\AccessDB\datenbank.mdb
Bilder ===> c:\Programme\AccessDB\bilder\xyz.jpg etc.

In der Datenbank gibt es eine Artikeltabelle mit den Artikeln und den Bildernamen (bspw. prod_2.jpg)
Wenn ich nun die Artikel verwalten möchte, brauche ich ein Kombinationsfeld, welches mir alle Dateinamen aus dem Verzeichnis (C:\Programme\AccessDB\bilder) darstellt. Nach der Auswahl schreibt er den gewählten Dateinamen in die Artikeltabelle hinein.

Folgendes habe ich schon im Netz gefunden:

Der Pfad und Dateiname des Bilderverzeichnisses würde lauten:
pfad = CurrentDb.Name + „bilder“

Eine Liste der Dateinamen erhalte ich durch:

pfad = CurrentDb.Name + „bilder“
attribut = 4
datei = Dir(Pfad, attribut)
Do
s = s + datei + Chr(13)
datei = Dir
Loop Until datei = „“
MsgBox (s)

Da ich aber noch ein greenhorn in Sachen VBA bin, schaffe ich es leider nicht die Dateinamen nun in das Kombinationsfeld zu packen.

Habt Ihr vielleicht eine Idee?

Vielen Dank im Voraus!
Sebastian

Hallo,

schreib’ doch einfach die Namen und Pfade zu den Bildern in eine Tabelle. Tabellen kann man in VBA als „recordset“ (siehe Access-Hilfe) ansprechen. Dann kannst Du diese Tabelle bzw. die gewünschten Spalten dem Kombinationsfeld als Datenquelle zuweisen.

HTH,

ujk

Hallo,

schreib’ doch einfach die Namen und Pfade zu den Bildern in
eine Tabelle. Tabellen kann man in VBA als „recordset“ (siehe
Access-Hilfe) ansprechen.

Ich möchte die Bildernamen aber nicht fest eintragen, da die Sammlung stetig wächst und man mit der dynamischen Abfrage des Ordnerinhalts dann immer den aktuellen Bestand der Bilder hat.
In der Tabelle sollen nur die Bildernamen hinterlegt werden.

Meine Frage ist eigentlich ja nur die, wie man ein Kombinationsfeld „von Hand“ füllen kann, so daß ich die Dateinamen als Schleife dort einlesen kann.

Danke im Voraus

Hallo,

Danke im Voraus

Du Optimist. :wink:

Mein Access 97 bietet drei Typen von Datenquellen für Kombinationsfelder an: Werteliste, Feldliste und Tabelle/Abfrage. Ich arbeite eigentlich immer mit Tabellen, weil das am flexibelsten zu handhaben ist.

In Deinem Fall müßten die Tabelleninhalte (Bildernamen) nur (z. B. beim Öffnen der Datenbank) gelöscht und neu eingelesen werden.

ujk

Hallo, Sebastian!

Wie ujk schrieb: Arbeite mit einer Tabelle.

Die Alternative wäre eine Wertliste. Dort trennst Du die Einträge mit ; und weist alles der RowSource-Eigenschaft zu.

Eine Liste der Dateinamen erhalte ich durch:

pfad = CurrentDb.Name + „bilder“
attribut = 4
datei = Dir(Pfad, attribut)
Do
s = s + datei + Chr(13)

Hier statt Chr(13) „;“ eingeben.

datei = Dir
Loop Until datei = „“
MsgBox (s)

Und dann Me.Kombinationsfeld1.RowSource=s
Dabei als Herkunftstyp „Wertliste“ einstellen. Hat aber den Nachteil, dass der Text s nicht beliebig lang werden darf.

Daher: Schreib die Daten statt der Zuweisung s = s + … in eine Tabelle, setze den Herkunftstyp auf „Tabelle/Abfrage“ und weise der RowSource die entsprechende Tabelle zu. Das Aktualisieren der Tabelle muss dann jedes Mal beim Aufruf des Formulars geschehen.

Gruß, Manfred