Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bild in Datenbank speichern und wieder auslesen (https://www.delphipraxis.net/122385-bild-datenbank-speichern-und-wieder-auslesen.html)

emsländer 15. Okt 2008 09:31

Datenbank: MS SQL • Version: 2005 • Zugriff über: ADO

Bild in Datenbank speichern und wieder auslesen
 
Salvete die Kollegen,

habe ein Problem mit Bildern, welche ich in einer SQL-Datenbank speicher.
Fehlermeldung: Im Projekt bla.. ist eine Exception der Klasse EDatabaseerror mit der Meldung 'Datenmenge weder im Editier, noch im Einfügemodus' aufgetreten.

Code:

Delphi-Quellcode:
procedure bildzufuegen(nummer : string);
  var _query : TADOQuery;
    Blobfield : TField;
    BS : Tstream;
begin
  _query := Tadoquery.Create(nil);
  with _query do begin
    connection := FrmMain.ADOConnMUS;
    try
      _query.sql.Text := 'select * from musmanager_user where lfdnr='+nummer;
      _query.open;
      if eof then begin
         showmessage('Keine Daten vorhanden'+#10#13+'Sollte eigentlich hier nicht vorkommen!');
      end else begin
        with frmmain do begin
          edit;
          blobfield := fieldbyname('Bild');
          try
          BS := CreateBlobStream(BlobField,bmWrite);
          Frmmain.userimage.Picture.Bitmap.SaveToStream(BS);
          post;
          finally
            freeandnil(BS); => hier kommt die Fehlermeldung
          end;
        end;
      end;
    finally
      freeandnil(_query);
    end;
  end;
end;
Die gleiche Meldung kommt, wenn ich das Image wieder einlesen möchte:
Delphi-Quellcode:
procedure set_pic(usernr : string);
  var _stmp : string;
  _query : Tadoquery;
   BS : TStream;
   Blobfield : TField;

begin
  _stmp := 'select * from musmanager_user where lfdnr ='+usernr;
  _query := Tadoquery.Create(nil);
  with _query do begin
    connection := FrmMain.ADOConnMUS;
    try
      _query.sql.Text := _stmp;
      _query.open;
      if (not eof) then begin
        try
          Blobfield := FieldbyName('Bild');
          if blobfield <> NIL then begin
            BS := CreateBlobStream(BlobField,bmReadWrite); => hier kommt die Fehlermeldung
            FrmMain.userimage.picture.bitmap.loadfromstream(BS);
          end;
        finally
          freeandnil(stream);
        end;
      end;
      _query.close;
    finally
      freeandnil(_query);
    end;
  end;
end;
Wer hat eine Idee?

Gruss

EL

peschai 15. Okt 2008 11:03

Re: Bild in Datenbank speichern und wieder auslesen
 
Hallo

Auf die schnelle fällt mir folgendes auf
1.) bei deiner Zeile mit "Edit;" bzw. "Post" fehlt der Bezug zum dataset "_Query1.edit;" (Evt.verdecktz durch deinen internen "With"
2.) Query eigentlich für abfrage. Beim schreiben verwendi ich immer TADoTable
3.) ich meide "with do begin" und verwende immer den lngen absolut namen ...

nahpets 15. Okt 2008 11:13

Re: Bild in Datenbank speichern und wieder auslesen
 
Hallo,

nur 'ne Vermutung:

macht der eventuell schon ein implizites Post?

Delphi-Quellcode:
BS := CreateBlobStream(BlobField,bmWrite);
Mal im Debugger die property State der Query befragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz