Einzelnen Beitrag anzeigen

Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#1

Bild in Datenbank speichern - Problem

  Alt 17. Apr 2012, 08:41
Datenbank: MySQL • Version: 5.0.27 • Zugriff über: DevartDBExpress
Hi,

erstmal die Daten vorweg:

Datenbank: MySQL
Version: 5.0.27
BLOB-Feld: MEDIUMBLOB

Noch eine kleine Info: Ich habe viele Foren durchstöbert und unterschiedliche Wege ausprobiert. Allerdings schaffe ich es nicht, ein Bild in dem BLOB-Feld zu speichern... und genau das ist jetzt mein Problem.

Folgender Code für das Anzeigen von Bildern funktioniert wunderbar (stammt aber von einem Kollegen)...

Delphi-Quellcode:
function TDatabaseConnection.GetImage(query, AField: String;
  var Image: TJpegImage): boolean;
var
  s: TMemoryStream;
begin;
  OpenQuery(query); // query := 'SELECT bild FROM foto WHERE id = 123'
  s := TMemoryStream.Create;
  try
    try
      TBlobField(SQLQuery.FieldByName(AField)).SaveToStream(s); // SQLQuery ist vom Typ TSQLQuery
      s.Position := 0;
      if s.Size > 0 then
      begin
        Image.LoadFromStream(s);
      end;
    except
      on E: Exception do
        ShowMessage('Fehler');
    end;
  finally
    begin
      s.Free;
      FreeAndNil(SQLQuery);
    end;
  end;
end;

Der folgende Code funktioniert nicht! Ich habe selber mal ein bisschen rumprobiert, habe aber ehrlich gesagt auch keine Ahnung wie das wirklich funktioniert oder funktionieren sollte. Forenbeiträge hab ich aber massig gelesen und viel ausprobiert... leider erfolglos.

Speichern von Bildern:
Delphi-Quellcode:
function TDatabaseConnection.SetImage(query, AField: String;): boolean;
var
  s: TMemoryStream;
begin;
  s := TMemoryStream.Create;
  try
    try
      s.LoadFromFile('*BILDPFAD*\*BILDNAME*.jpg');
      s.Position := 0;
      if s.Size > 0 then
      begin
        SQLQuery.Append;
        // Auch mit SQLQuery.Edit noch getestet
        TBlobField(SQLQuery.FieldByName(AField)).LoadFromStream(s);
        SQLQuery.Post;
      end;
    except
      on E: Exception do
        ShowMessage('Fehler');
    end;
  finally
    begin
      s.Free;
      FreeAndNil(SQLQuery);
    end;
  end;
end;
Könnt Ihr mir vielleicht sagen wie ich das umschreiben muss, damit der Code funktioniert? Ich steh momentan absolut auf dem Schlauch und weiß nicht weiter.

Bin für jeden sinnvollen Beitrag dankbar!

Geändert von Root2k (17. Apr 2012 um 09:08 Uhr)
  Mit Zitat antworten Zitat