none
Dateien in DBs einlesen, Access 2010

    Frage

  • Hallo,

    In einer Tabelle ist eine Spalte Dokument als Ole-Objekt festgelegt. In diese sollen PDFs eingelesen werden, BASE64 codiert.

    Aus VBA heraus kommt mit

    update DOK_MED set Dokument = "JVBERi0xL...CjcxNzMyCiUlRU9GCg==", Erlaeuterung = "Das Dokument enth\a25lt die am 03.04.2008 und 30.04.2012 im Bundesanzeiger ver\o25ffentlichten Beschl\u25sse des Gemeinsamen Bundesausschusses. Die Einzeldokumente wurden der Website des Gemeinsamen Bundesausschusses entnommen.", Stand = "30.04.2012" WHERE Key_DOK = "19";

    wobei ... für etwa 90.000 Zeichen steht (die bisher in der Testphase nicht decodiert wurden, es können aber auch weitaus mehr Zeichen sein),

    immer der Fehler 3035: Nicht genügend Systemressourcen.

    Versuche ich, den vollständigen SQL-String direkt in eine Abfrage in Access einzufügen, kommt die Meldung: Der Text ist zu lang, um bearbeitet werden zu können.

    Wie geht man mit solchen Daten richtig um, hab dazu noch nichts konstruktives im Netz finden können?

    Gruß Tom

    Donnerstag, 3. Dezember 2015 15:58

Antworten

  • Hallo,

    hier ein Beispiel, wie ich das vor einer Zeit mal gelöst habe.

    Dim s As New ADODB.Stream
    
    s.Type = adTypeBinary
    s.Open
    s.LoadFromFile (pFile)
    
    ' Open recordset rs
    ...
    
    ' Add new record 
    rs.AddNew
    
    ' read blob from stream and put it into column OBJECT
    rs.Fields("OBJECT").Value = s.Read
    
    ' fill other fields as needed
    ...
    
    ' Save
    rs.Update
    

    Gruß
    Dirk

    • Als Antwort vorgeschlagen Olaf HelperMVP Freitag, 4. Dezember 2015 07:34
    • Als Antwort markiert tom krist Freitag, 4. Dezember 2015 08:55
    Freitag, 4. Dezember 2015 07:14
  • Hallo Tom,

    bei BLOB Daten sollte man nie mit Plain SQL Arbeiten, die max Zeichengröße ist schnell erreicht, zudem ist es sehr Inperformant.

    Statt dessen solltest Du mit Stream Object (ADO) arbeiten, siehe auch Stream Object Properties, Methods, and Events


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert tom krist Freitag, 4. Dezember 2015 06:05
    Donnerstag, 3. Dezember 2015 16:17

Alle Antworten

  • Hallo Tom,

    bei BLOB Daten sollte man nie mit Plain SQL Arbeiten, die max Zeichengröße ist schnell erreicht, zudem ist es sehr Inperformant.

    Statt dessen solltest Du mit Stream Object (ADO) arbeiten, siehe auch Stream Object Properties, Methods, and Events


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert tom krist Freitag, 4. Dezember 2015 06:05
    Donnerstag, 3. Dezember 2015 16:17
  • Moin Olaf,

    danke erstmal, zwei kurze Nachfragen:

    Wo liegt denn die max. Zeichengröße?

    Erfolgt die Einbindung der Daten über das Stream Objekt etwa so:

    update DOK_MED set Dokument = " & StreamObj1.Text & ", ... ;

    hab leider kein Bsp. gefunden.

    Gruß Tom

    Freitag, 4. Dezember 2015 06:09
  • Hallo,

    hier ein Beispiel, wie ich das vor einer Zeit mal gelöst habe.

    Dim s As New ADODB.Stream
    
    s.Type = adTypeBinary
    s.Open
    s.LoadFromFile (pFile)
    
    ' Open recordset rs
    ...
    
    ' Add new record 
    rs.AddNew
    
    ' read blob from stream and put it into column OBJECT
    rs.Fields("OBJECT").Value = s.Read
    
    ' fill other fields as needed
    ...
    
    ' Save
    rs.Update
    

    Gruß
    Dirk

    • Als Antwort vorgeschlagen Olaf HelperMVP Freitag, 4. Dezember 2015 07:34
    • Als Antwort markiert tom krist Freitag, 4. Dezember 2015 08:55
    Freitag, 4. Dezember 2015 07:14
  • Danke Dirk,

    klappt

    Gruß Tom

    Freitag, 4. Dezember 2015 11:53