Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen? (https://www.delphipraxis.net/161498-pdf-dokument-aus-blob-feld-einem-programfenster-anzeigen.html)

ickehausen 6. Jul 2011 11:47

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX

PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Hallo,

ich würde gern ein PDF-Dokument in ein BLOB-Feld in der Datenbank einlesen und anschließend in einem Programmfenster wieder anzeigen können. Jetzt meine Fragen:

Ist das irgendwie machbar (keine Kaufkomponenten da es sich um ein gemeinnütziges Projekt handelt.) und leidet evtl. darunter die Performanz, da sich die DB doch stark aufbläht.
Das PDF-Dokument separat abspeichern hat halt den Nachteil, dass bei einer Sicherung wieder mehr Fehlerquellen vorhanden sind.

Gruß
Frank

mkinzler 6. Jul 2011 11:52

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Datei in Temp-Ordner auslagern und dann Aufrufen

ickehausen 6. Jul 2011 13:29

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Hallo Markus,

danke für die schnelle Antwort. Mit JPG-Dateien funktioniert es, aber bei PDF-Dateien erhalte ich beim temporären Zwischenspeichern eine Datei, die der Reader nicht mehr lesen kann.
Und die Frage nach der Performanz, weißt Du da eine Antwort drauf?

Gruß
Frank

mkinzler 6. Jul 2011 13:54

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Ich mache das auch so. Bei mir funktioniert es?
Blobs werden getrennt von den restlichen Daten gespeichert. Diese bremsen den ugriff deshalb nicht aus. natürlich dauert das Auslagern und anschliessende Löschen jedesmal etwas Zeit.

blackfin 6. Jul 2011 13:58

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Gerade Firebird hat (im Gegensatz zu z.B. mySQL) eine sehr gute BLOB-Performance.
In manchen Blogs wird sogar behauptet, Firebird sei in manchen Fällen sogar schneller als das Dateisystem.

Warum der Reader deine PDFs nicht mehr lesen kann, verstehe ich nicht so ganz.
BLOBS sind rein binäre Daten, die Datei-Endung oder was für einen MimeTyp man darin speichert ist völlig egal.
Was rein geht, wird nicht verändert, binär halt.
Evtl. ein Fehler beim Speichern der PDF in den BLOB in deiner Applikation?

DeddyH 6. Jul 2011 14:02

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Ich vermute auch, dass entweder beim Speichern oder beim Auslesen etwas nicht stimmt.

Tyrolean 6. Jul 2011 17:22

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Zitat:

Zitat von mkinzler (Beitrag 1110270)
Datei in Temp-Ordner auslagern und dann Aufrufen

Vernünftig, aber die einzige Frage die sich mir da immer stellt ist, wie kann ich diese Temp-Dateien wieder loswerden. Momentan lass ich sie einfach und hoffe irgendwer räumt auf, aber wie macht man das optimal? (gleich löschen geht nicht, da das PDF zB ja noch offen sein kann, während das Programm weiterläuft)

Bummi 6. Jul 2011 17:26

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
gegf. eine eigenen Unterordner anlegen, dessen Inhalt bei Start und Ende des Programmes versucht wird aufzuräumen...

DeddyH 7. Jul 2011 08:33

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
Oder Programm starten und auf dessen Ende warten. Anschließend versuchen, die Datei wieder zu löschen (das muss beim Adobe Reader nicht unbedingt funktionieren, deshalb Betonung auf versuchen). Oder AFAIK gab es eine Art FileMode, der bestimmt, dass diese Datei nach einem Reboot automatisch gelöscht wird, finde ich nur gerade nicht.

blackfin 7. Jul 2011 08:38

AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
 
1) Beim Beenden des Programms versuchen, die Temp-Dateien zu löschen.
2) Wenn eine Datei im Zugriff ist (kann man ja feststellen), die Datei überspringen.
3) Beim nächsten Start des Programms oder jedesmal, bevor eine neue Datei vom Programm im Temp-Ordner angelegt wird,
nach alten Dateien des Programms im Temp-Ordner suchen (gute Namenskonventionen vorausgesetzt) und versuchen, diese zu löschen.

Der von DeddyH angegebene "FileMode" ist soviel ich weiss eine MoveFileEx WinAPI-Operation mit dem Flag MOVEFILE_DELAY_UNTIL_REBOOT :
Delphi-Quellcode:
// ungetestet, vorher nochmal nachlesen!! :-D
MoveFileEx('C:\Windows\temp\gesperrte.pdf','',MOVEFILE_DELAY_UNTIL_REBOOT); // kann auch sein, dass statt '' NULL oder nil stehen muss..


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