Autor Beitrag
MCXSC
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 13.06.06 01:28 
Hallo!

Ersteinmal: Ich verwende "Absolute Database" und greife auf de Datenbank mit SQL zu. Jetzt will ich ein JPEG-Bild in die Datenbank speichern.

Bei den Demos zu "ADB" habe ich folgendes gefunden (Demo-Titel: "BlobsinSQL"):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure speichern;
var
MimeCoder: TStringFormat_MIME64;
S: TMemoryStream;
begin
//vorherige Eingabe der SQL-Befehle
MimeCoder := TStringFormat_MIME64.Create;
S := TMemoryStream.Create;
S.LoadFromFile(bildoeffnen.FileName);
try
sql.add('  MimeToBin('''+MimeCoder.StrTo(S.Memory, S.Size)+'''), ');
finally
MimeCoder.Free;
S.Free;
end;
//weitere Eingabe von SQL-Befehlen und Ausführung
end;


[habe ein wenig Code rausgenommen; habe nur den nötigen Code (der zum seichern des Bildes) stehen lassen]

Das Funktioniert auch prima, da Bild ist in der Datenbank - genau wie in der Demo.

Mein Problem:

Ich bekomme es nicht hin, dieses gespeicherte JPEG-Bild wieder in eine Datei/Stream umzuwandeln. In der genannten Demo wird es über die Kompo DBImage gemacht, ich will es aber über SQL machen.

Kann mir jemand helfen?

MCXSC
WASEO
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win98, Win2000, WinXP
D6 Prof, D7 Prof
BeitragVerfasst: Mi 21.06.06 10:14 
Hi!

Den Code finde ich etwas umständlich: Erst wird das Bild in das MIME-Format umgewandelt, dann von MIME in Binär und dann gespeichert. Warum nicht einfach so:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
uses JPEG;

procedure TForm1.SpeichereBild;
var
  ms: TMemoryStream;
begin
  if OpenPictureDialog1.Execute then
  begin
    ms := TMemoryStream.Create; 
    try
      ms.LoadFromFile(OpenPictureDialog1.FileName);
      with Query1 do
      begin
        with SQL do
        begin
           Clear;
           Add('Insert into TABLE1 (IMAGEFIELD1) values (:param0 )');
        end;
        ParamByName('param0').SetBlobData(ms.Memory, ms.Size);
        ExecSQL;
      end;
    finally
      ms.Free;
    end;
  end;
end;

procedure TForm1.LadeBild;
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create; 
  TBlobField(Query1.FieldByName('IMAGEFIELD1')).SaveToStream(ms);
  ms.Position := 0
  ms.SaveToFile('C:\Bild.jpg');  // Bild speichern
  Image1.Picture.LoadFromFile('C:\Bild.jpg');  // Bild zeigen
  ms.Free;
end;

_________________
Erstaunlich sind nicht die Dinge, die wir nicht kennen, sondern die wir kennen und die nicht so sind.