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