Office: (Office 2013) OLE Bilder als Datei exportieren

Helfe beim Thema OLE Bilder als Datei exportieren in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Guten Morgen Ich habe eine Tabelle mit Artikeln (über 700 Einträge) vor mir. Jeder Artikel hat ein Bild gespeichert als OLE-Objekt. Da das Backend... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von yss, 5. September 2016.

  1. OLE Bilder als Datei exportieren


    Guten Morgen

    Ich habe eine Tabelle mit Artikeln (über 700 Einträge) vor mir. Jeder Artikel hat ein Bild gespeichert als OLE-Objekt. Da das Backend sich nun langsam der 2GB Grenze annähert und die Performanz ziemlich leidet will ich nun das Ganze umbauen, so dass die Bilder als Datei im Hintergrund auf dem Server gespeichert werden und die Datenbank nur noch die Pfade bzw. Dateinamen verwaltet.

    Nun steh ich allerdings vor dem Problem, dass ich die Bilder (manche sind im Bitmap-Format und manche im JPG) in den OLE-Objekten nicht als Datei exportiert bekomme.
    Folgende Ansätze habe ich bereits versucht:

    1. Die Lösung von Herrn Lebans. Dazu habe ich die .accdb Datei in eine .mdb umgewandelt und dann mit dem OLEtoDisk geöffnet. Das Problem ist allerdings, dass mir nur die Bitmap-Bilder exportiert werden.

    2. Zwei Lösungen von Access Im Unternehmen. Bei dieser Lösung speichert er zwar alle Dateien (probiert habe ich bmp als auch jpg), die Bilder können allerdings nicht geöffnert werden, da sie anscheinend beschädigt sind. Die Dateigrößen passen. Die zweite Lösung war der GDI+-Wrapper. Allerdings liefert mir die Funktion SavePicGDIPlus immer einen Laufzeitfehler, dass "Image.Handle" nicht gefundet werden kann.

    3. Der dritte Versuch war mit einer Funktion von Ammara, welche einfach Blobs in eine Datei speichert. Die Bilder sind am Ende allerdings auch wieder beschädigt und können nicht geöffnet werden.

    Kennt jemand noch eine Möglichkeit, welche ich versuchen könnte? Bin langsam am verzweifeln. Eine Lösung wie von Herrn Lebans, welche mit JPG-Bildern funktioniert, wäre natürlich ideal.

    Hier der Code:


    PHP:
             Public Function exportImages()
    Dim db As Database
    Dim rc 
    As Recordset
    Set db 
    CurrentDb
    Set rc 
    db.OpenRecordset("tblArtikel"dbOpenDynaset)

    Dim lSize As Long
    Dim arrBin
    () As Byte

    Do Until rc.EOF
    lSize 
    rc.Fields("artBild").FieldSize
    ReDim arrBin
    (lSize 1)
    arrBin rc.Fields("artBild").GetChunk(0lSize)

    'Module Export ist der GDI+Wrapper von http://www.access-im-unternehmen.de/index1.php?id=300&BeitragID=337
    Dim objPicture As StdPicture
    Set objPicture = Export.ArrayToPicture(arrBin)
    If (Export.SavePicGDIPlus(objPicture, "<path>\Export WWS\" & rc("artIDIntern") & ".jpg", pictypeJPG, 90) = False) Then
    Debug.Print rc("artIDIntern") & " failed..."
    End If

    '
    auch mit .bmp versucht
    Blob
    .BlobToFile "<path>\Export WWS\" & rc("artIDIntern") & ".jpg", rc("artBild")

    'auch mit .jpg versucht
    mdlOLE.SaveOLEFieldToFile "
    tblArtikel", "artIDIntern", Val("" & rc("artIDIntern")), "artBild", "<path>Export WWS" & rc("artIDIntern") & ".bmp"
    rc.MoveNext
    Loop
    End Function
    :)
     
  2. Da die Bilder als OLE Objekte gespeichert sind, kann nach meinem Verständnis nur die Lösung von Lebans funktionieren.

    Der Rest würde voraussetzen, dass die Bilder als reine binäre Daten gespeichert sind - ohne OLE Server Infos - daher sind die Daten auch nicht lesbar.

    Vielleicht taucht ja noch eine Lösung auf.
    Da es aber nur 700 Bilder sind, kann man die auch manuell (Doppelklick und speichern) herausholen, oder die Bilder in eine eigene Access Datei auslagern.

    LG Markus
     
    markusxy, 6. September 2016
    #2
  3. Doppelklick funktioniert leider nicht, da kommt eine Fehlermeldung.


    OLE Bilder als Datei exportieren [​IMG]


    Allgemein läuft da irgendetwas schief. Wenn ich das gebundene Bild in einem Formular anklicke und in die Zwischenablage kopiere kann ich es nur in Paint wieder einfügen, der Office Picture Manager geht z.B. nicht. Sonst würde ich mir einen Klickbot schreiben, welcher die Bilder aus dem Formular kopiert, in den Picture Manager kopiert, die Qualität noch verändert und das Bild dann als JPG exportiert.
     
  4. OLE Bilder als Datei exportieren

    Was steht denn in ole Feld drinnen?
    Bei einem jpg File steht bei mir Paket und bei bmp steht Bitmap.

    LG M
     
    markusxy, 7. September 2016
    #4
  5. Ich denke, das sollte eigentlich nicht so schwierig sein. Ich habe dazu diesen Blogpost gefunden, der einen Lösungsansatz mit C# zeigt. - Da du nur einmalig die Bilder extrahieren willst, sollte das ja kein Hindernis sein.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  6. Vielen Dank, werde versuchen die Bilder einfach als Binary-Blob zu speichern und dann das C# Programm drüber laufen lassen, damit die Header entfernt werden.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  7. Die Frage ist doch wie die Bilder gespeichert sind.
    Meines Wissens nach wandelt Access Bilder die als OLE Objekt abgespeichert sind in ein internes Format um, das wesentlich mehr Platz benötigt. In dem Fall geht es nicht um einen einfachen Header.

    Im Blog geht es nach meinem Verständnis um Bilder die als Binärstrom gespeichert werden. Diese Frage - ob die Bilder tatsächlich als Binärstrom gespeichert sind - gilt es aber zuerst zu klären.

    Wenn er die Bilder aber nicht per Doppelklick öffnen kann sind sie vielleicht eh als reine Binärstrom gespeichert - was aber ohne zusätzliche Steuerelemente die binäre Daten direkt darstellen können wenig Sinn macht.

    LG M
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    markusxy, 7. September 2016
    #7
  8. OLE Bilder als Datei exportieren

    Da hast du Recht. Das C# Programm wirft mir bei allen Dateien die Exception


    PHP:
             throw new Exception("Unable to determine header size for the OLE Object") ;
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  9. Direkt in der Tabelle, jeweils in der Zeile des OLE Feldes.
    Je nach Typ der Datei steht dann was drinnen.
    Wie bereits erwähnt bei einem jpg File -> Paket und bei bmp -> Bitmap.
    Oder Long binary-Daten usw.

    LG M

    PS:
    Die Meldung an sich ist noch bedeutungslos.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    markusxy, 7. September 2016
    #9
  10. Ah ok danke, das Feld war ausgeblendet. Also bei den meisten Datensätzen steht "Bild", bei manchen auch "Bitmap Image".
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  11. und wenn du auf das OLE Feld mit Bild einen Doppelklick machst, wird es dann geöffnet?

    Also ich hab jetzt gesehen, dass man ein Bitmap zu einem Bild konvertieren kann und danach ist eine Öffnung direkt in der Anwendung nicht mehr möglich.
    Das wird vermutlich das Problem sein.

    LG Markus
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  12. \@yss
    So weit ich gesehen habe, werden die Bitmaps in das DIB Format umgewandelt.
    Vielleicht findest du ja ein Programm, dass die Daten konvertieren kann. Den Header musst natürlich auf entfernen. Wäre eine kleine Spielerei.

    Jedenfalls weiß ich jetzt, warum ich keine Bilder als OLE Objekte, sondern allerhöchstens als long binary speichere.
    LG Markus
     
  13. OLE Bilder als Datei exportieren

    Hallo,

    ich hab jetzt gesehen, dass ein bmp File nur in ein einfaches Frame gepackt ist und das entfernen des "Headers" - je nach Programm das die Daten dann anzeigt - auch genügen sollte. D. h. solange das Programm nicht prüft ob die Daten aus dem Fileheader mit der Filegröße übereinstimmen. Bei jpg allerdings sind die Daten umgewandelt. Die habe ich dann nicht weiter angesehen.
    Es wäre also sicher möglich in VBA eine Routine zu erstellen, die das speichern von OLE Objekten direkt in Files ermöglicht.

    Allerdings müsste man da etwas tiefer eintauchen.

    LG Markus
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  14. Ich habe im Moment keine Zeit mich tiefer mit dem Thema auseinanderzusetzen, daher kann ich keine eigene Erkenntnisse beisteuern.

    Ohne Gewähr ein paar Infos aus meiner Erinnerung:
    • Bis einschließlich A2003 speichert Access alle Bilder in OLE-Feldern intern als Device-Independent-Bitmap oder EMF (eher letzteres, bin aber nicht ganz sicher).
    • Ab A2007 kann man das Bildformat in den Optionen für die DB einstellen.
    • Wenn der OLE-Header entfernt wird, sollte entweder die ursprüngliche Bild-Datei oder die konvertierte Bitmap/EMF übrig bleiben.
    • Alle internen File-Header der gekapselten Datei sollten eigentlich korrekt sein, so dass man diese direkt ins Dateisystem schreiben kann.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  15. Nachdem ich jetzt alles versucht habe hat die Lösung mit Klickbot nun letztendlich funktioniert. Hab erst alle Bitmap-Bilder mit der Lösung von Lebans exportiert, diese dann aus der Tabelle gelöscht und den Rest per MouseRecorder einprogrammiert ,so dass er mir immer das Bild markiert hat, CTRL + C, dann in Office Picture Manager eingefügt und als JPG exportiert. Hat zwar 5h gedauert, lief aber alles automatisiert ab und somit habe ich nur 10min aufwenden müssen den Recorder zu programmieren.

    Vielen Dank an alle die versucht haben mir Tipps zu geben. Schade, dass es nun schlussendlich keine Lösung in VBA geworden ist.
     
Thema:

OLE Bilder als Datei exportieren

Die Seite wird geladen...
  1. OLE Bilder als Datei exportieren - Similar Threads - OLE Bilder Datei

  2. Mit Access VBA ein bmp in OLE-Objekt verknüpfen

    in Microsoft Access Hilfe
    Mit Access VBA ein bmp in OLE-Objekt verknüpfen: Liebe Forengemeinde, ich kämpfe seit tagen mit einem Problem einer OLE-Verknüpfung. Ich habe eine Datenbank, die bisher auf Access 2016 lief. Hierin werden auf einem Datenblatt je nach einem...
  3. OLE Objekte öffnen und speichern

    in Microsoft Excel Hilfe
    OLE Objekte öffnen und speichern: Hallo zusammen, ich hab mal wieder ein Problem. In einer Exceldatei sind mehrere Excel OLE's eingefügt. Diese sollen geöffnet und dann gesondert abgespeichert werden. Das Öffnen und speichern...
  4. Einem OLE-Feld ein Objekt per Formular zuweisen

    in Microsoft Access Hilfe
    Einem OLE-Feld ein Objekt per Formular zuweisen: Hallo zusammen, ich habe eine Tabelle mit mehreren Feldern. Eins davon ist vom Typ OLE und soll ein Bild einer Unterschrift für den späteren Bericht enthalten. Ich möchte ein Formular erzeugen,...
  5. Mehrere Bilder in OLE-Bild Object anzeigen lassen :smashing:

    in Microsoft Access Hilfe
    Mehrere Bilder in OLE-Bild Object anzeigen lassen :smashing:: Hallo Access Freunde, ich habe ein OLE-Bild Object in einem Access 2010 Formular hinzugefügt, damit ich ein Bild in dem Object anzeigen bekommen kann aber wie kann ich mehrere Bilder in dem...
  6. Fotos werden nur als Symbol anzeigt Ole-Objekt

    in Microsoft Access Hilfe
    Fotos werden nur als Symbol anzeigt Ole-Objekt: Hallo, ich habe über Google bereits erfolglos gesucht, vielleicht kann mir hier jemand freundlicherweise weiter helfen. Ich möchten in einem Formular Fotos (Format JPG) zu einer Maschine...
  7. OLE Bilder im Formular

    in Microsoft Access Hilfe
    OLE Bilder im Formular: Hallo zusammen, ich nutze Access2007 unter Win7 und habe folgendes Problem. Ich habe in einer Tabelle ein Feld als OLE-Objekt generiert. Dieses ist in einem Formular ein gebunden mit einer...
  8. OLE-Objekt formatieren VBA

    in Microsoft Word Hilfe
    OLE-Objekt formatieren VBA: Hallo, ich habe eine PDF in ein Word Dokument eingefügt. Dies geschieht mit folgenden Code: Selection.GoTo what:=wdGoToBookmark, Name:="Konformität" Selection.InlineShapes.AddOLEObject...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden