VisualBasic Wie Pfad+Dateiname aus verknüpftem OLE-Feld in Access ermitteln?

flemmingr

Cadet 3rd Year
Registriert
Juni 2008
Beiträge
49
Hallo,
ich habe eine Access-2000-Tabelle "T_Doku" mit ca. 1000 Datensätzen, die ein Feld "Verweis" als OLE-Objekt enthält.
In diesem Feld können pdf-, doc-, zip-Dateien u. ä. verknüpft (nicht eingebettet!) sein.

Frage:
Wie kann ich den exakten Pfad und Dateinamen aus diesem OLE-Feld mittels VBE auslesen und in (neu angelegte) Textfelder (Text 255) von "T_Doku" einschreiben?
 
Hi,

Das wird so nicht gehen, wenn du die Datei an ein OLE bindest, ist es eingebettet. Es referenziert nicht mehr die Quelldatei. Warscheinlich bekommst du nur einen leeren string zurück?

Edit:

Ab Access 2007 gibt es auch sogenannte Attachment Felder, die sind um einiges komfortabeler als die OLE Felder.

Gruß
Bob
 
Zuletzt bearbeitet:
Hallo Bob,
die Dateien sind nicht eingebettet sondern verknüpft (verlinkt).
 
Hi,

Wie sieht denn dein Ansatz aus?

Private Sub Name_Afterupdate()
Me!textfeld = Me!olefeld

End Sub
 
Hallo Bob,
auf einem Formular erzeuge ich eine Schaltfläche 'btnOLE'. Beim Klicken:

Private Sub btnOLE_Click()
Dim DBS As Database
Dim RS As Recordset
Dim i As Integer
Dim strOLE As String
Set DBS = CurrentDb
Set RS = DBS.OpenRecordset("T_Doku")
i = 0
RS.MoveFirst
Do While Not RS.EOF
i = i + 1
RS.Edit
strOLE = OLE_Function_1(RS.Fields("Verweis"))
RS.Fields("PfadName") = strOLE
strOLE = OLE_Function_2(RS.Fields("Verweis"))
RS.Fields("DateiName") = strOLE
RS.Update
RS.MoveNext
If i = 3 Then Exit Do (wenn es funktioniert kommt diese Zeile weg!)
Loop
RS.Close
Set RS = Nothing
End Sub

Nur fehlen mir die Funktionen 'OLE_Function_1' und 'OLE_Function_2', die den Pfad bzw. Dateinamen ermitteln sollen. Diese sollen in in 2 leere Textfelder (Text 255) geschrieben werden.
 
Hallo,

sieht doch schon mal gut aus. Habe mal ein paar Ergänzungen gemacht. Teste das mal durch oder vielleicht kommst du so schon auf deinen Lösungsweg. Habe den Code jetzt nicht getestet. Ansonsten müsstest du nochmal die DB-Datei in abgespeckter Form anhängen.

Private Sub btnOLE_Click()
Dim DBS As Database
Dim RS As Recordset
Dim i As Integer
Dim strOLE As String
Dim strOLE_Pfad As String
Dim strOLE_Datei As String
Set DBS = CurrentDb
Set RS = DBS.OpenRecordset("T_Doku")
i = 0
RS.MoveFirst
Do While Not RS.EOF
i = i + 1
RS.Edit
strOLE = RS.Fields("Verweis")
strOLE_Pfad = strOLE.Substring(strOLE.LastIndexOf("."), strOLE.Length - strOLE.LastIndexOf("."))
RS.Fields("PfadName") = strOLE_Pfad
strOLE_Datei = Path.GetFileNameWithoutExtension(RS.Fields("Verweis"))
RS.Fields("DateiName") = strOLE_Datei
RS.Update
RS.MoveNext
If i = 3 Then Exit Do (wenn es funktioniert kommt diese Zeile weg!)
Loop
RS.Close
Set RS = Nothing
End Sub

Gruß
Bob
 
Hallo Bob,
es kommt eine Fehlermeldung beim Kompilieren sowohl mit Access 2003 als auch 2010 bei strOLE.Substring(strOLE.LastIndexOf(".") Fehler.PNG

Ich habe Dir meine Access-Datei (gezippt) mit der Tabelle "T_Doku" angehängt.
 

Anhänge

  • tab.zip
    261,7 KB · Aufrufe: 115
Hallo,

Versuche es mal so, kann es leider nicht ganz testen, weil ich die Pfade der Dateiein nicht angezeigt bekomme.

screen.png

Code:
Private Sub btnOLE_Click()
    Dim DBS As Database
    Dim RS As Recordset
    Dim i As Integer
    Dim Pos As Integer
    Dim strOLE As String
    Dim strOLE_Pfad As String
    Dim strOLE_Datei As String
    Set DBS = CurrentDb
    Set RS = DBS.OpenRecordset("T_Doku")
    i = 0
    Pos = 0
    RS.MoveFirst
    Do While Not RS.EOF
        i = i + 1
        RS.Edit
        strOLE = RS.Fields("Verweis")
        Do
        strOLE_Pfad = Mid(strOLE, 1, Pos)
        Pos = InStr(Pos + 1, strOLE, "\")
        Loop Until Pos = 0
        RS.Fields("PfadName") = strOLE_Pfad
        strOLE_Datei = Split(strOLE, "\")
        RS.Fields("DateiName") = strOLE_Datei
        RS.Update
        RS.MoveNext
        If i = 3 Then Exit Do
    Loop
    RS.Close
    Set RS = Nothing
End Sub

Gruß
Bob
 
Hallo Bob,
die Prozedur gibt immer wieder Fehlermeldungen aus: Typenunverträglichkeit, Inhalt zu groß (da habe ich die Tabellenfelder "PfadName" und "DateiName" in Memo-Felder gewandelt) u.ä. Der Inhalt von "Verweis" sieht auch sehr kryptisch aus - angezeigt mit Msgbox. Viele ????-, weiterhin |-Zeichen, kleine Umlaute, aber keine vernünftig lesbare Textketten für Pfad oder Dateinamen, auch kein \-Zeichen zu sehen. Als ob der Inhalt vom OLE-Feld "Verweis" verschlüsselt ist.
 
Das war auch meine Vermutung in Post #2. So weit ich das Recherchieren konnte geht das mit den ole Feldern nicht. Werde morgen nochmal gucken.

So hab nochmal was dazu gefunden. Es geht nicht ohne Konvertierung. Du kannst den OLEString aber vorher in ein Textfeld konvertieren und dann wie in meinem hinzugefügten Code aufteilen.


Zitat von Microsoft:

Microsoft Access does not have a feature that enables you to determine the path for a linked OLE object stored in a table. The recommended approach to accomplish this task is to create an additional Text field in the table and to store the path to the linked OLE object in that field.

Hier der Link zum Workaround:

ACC2000: How to Retrieve the Path for Linked OLE Objects

Gruß
Bob
 
Zuletzt bearbeitet:
Zurück
Oben