Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010) (https://www.delphipraxis.net/155370-pdf-datei-blob-eine-mysql-tabelle-speichern-und-lesen-delphi-2010-a.html)

Jürgen Paulus 20. Okt 2010 15:31

Datenbank: MySql • Version: 4.1.22 • Zugriff über: DBEXPRESS

PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
Da bei mir der folgende Code

Delphi-Quellcode:
SQLDataSet1.CommandText := sql;
SQLDataSet1.Active     := true;
ClientDataSet1.Active  := true;
Blob := ClientDataSet1.FieldByName ('f03') AS TBlobField;
ClientDataSet1.Edit;
Blob.LoadFromStream (str_PDF);
ClientDataSet1.FieldByName ('f04').AsInteger := 100;
ClientDataSet1.Post;
ClientDataSet1.Active  := false;
SQLDataSet1.Active     := false;
nicht funktionierte, habe ich folgende Lösung gefunden:

Delphi-Quellcode:
sql := 'insert into t01_r03' +#32
      +'set f01=' +ID +',' +#32
          +'f03=:f03';

sql_t01r03.Params.ParamByName('f03').LoadFromStream(str_PDF, ftBlob);

if sql_t01r03.Sql.Count = 0 then
  sql_t01r03.SQL.Add (sql)
else
  sql_t01r03.Sql[0] := sql;

sql_t01r03.ExecSQL;
Zum wieder einlesen des Blob funktioniert folgender Code:
Delphi-Quellcode:
sql := 'select * from t01_r03' +#32
       +'where f01=' +ID;

sql_query.Sql.Clear;
sql_query.SQL.Add (sql);
sql_query.Open;

Stream := sql_query.CreateBlobStream (sql_query.FieldByName('f03'),bmRead);
MemoryStream.LoadFromStream (Stream);
MemoryStream.SaveToFile (ID+'.pdf');

sql_query.Close;

Bernhard Geyer 20. Okt 2010 16:21

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
Und wo ist jetzt die Frage :gruebel:


In der nicht funktionierenden Lösung ist der Typ von str_PDF unklar und wie dieser gefüllt wird.

Jürgen Paulus 20. Okt 2010 16:46

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1056760)
Und wo ist jetzt die Frage :gruebel:


In der nicht funktionierenden Lösung ist der Typ von str_PDF unklar und wie dieser gefüllt wird.

var
str_PDF : TMemoryStream;

Nicht wirklich eine Frage, habe schließlich eine Lösung gefunden, nachdem ich den ganzen Tag damit verbracht habe.
Aber ja, warum das mit dem ClientDataSet nicht funktioniert, würde mich schon interessieren.

Bernhard Geyer 20. Okt 2010 19:13

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
Zitat:

Zitat von Jürgen Paulus (Beitrag 1056768)
Aber ja, warum das mit dem ClientDataSet nicht funktioniert, würde mich schon interessieren.

AFAIK kann das Clientdataset keine Daten in einer DB speichern.

Jürgen Paulus 21. Okt 2010 08:22

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
Zitat:

AFAIK kann das Clientdataset keine Daten in einer DB speichern.
Wollte es gar nicht einfügen, nur ändern, aber das hat auch nicht funktioniert. Möglicherweise hatte ich noch "cds.ApplyUpdates(0)" http://www.tek-tips.com/faqs.cfm?fid=4722 aufrufen sollen.

Freiwilderer 3. Nov 2011 08:42

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
hi,
ich weiß, dass der Beitrag schon etwas älter ist, aber vielleicht bringts ja doch was nochmal nachzufragen.
und zwar. Ich versuche auch gerade eine PDF Aus einem VarBinary(Max) zu lesen. Habe es genau so gemacht, wie unten beschrieben, aber wenn ich die PDF dann öffnen will, sagt der Foxit Reader: format error: not a PDF or corrupted

Delphi-Quellcode:

procedure TForm.ViewPDF;
var
   ts: TStream;
   ms: TMemoryStream;
begin
   ts := TStream.Create;
   ts := dm.qQuery.CreateBlobStream(dm.qQuery.Fieldbyname('Datei'),bmRead);
   ms := TMemoryStream.Create;
   ms.LoadFromStream(ts);
   ms.SaveToFile('C:\test3.pdf');
end
was mach ich hier falsch?

DeddyH 3. Nov 2011 08:50

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
Du baust Dir Speicherlecks. Und IIRC musst Du zuerst "zurückspulen". Wie ist es so?
Delphi-Quellcode:
procedure TForm.ViewPDF;
var
   ts: TStream;
   ms: TMemoryStream;
begin
  ts := dm.qQuery.CreateBlobStream(dm.qQuery.Fieldbyname('Datei'),bmRead);
  try
    ms := TMemoryStream.Create;
    try
      ts.Position := 0;
      ms.LoadFromStream(ts);
      ms.SaveToFile('C:\test3.pdf');
    finally
      ms.Free;
    end;
  finally
    ts.Free;
  end;
end

Freiwilderer 3. Nov 2011 08:53

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
hi,
danke für die schnelle Antwort, leider bewirkt das genau das selbe.

DeddyH 3. Nov 2011 08:56

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
Wie groß ist denn die resultierende Datei? Vielleicht ist CopyFrom besser geeignet als LoadFromStream, aber das ist nur geraten.

Freiwilderer 3. Nov 2011 09:02

AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
 
naja, hätte vielleicht erwähnen können, dass sie zu klein ist ...

also ich hab diese PDF in einem VarBinary gespeichert. Es gibt eine Funktion, die auch funktioniert, die die Datei in die Zwischenablage kopiert. Da hat sie 298KB. wenn ich das über SaveToFile versuche kommen nur 3KB dabei raus.
Ich hab eben
Delphi-Quellcode:
ms.CopyFrom(ts,0);
probiert, leider ebenfalls nur 3KB


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Seite 1 von 2  1 2      

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