Access Ole-Object - Typ ermitteln

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Christoph1972.

    Access Ole-Object - Typ ermitteln

    Hallo zusammen,

    ich muss aus einer Access "Datenbank" eine Tabelle auslesen und die Daten auf einen Datenbankserver bringen. Die Tabelle enthält eine Spalte vom Typ "Ole-Objekt", in dieser befinden sich unterschiedliche Dateiformate, Word, Images, PDF usw. In der Access Datei wird angezeigt was für ein Dateiformat vorliegt. Bei einem Doppelklick wird die Datei mit dem entsprechenden Programm geöffnet.

    Nun meine Frage: Wie komme ich an das Dateiformat wenn ich die Tabelle per OleDbCommand auslese?

    Die Tabelle enthält leider keine weiteren Informationen zu dem gespeicherten Dateiformat. Mir würde es schon reichen wenn ich irgendwie den String bekommen könnte der auch in Access angezeigt wird. Bei Google konnte ich bisher nichts passendes finden.

    Hat hier jemand eine Idee wie ich das lösen könnte?

    Vielen Dank schon mal!

    LG
    Christoph
    Gruß
    Christoph
    Da bin ich noch mal, immer noch ohne Lösung für das oben erläuterte Problem. Dafür habe ich ein neues Problem zu der Thematik aufgetan. Ich habe heute festgestellt, dass der Datentyp "OLE-Object" nicht mit dem Datentyp Blob oder Varbinary/Binary vergleichbar ist. Wenn ich nun die Inhalte (byte[]) mit einem FileStream auf die Platte schreibe, kann dieser nicht geöffnet werden. Ich könnte mir vorstellen das Access Infos zu dem abgelegten File mit in dem Array speichert und es daher nicht einfach auf die Platte gestreamt werden kann.

    Ich habe die Daten mit dem "SQL-Server Import Tool" auf einen SQL-Server gebracht. Damit konnte ich dann Word-Dokumente auf die Platte streamen und auch öffnen, es gab zwar eine Fehlermeldung aber Word konnte die Datei trotzdem öffnen. Mit anderen Formaten gab es aber dennoch Probleme und sie konnten nicht geöffnet werden. Der Import Assistent scheint also teilweise zu wissen wie man mit den Daten umgehen muss.

    Bei Google habe ich bisher nichts passendes gefunden.

    Hat hier jemand eine Idee wie die Daten brauchbar machen kann?
    Gruß
    Christoph
    @Christoph1972 Probier mal mit Strict Off. Weise "das Ding" einer Variable vom Typ Object zu und mach dann

    VB.NET-Quellcode

    1. Dim xxx As Object = DIE_INSTANZ_HALT
    2. MessageBox(xxx.GetType())

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Probier mal mit Strict Off Weise das Ding einer Variable vom Typ Object zu


    Sorry, ich kann gerade nicht testen. Was soll ich dem "Ding" zuweisen, das was aus der Datenbank kommt, oder das was ich auf die Platte geschrieben habe? Was aus der DB kommt sollte System.Byte[] sein. Das was aus der DB kommt muss ja aus byte[] in ein Objekt Typ gestreamt werden, oder bin ich jetzt auf dem falschen Dampfer?
    Gruß
    Christoph

    Christoph1972 schrieb:

    Was soll ich dem "Ding" zuweisen
    Das, was Du ermitteln willst.
    Im Ernstfall alle Elemente einzeln.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Guten Morgen!

    Vielen Dank für die Unterstützung!

    Meine Vermutung das Access in dem Ole-Object zusätzliche Infos speichert und das Format damit unkompatibel wird hat sich nun bestätigt:

    yohz.com/blogs/2017/04/23/expo…s-from-ole-object-fields/

    Gibt es vielleicht mit VBA die Möglichkeit die Daten definiert auf eine Platte zu streamen? Dann könnte ich sie mir von dort automatisiert holen.
    Gruß
    Christoph
    @Christoph1972 Es gibt da einen Sack voll OLE-Typen, die Du wegen unmanaged nicht explizit instanziieren kannst.
    Ggf. gibt es aber einen Wrapper dafür, den musst Du allerdings gezielt suchen, hier im Forum eher nicht.
    Wenn Du mal das Web durchforstest, vielleicht in einem expliziten Access-Forum, da solltest Du Dich ggf. anmelden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!