Announcement

Collapse
No announcement yet.

Bild in Access 2000 Datenbank speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bild in Access 2000 Datenbank speichern

    Hallo

    Ich habe in meiner Datenbank ein Datenfeld vom Typ OLE-Objekt. In diesem Feld möchte ich nun ein Bitmap speichern. Ich habe mal rumprobiert und habe folgendes versucht.

    Ich habe eine TADOTable mit meiner Datenbank verknüpft, das Datenfeld auf den Typ ftGraphic gesetzt und diesen Code dazu geschrieben:
    AdoTable1.Append();
    AdoTable1Bild.LoadFromFile('C\Test.bmp');
    AdoTable1.Post();

    So damit fügt er mir einen neuen Datensatz hinzu, aber wenn ich das gespeicherte Bild testweise in Access anzeigen will, dann meldet er mir, dass das Bitmap ungültig sei.

    Außerdem habe ich auch noch Schwierigkeiten ein Bild, welches ich mit Access eingefügt habe, wieder anzuzeigen. Ich habe es bereits mit diesem Beispiel versucht:
    <a href="/webx?50@@.ee8a010">Jens Schumann "Access und Blobfelder" 23.01.2002 19:52</a>
    aber ich bekomme trotzdem immer die Meldung, das Bitmap sei ungültig.

    MfG
    Silver

  • #2
    Hallo,

    &gt;..testweise in Access anzeigen will, dann meldet er mir, dass das Bitmap ungültig sei.

    bei einem Datenfeld vom Typ OLE-Objekt erwartet ACCESS einen gültigen OLE-Header, so dass die über Delphi eingefügten BLOb-Daten nicht mit dem Programm Microsoft ACCESS angezeigt werden können. Allerdings gilt dies auch für die Gegenrichtigung - ein Delphi-Programm kann nur dann die Grafikdaten sinnvoll anzeigen, wenn die ersten 78 Bytes des OLE-Headers beim Auslesen der BLOb-Daten aus dem Bytestream entfernt werden. Dies könnte zum Beispiel so aussehen:
    <pre>
    procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet);
    var
    aBitmap : TBitmap;
    aBS : TADOBlobStream;
    begin
    if not (ADODataSet1.State in [dsBrowse]) then
    Exit;
    aBS := TADOBlobStream.Create(ADODataSet1Photo, bmRead);
    try
    aBS.Seek(78, soFromBeginning);
    aBitmap := TBitmap.Create;
    try
    aBitmap.LoadFromStream(aBS);
    DBImage1.Picture.Graphic := aBitmap;
    finally
    aBitmap.Free;
    end
    finally
    aBS.Free;
    end;
    end;
    </pre>
    Der Hack bietet selbstverständlich keine Gewähr, dass er mit jeder MDAC- und ACCESS-Version funktioniert

    Comment

    Working...
    X