Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Blob direkt in File schreiben (https://www.delphipraxis.net/30220-blob-direkt-file-schreiben.html)

day 22. Sep 2004 08:23


Blob direkt in File schreiben
 
Hallo

Wie kann ich ein BLOB datenfeld direkt in eine Datei schreiben? Alternativ lösung wäre das ganze zuerst in einen OLEContainer zu laden und von dort aus zu speichern.

Code:
procedure TForm1.Button5Click(Sender: TObject);
var S: TStream;
begin

  S:=TMemoryStream.create;
  try
    S:=Table1.CreateBlobStream(Table1.FieldByName('TEXTMODULE'), bmRead);
    OleContainer1.LoadFromStream(S);
  finally
    S.Free
  end;
end;

Sharky 22. Sep 2004 08:30

Re: Blob direkt in File schreiben
 
Hai day,

kannst du nicht einfach s.SaveToFile () benutzen?

day 22. Sep 2004 08:48

Re: Blob direkt in File schreiben
 
Hallo

so gehts
S:=TFileStream.create('test.doc',fmCreate);

Sharky 22. Sep 2004 08:52

Re: Blob direkt in File schreiben
 
Zitat:

Zitat von day
... Aber leider wird diese Funktion bei TStream nicht angeboten.

Und was ist wenn Du S gleich als TMemoryStream definierst?
Delphi-Quellcode:
var S: TMemoryStream;
begin
  S := TMemoryStream.create;
  try
    S := Table1.CreateBlobStream(Table1.FieldByName('TEXTMODULE'), bmRead);
    S.SaveToFile ();
  finally
    S.Free;
  end;
end;

day 22. Sep 2004 08:59

Re: Blob direkt in File schreiben
 
Hallo

Dachte ich eben auch aber CreateBlobStream gibt einen TStream zurück (vielleicht mit casten).
Aber wenn ich ein FileStream erzeuge dann schreibt der direkt in die Datei (Was ja eigentlich logisch ist :gruebel: )

Wenn ich den FileStream mit Free wieder freigebe, wird die Datei dann automatisch auch wieder freigegeben?
Ich möchte nämlich das file wieder überschreiben. Habe aber jetzt das problem, dass ich eine Exception bekomme (Cannot open file text.doc) wenn ich versuche ein zweites mal die Datei zu erzeugen

Sharky 22. Sep 2004 09:07

Re: Blob direkt in File schreiben
 
Dann wirst Du mit 2 Streams arbeiten müssen:
Ungetestet:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  S: TStream;
  S2 : TMemoryStream;

begin
  S := TStream.create;
  S2 := TMemoryStream.Create;
  try
    S := Table1.CreateBlobStream(Table1.FieldByName('TEXTMODULE'), bmRead);
    S.Position := 0;
    S2.CopyFrom(S,0);
    S2.SaveToFile();
  finally
    S.Free;
    S2.Free;
  end;
end;

day 22. Sep 2004 09:18

Re: Blob direkt in File schreiben
 
Zitat:

Dann wirst Du mit 2 Streams arbeiten müssen:
Wie meinst du das? Also folgender massen geht es.
Aber das Problem ist jetzt noch, dass ich das file nicht mehr überschreiben kann. Falls ich es erneut ausgeben möchte.


Code:
procedure TForm1.Button5Click(Sender: TObject);
var S: TStream;
begin

  S:=TFileStream.create('test.doc',fmOpenWrite);
  try

    S:=Table1.CreateBlobStream(Table1.FieldByName('TEXTMODULE'), bmRead);
 
  finally
    S.Free
  end;
end;


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