Einzelnen Beitrag anzeigen

HolgerCW

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

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 11: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