Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bild im Blob Feld abspeichern (https://www.delphipraxis.net/122087-bild-im-blob-feld-abspeichern.html)

Moony 9. Okt 2008 09:17

Datenbank: DB2 • Zugriff über: TADOConnection

Bild im Blob Feld abspeichern
 
Hallo zusammen,

ich habe ein bestehendes Programm welches unterschiedliche Anbindungen zu unterschiedlichen Datenbanken ermöglicht. Nun habe ich eine DB2 Anbindung. Das läuft soweit ganz gut.

Mein Problem ist, ich kann zwar Bilder aus der Datenbank lesen und als File auf der Festplatte abspeichern, aber ich kann keine Bilder von der Festplatte in die Blobfelder schreiben.

Das Schreiben erfolgt folgendermaßen:

vorher mache ich eine SQL Anweisung auf einen bestimmten Datensatz. Wenn der Recordcount dann 0 ist, wird ein Append + Edit ausgeführt, ansonsten der folgende Code:
Delphi-Quellcode:
var BF : TBlobField
    F : String;
begin
  ...
  my.Table.Edit;
  BF := mytable.FieldByName(myField) As TBlobField;

  if FileExists(F) then // Datei wird vorher geholt und abgefragt
  begin
    BF.LoadFromFile(F);

    try
      mytable.Post;
    except
      Showmessage('Error while saving blob!');
    end;
  end
  else begin
    myTable.Cancel;
    Showmessage('File not found: ' + F);
  end;
So, das ist es im groben. Die Datenbank kommt weder mit einem Fehler noch mit was anderem zurück. Aber das Bild wird nicht dort gespeichert. Die geladene Blobgröße ist auf jeden Fall richtig und das Bild existiert auch in dem Verzeichnis.

Hoffe mir kann da jemand weiterhelfen.

Gruß, Moony

DeddyH 9. Okt 2008 09:30

Re: Bild im Blob Feld abspeichern
 
Lies Dir das hier mal durch: Streaming Bitmaps and other Binary Data to BLOB Fields

Moony 9. Okt 2008 10:24

Re: Bild im Blob Feld abspeichern
 
Danke, habe ich mir durchgelesen, aber o ganz konnte mich das nicht weiterbringen. Habe das jetzt folgendermaßen gemacht, aber immer noch das gleiche Ergebnis:

Delphi-Quellcode:
...
FS := TMemoryStream.Create;
try
  FS.LoadFromFile(F);
  _BF := mytable.FieldByName(myField); // _BF : TField
  BS := mytable.CreateBlobStream(_BF, bmWrite);
  FS.SaveToStream(BS);
finally
  FS.Free;
end;

DeddyH 9. Okt 2008 10:31

Re: Bild im Blob Feld abspeichern
 
Mit DB2 kenn ich mich leider nicht aus. Anderer Link: http://entwickler-forum.de/showthread.php?p=161848. Hier wird statt Push(Src.Write) Pull(Dest.CopyFrom) benutzt, vielleicht hilft das ja.

Moony 9. Okt 2008 11:00

Re: Bild im Blob Feld abspeichern
 
Also irgendwie fruchtet das alles nicht..... :wall:

Moony 9. Okt 2008 12:26

Re: Bild im Blob Feld abspeichern
 
Habe das jetzt folgendermaßen geschafft das Bild dort einzuspeichern:

Delphi-Quellcode:
MS := TMemoryStream.Create;
try
  MS.LoadFromFile(F);
  mytable.SQL.Clear;
  mytable.SQL.Add('UPDATE ' + TableName + ' SET ' + PhotoField + ' = ');
  mytable.SQL.Add('(:' + PhotoField + ')');
  mytable.SQL.Add(' WHERE ' + IndexField + ' = ''' + IndexValue + '''');
  mytable.Parameters.ParamByName(PhotoField).LoadFromStream(MS, ftBlob);
  try
    mytable.ExecSQL;
  except
    MessageDlg(SysErrorMessage(GetLastError()), mtError, [mbOK], 0);
  end;
finally
  MS.Free;
end;
Gruß, und danke für die Denkanstöße.

Moony

Moony 21. Okt 2008 10:50

Re: Bild im Blob Feld abspeichern
 
Hallo zusammen, mein letzter Beitrag hier besagt, dass die aufgelistete Routine funktioniert, das hat sie auch. Aber warum auch immer geht das jetzt nicht mehr. Beim Ausführen des SQL Befehls tritt eine Exception auf.

Kann mir da jemand dringend weiterhelfen?????

Danke & Gruß, Moony


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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