Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Bild in bytea über MS Access

  1. #11
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Frage

    Es ist schon komisch, dass man binäre Daten (in Form eines Array) nicht direkt in batea mit AppendChunk schreiben kann. Dafür ist es doch schließlich da (heißt doch Byte-Array - oder nicht?). In MySQL geht das problemlos.

  2. #12
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Das Problem ist nicht PostgreSQL sondern die Programmiersprache. In C und C++ (und darin wird der ODBC Treiber wohl geschrieben sein) ist das Null-Byte (\000) ein Trenner für Strings. Enthält eine Anfrage so ein Byte, muss es speziell behandelt werden.

    MySQL kennt mysql_query() (das kann nicht mit Null-Bytes umgehen) und mysql_real_query() (das kann mit Null-Bytes umgehen, weil die Länge der gesamten Anfrage als Parameter übergeben wird). Je nachdem, welche Funktion verwendet wird, funktioniert das also.

    PostgreSQL kennt auch verschiedene Funktionen zum Absenden der Anfragen. PQexec() z. B. bekommt wie mysql_query() einfach nur die Anfrage, wenn da drin ein Null-Byte vorkommt ist das quasi das Ende-Zeichen - nur ist die Anfrage dann natürlich unvollständig. Elegant umgeht man dieses Problem mit PQexecParams() und gibt die Parameter einzeln samt ihrer Länge an.

    Wenn der ODBC-Treiber damit nicht umgehen kann ist das natürlich unschön - die Datenbank kann es. Bedingt durch die zugrunde liegende Programmiersprache sind jedoch einige Umwege notwendig, die vielleicht nicht jeder eingehen will.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #13
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Lächeln

    Vielen dank für die Mühe! Ich werde die Lösung mit Base64 jetzt erst mal so lassen, da mir das Andere wirklich zu aufwendig ist.

    LG Sylvio

  4. #14
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Lächeln Doch geschafft und sogar besser als gedacht

    Jetzt gehts, auch ohne vorherige Verschlüsselung. Es lag doch am ODBC-Treiber! In den DSN gibt es eine Einstellung die heiß 'bytea in LO'. die muss eingeschaltete werden. Im Connectionstring muss 'ByteaAsLongVarBinary=1;' angehängt werden. Dann klappts zwar immer noch nicht mit AppendChunk und GetChunk (weder mit DAO noch mit ADO) aber ADO kennt ein Streaming-Object das super Dienste leistet:

    zum schreiben:
    Code:
          
                    Dim oStream As New ADODB.Stream
                    oStream.type = adTypeBinary
                    oStream.Open
                    oStream.LoadFromFile strFileName
                    rs!Pic = oStream.Read
                    rs.Update
                    oStream.Close
    zum lesen:
    Code:
          
                    Dim oStream As New ADODB.Stream
                    oStream.type = adTypeBinary
                    oStream.Open
                    oStream.Write rs!Pic
                    oStream.SaveToFile strFileName
                    oStream.Close
    So klappt in VB und in Access. Vielen Dank an alle Helfer.

    LG Sylvio

  5. #15
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Reden Doch noch besserer Lösung gefunden

    Ich habe doch noch eine schönere Lösung mittels 'ADODB.Stream' gefunden. Vorrausetzung ist allerdings, dass man im ODBC-Treiber von PostGre die Option 'bytea to LO' setzt oder den Connectionstring mit 'Trusted_Connection=yes;' erweitert. Mit 'AppendChunk' ist trotzdem nicht viel zu machen. Hier der Code um ein Bild oder irgend eine Datei in die Datenbank (Feldtyp bytea) zu bekommen:

    Code:
    Dim oStream As New ADODB.Stream
    ...
        With RS
                .Filter = "ID=" & lngID
                'Binär speichern
                oStream.type = adTypeBinary
                oStream.Open
                oStream.LoadFromFile strPixFile
                !Pic = oStream.Read
                .Update
                oStream.Close
            End If
            .Close
            Set RS = Nothing
        End With
    ...
    So holt man die Daten wieder aus und schreibt sie als Datei weg:

    Code:
    Dim oStream As New ADODB.Stream
    ...
        With RS
            If .RecordCount > 0 Then
                    'binäre Feld in Datei File schreiben
                    oStream.type = adTypeBinary
                    oStream.Open
                    oStream.Write !Pic
                    oStream.SaveToFile strFileName
                    oStream.Close
                End If
            End If
            .Close
            Set RS = Nothing
        End With
    ...
    LG Sylvio

  6. #16
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Zitat Zitat von melodoi Beitrag anzeigen
    von PostGre
    Bitte, bitte, der Name ist "PostgreSQL", alternativ "Postgres".

    Postgre vs PostgreSQL vs Postgres
    PostgreSQL: Frequently Asked Questions (FAQ) for PostgreSQL
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Problem bytea: Cacheproblem(?)
    Von Hannes23 im Forum Programmierung
    Antworten: 9
    Letzter Beitrag: 02.11.2011, 10:28
  2. Antworten: 0
    Letzter Beitrag: 24.11.2010, 07:10
  3. Auf PostgreeSQL über Access zugreifen
    Von bnagus im Forum externe Schnittstellen
    Antworten: 13
    Letzter Beitrag: 18.01.2010, 19:27
  4. max size bytea
    Von acki4711 im Forum Allgemeines
    Antworten: 1
    Letzter Beitrag: 25.04.2008, 08:05
  5. Bild-Datenbank
    Von benwen im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 06.07.2007, 08:35

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum