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:
nicht funktionierte, habe ich folgende Lösung gefunden:
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;
Delphi-Quellcode:
Zum wieder einlesen des Blob funktioniert folgender Code:
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;
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; |
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. |
AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
Zitat:
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. |
AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
Zitat:
|
AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
Zitat:
|
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:
was mach ich hier falsch?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 |
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 |
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. |
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.
|
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:
probiert, leider ebenfalls nur 3KB
ms.CopyFrom(ts,0);
|
AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
Das würde ja bedeuten, dass ts.Size ebenfalls nur 3 KB beträgt. Hast Du das mal überprüft? Wenn dem so sein sollte, klappt das Auslesen ja schon nicht richtig.
|
AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
... ich habs jetzt mal überprüft :D
also ts.size beträgt 2565, genau so, wie ms.size |
AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
Dann liegt das Problem wohl beim Auslesen oder gar schon beim Speichern. Da kann ich leider im Moment nicht weiterhelfen.
|
AW: PDF-Datei (BLOB) in eine MySql-Tabelle speichern und lesen (Delphi 2010)
also beim speichern kann ich mir eigentlich nicht vorstellen, da es, wie gesagt über die zwischenablage ja ähnlich klappt.
so richtig viel bleibt da aber auch nicht mehr übrig :( trotzdem danke. ich werds wohl erstmal mit nem anderen pdf versuchen und dann mal schauen, wie ich das machen kann ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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