AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi MySQL Blob als longblob Bild speichern und auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Blob als longblob Bild speichern und auslesen

Ein Thema von hirsch · begonnen am 12. Apr 2010 · letzter Beitrag vom 16. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#1

MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 11:33
In einer Bilderdatenbank sollen Bilder als jpg gepeichert werden und wieder ausgelesen werden. Irgendwie habe ich das Gefühl, dass in der Datenbankspalte 'BlobBild' irgendetwas steht nur nicht das Bild.
[code=delphi]
Code:
procedure TAnzeige.FileListBox1Click(Sender: TObject);
begin
  Datei:=FileListBox1.FileName;
  Image1.Picture.LoadFromFile(FileListBox1.FileName); //<-das soll, wenn ich weiss wie es geht auf die Zelle der DB zeigen
  LblAnz.Caption:='Bild: ';
end;
gespeichert soll werden:
[code=delphi]
Code:
procedure TAnzeige.BuHinzuClick(Sender: TObject);
var Bild : TGraphic;
begin
  IDBild:=0;
  //HoleDatei;
  with Datamodule1.cds1 do begin
    last;
    IDBild:=FieldByname('ID').AsInteger;
    edit;
    append;
    FieldByName('ID').AsInteger:=IDBild+1;
    fieldbyName('Datei').AsString:=Datei;
    fieldbyname('BlobBild').AsVariant:=Bild; //<-das will er so nicht, asPicture oder so gibts nicht.
    Applyupdates(-1);
    Image1.Picture.LoadFromFile(Datamodule1.cds1.FieldByName('BlobBild').Value);
    LblAnz.Caption:='Bild: '+Datamodule1.cds1.FieldByName('Datei').AsString;
  end;
end;
Bis her war ich der Meinung dass man in Blob-Felder binäre Daten schreiben und lesen kann, oder irre ich mich da?
Danke für Antworten.
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#2

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 11:43
Du wirst einen kleinen Umweg über Streams gehen müssen. In den meisten Zugriffsbibliotheken gibt es einen TBLOBStream, schau doch mal, ob das bei Dir auch so ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#3

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 12:39
Aha, über Stream?
Wie geht das?
Also nur nochmal zur Erklärung:
Ich will den Inhalt eines Blobfeldes in 'Bild' speichern.
Später möchte ich 'Bild' wieder in das Blobfeld speichern.

Hab noch nie was mit Stream gemacht.
Ich suche mal in den Tutos, vielleicht finde ich ja was.....
Danke erstmal.
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 13:17
Das Stichwort wurde schon genannt: Hier im Forum suchenTBLOBStream

Dort gibt es für jeden Zugriffsweg (BDE/ADO/native/dbExpress) Beispielcode der Verwendung.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#5

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 14:41
Vielen Dank
Welches USES fehlt mir noch?
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, StdCtrls, ExtCtrls, DBCtrls, DB, Grids, DBGrids, ToolWin, ComCtrls,
  ExtDlgs, FileCtrl, Menus, Mask;
weil bei
Delphi-Quellcode:
procedure TAnzeige.BuHinzuClick(Sender: TObject);
var Bild : TGraphic;
    BS: TBlobStream; //<--Ärger

begin
will er TBlobstream nicht wissen. Ich arbeite mit den dbExpress-Geschichten...
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#6

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 14:46
Versuch es mit DBTables.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#7

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 15:45
Danke DeddyH. das klappt soweit.
Nun bekomme ich immer, nachdem ich gesucht habe, immer den Fehler"Ungültige Typenumwandlung".
Der Code sieht so aus:
Delphi-Quellcode:
procedure TAnzeige.BuHinzuClick(Sender: TObject);
var Bild : TPicture;
    BS: TBlobStream;
    jpg: TJPEGImage;
begin
  IDBild:=0;
  //HoleDatei;
  try
  BS := TBlobstream.create(Datamodule1.cds1.FieldByName( 'BlobBild' )AS TBlobField, bmWrite ); //<-Genau immer Hier
    with Datamodule1.cds1 do begin
      last;
      IDBild:=FieldByname('ID').AsInteger;
      edit;
      append;
      FieldByName('ID').AsInteger:=IDBild+1;
      fieldbyName('Datei').AsString:=Datei;
      Applyupdates(-1);
    end;
    jpg := TJPEGImage.Create;
    jpg.LoadFromStream(bs);
    Image1.Picture.Assign(jpg);
    LblAnz.Caption:='Bild: '+Datamodule1.cds1.FieldByName('Datei').AsString;
  finally
    BS.free;
  end;
end;
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#8

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 16:11
Ich würde es mit der Hier im Forum suchenCreateBlobStream-Methode von TDataset versuchen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bebe

Registriert seit: 3. Apr 2005
Ort: Berlin
104 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 12. Apr 2010, 16:46
Hallo,

Bild in DB speichern geht so.

Delphi-Quellcode:
procedure TfrmAddImages.btnSaveImagesToDBClick(Sender: TObject);
var
  fstream: TMemoryStream;
begin
  fstream := TMemoryStream.Create;
  tblImage.Append;
  fstream.LoadFromFile('C:\Test.png');
  fstream.Position := 0;
  tblImagepng32.LoadFromStream(fstream);
  tblImage.Post;
  fstream.Free;
end;
// (Inhalte gekürzt, ich hoffe ich habe nicht zuviel gelöscht.)
Das Feld tblImagepng32 ist vom Typ TBlobField

Der Ladevorgang ist ebenso einfach, du mußt es nur umstellen. Nie das fstream.Position := 0 vergessen, eine häufige Fehlerquelle. Damit wird nur die Position innerhalb des Stream zurückgesetzt, die nach dem Befehl fstream.LoadFromFile('C:\Test.png') auf der letzten steht. Denn bei tblImagepng32.LoadFromStream(fstream); willst du ja den gesamten Stream lesen.

Ich hoffe ich konnte dir helfen.

Gruß
Matze
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#10

Re: MySQL Blob als longblob Bild speichern und auslesen

  Alt 13. Apr 2010, 15:45
Ok, Danke Bebe,
das funktioniert. Hab dann eine SQL-Datensicherung gemacht und mir angeguckt, was in dem BLOB steht, und es ist wirklich das Bild.

Ach ja ich sollte noch erwähnen, dass in der Tabelle nur jpg vorkommen können.
Nun habe ich angefangen das BlobFeld auszulesen und in ein TImage anzuzeigen. und da bekomme ich immer den Fehler JPEG #41. Dann habe ich hier gesucht und nix gefunden, nur das habe ich gefunden, was ich eh schon gemacht habe.
Delphi-Quellcode:
var sql : String;
    BS : TClientBlobStream;
    blobF : TBlobField;
    MS : TMemorystream;
    jpg : TJPEGImage;
...//.. Schnipp
      //Bild anzeigen
      bS.Position:=(JpegStartsInBlob(Datamodule1.cds1.FieldByName('Blobbild') as TBlobField));
      Try
        bS.Seek(JpegStartsInBlob(Datamodule1.cds1.FieldByName('Blobbild') as TBlobField), soFromBeginning);
        MS := TMemoryStream.Create;
        MS.CopyFrom(BS, BS.Size);
        MS.Position := BS.Position;
        jpg:=TJPEGImage.Create;
        //JPEGtoBMP(bs);
        jpg.LoadFromStream(bs);
        Image1.Picture.Graphic:=jpg; //habe das probiert
        Image1.Picture.Graphic.LoadFromStream(ms); //und das auch, und habe beides probiert.
      Finally
         ms.Free;
      End;
Das sind so die Ergebnisse die ich bei der Suche gefunden habe.
Was mache ich hier falsch?
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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