AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PDF in Datenbank speichern

Ein Thema von HolgerCW · begonnen am 19. Aug 2013 · letzter Beitrag vom 21. Aug 2013
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: PDF in Datenbank speichern

  Alt 19. Aug 2013, 13:15
Um eine im Blob gespeicherte PDF- oder HTML-Datei im Embedded WebBrowser anzuzeigen, gehe ich z.B. so vor
Bei PDFs mag das noch gut gehen. Was machst du aber bei realen HTML-Dateien die noch zig JS/CSS/...-Dateien realtiv ansprechen?
Keine Ahnung, bislang hatte ich diesen Fall noch nicht. Das Projekt, in dem ich diese Methode verwende, speichert HTML- und PDF-Dateien, die in einem Info-Letter verlinkt wurden, der regelmäßig von der Anwendung aus dem Postfach heruntergeladen wird. Da kamen bislang keine weiteren verlinkten Dateien vor, die mitgespeichert werden müßten.

Wie würdest du das machen?
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
223 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: PDF in Datenbank speichern

  Alt 19. Aug 2013, 20:18
MHT

http://de.wikipedia.org/wiki/MIME_En...HTML_Documents

ist da wohl der richtige Weg
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: PDF in Datenbank speichern

  Alt 19. Aug 2013, 23:11
MHT ist da wohl der richtige Weg
Richtig! Wenn ich das in diesem Fall benötigen würde, wäre das der richtige Weg. Aber bei mir geht's nur um Textinformation, die Darstellung in den gespeicherten HTML-Dokumenten stimmt mit der Darstellung auf der Ursprungshomepage überein und genügt, um den Anwender zu informieren. Grafiken und sonstige weitere Elemente spielen in diesem Fall keine Rolle.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.232 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 06:11
Nicht unbedingt.
Stell dir vor du hast 10.000 Dokumente. Alle basieren auf das gleiche Layout. Verwenden also gleiche CSS/HTML/JS-Elemente.
Mit dem MIME-Ansatz werden die mehrfach verwendeten Elemente 10.000* kopiert und in 10.000 Blob-Felder gespeichert. Im Rahmen eines Redesigns der HTML-Seiten wird z.B. eine CSS-Angepasst. Man muss also 10.000 Blob-Felder aktualisieren (bzw. prüfen).

Wie würdest du das machen?
In diesem Fall würde ich eine externe Speicherung im Dateisystem vorsehen. In der DB steht nur der relative Link auf die Datei basierend auf einem Rootverzeichnis.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#5

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 08:02
Folgende SQL-Funktion steckt hinter der DM_Main.QueryRaw:

Delphi-Quellcode:
UPDATE
SYSDBP.DBP_AUFTRAGEX
SET
PDF
= :p_pdf
WHERE AUFTRAGSNUMMER
= :p_auftragsnummer
Kann es sein das ich vielleicht hier was verändern muss ? -> outstream.Seek(0, soFromBeginning);

Gruss

Holger
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#6

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 10:04
Habe mir jetzt folgende Funktion gebastelt:

Delphi-Quellcode:
function Datensatz_speichern_Pictures_PDF2(Tabelle, Spalte, Filter_Spalte, Filter_Wert, Pfad:String; PDF_loeschen: Boolean):Boolean;
var
 blob : TStream;
 FileS : TFileStream;
begin

 Result := FALSE;

 DM_Main.TableRaw.Close;
 DM_Main.TableRaw.TableName := Tabelle;
 DM_Main.TableRaw.Filter := Filter_Spalte + '=' + Filter_Wert;
 DM_Main.TableRaw.Filtered := TRUE;
 DM_Main.TableRaw.Open;

 blob := DM_Main.TableRaw.CreateBlobStream(DM_Main.TableRaw.FieldByName(Spalte), bmRead);
 blob.Seek(0, soFromBeginning);

 try

  FileS := TFileStream.Create(Pfad, fmCreate);
  FileS.CopyFrom(blob, blob.Size);

 finally

  FileS.Free;
  blob.Free;

 end;

 if PDF_loeschen = true then
 begin

  DeleteFile(Pfad);

 end;

 Result := TRUE;

end;
Wie speichere ich aber jetzt die PDF in der Datenbank ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#7

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 10:25
Ich versteh den Sinn der ganzen Funktion nicht so richtig, wieso holst Du ein PDF aus einem BLOB-Feld, speicherst dies in eine Datei und löschst diese im Anschluss ggf. gleich wieder? Vom kreativen Gebrauch von Ressourcenschutzblöcken und Boolean-Vergleichen mal ganz abgesehen. Und wenn man einen BLOBStream mit bmRead zum Lesen erzeugt, wie muss es dann wohl zum Schreiben aussehen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#8

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 10:52
Ich verstehe selber zur Zeit gar nichts mehr.

Es geht mir darum, dass mir vielleicht eine andere Möglichkeit aufgezeigt wird eine PDF-Datei in eine Tabelle mit einer LONGRAW-Spalte zu schreiben, als wie ich Sie benutze, da komischerweise an bestimmten PC's (Ich nenne Sie mal CN-PCs) bei uns im Hause zwar mit meiner Eingangs geposteten Funktion ein Stream gespeichert wird, dieser aber nicht mehr ausgelesen werden kann ?

Soll heissen:

Folgende Auslesefunktion funktioniert bei allen PC's:

Delphi-Quellcode:
function Datensatz_auslesen_Picture_PDF(Tabelle, Spalte, Filter_Spalte, Filter_Wert, Pfad:String):Boolean;
var
 fs: TFileStream;
 blob: TStream;
begin

 Result := FALSE;

 DM_Main.TableRaw.Close;
 DM_Main.TableRaw.TableName := Tabelle;
 DM_Main.TableRaw.IndexFieldNames := Filter_Spalte;
 DM_Main.TableRaw.Filter := Filter_Spalte + ' = ' + Filter_Wert + '';
 DM_Main.TableRaw.Filtered := TRUE;
 DM_Main.TableRaw.Open;

 if DM_Main.TableRaw[Spalte] = 'then exit;

 blob := DM_Main.TableRaw.CreateBlobStream(DM_Main.TableRaw.FieldByName(Spalte), bmRead);
 blob.Seek(0, soFromBeginning);

 fs:=TFileStream.Create(Pfad, fmCreate);
 fs.CopyFrom(blob, blob.Size);

 fs.Free;
 blob.Free;

 Result := TRUE;

end;
Folgende Funktion speichert den Stream in der Datenbank. Nur wenn der Stream über die CN-PCs gespeichert wird kann man diesen Stream mit der obigen Funktion nicht mehr laden.

Delphi-Quellcode:
procedure Datensatz_speichern_Pictures_PDF(Tabelle, Spalte, Filter_Spalte, Filter_Wert, Pfad:String; PDF_loeschen: Boolean);
var
 ms, outstream: TMemoryStream;
begin

 ms := TMemoryStream.Create;
 outstream := TMemoryStream.Create;
 outstream.LoadFromFile(Pfad);
 outstream.Seek(0, soFromBeginning);

 DM_Main.QueryRaw.Close;
 DM_Main.QueryRaw.SQL[1] := Tabelle;
 DM_Main.QueryRaw.SQL[3] := Spalte;
 DM_Main.QueryRaw.SQL[5] := 'WHERE ' + Filter_Spalte;
 DM_Main.QueryRaw.ParamByName('p_pdf').SetBlobData(outstream.Memory, outstream.Size);
 DM_Main.QueryRaw.ParamByName('p_auftragsnummer').asstring := Filter_Wert;
 DM_Main.QueryRaw.ExecSQL;

 ms.Free;
 outstream.Free;

 if PDF_loeschen = true then
 begin

  DeleteFile(Pfad);

 end;

end;
Es geht mir darum eine andere Möglichkeit des speicherns von PDF-Dateien in eine Datenbank aufgezeigt zu bekommen, oder eventuell mal Hinweise was ich an der "Speicher-Funktion" mal testweise verändern sollte um dem Fehler auf den Grund zu gehen ?

Gruss

Holger
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz