AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

PDF in Datenbank speichern

Ein Thema von HolgerCW · begonnen am 19. Aug 2013 · letzter Beitrag vom 21. Aug 2013
Antwort Antwort
Seite 3 von 4     123 4   
HolgerCW

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

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 14:02
Alles klar.

Habe es jetzt mal für mich etwas umgebaut:

Delphi-Quellcode:
function Datensatz_speichern_PDF(Tabelle, Spalte, Filter_Spalte, Filter_Wert, Pfad:String; PDF_loeschen: Boolean):Boolean;
var
 S : TStream;
 FileS : TFileStream;
 BlobFeld: TField;
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;
 DM_Main.TableRaw.Edit;

 BlobFeld := DM_Main.TableRaw.FieldByName(Spalte);

 S := BlobFeld.DataSet.CreateBlobStream(BlobFeld, bmReadWrite);

 try

  FileS := TFileStream.Create(Pfad, fmOpenRead);
  S.CopyFrom(FileS, FileS.Size);
  DM_Main.TableRaw.Post;
  Result := TRUE;

 finally

  FileS.Free;
  S.Free;

 end;

end;
Nur leider werden keine Daten gespeichert. Wo ist der Fehler ?

Gruss

Holger
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 14:05
"Zurückspulen" vergessen?
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
 
#23

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 14:08
Wenn ich vor dem "try" folgenden Code eingebe:

S.Seek(0, soFromBeginning); bringt das ncihts, wenn Du das meinst ?

Gruss

Holger
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#24

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 14:10
Nur leider werden keine Daten gespeichert. Wo ist der Fehler ?
Wie stellst du fest, daß keine Daten gespeichert werden? In welchen Datensatz speicherst du deine Daten und welchen Datensatz überprüfst du daraufhin, ob er die PDF-Datei auch enthält?

Wenn ich das richtig sehe, speicherst du alles immer in den ersten Record (Open setzt den Datensatzzeiger auf den ersten Record). Möchtest du einen neuen Datensatz anlegen, dann muß es natürlich Append oder Insert statt Edit heißen. Wenn du einen bestehenden Datensatz bearbeiten möchtest, solltest du zuvor den gewünschten Datensatz lokalisieren.

Geändert von Perlsau (20. Aug 2013 um 14:15 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#25

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 14:14
"Zurückspulen" vergessen?
Soweit ich weiß, steht ein FileStream immer am Anfang nach dem Laden ...
  Mit Zitat antworten Zitat
HolgerCW

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

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 14:19
Ich filtere ja die TTable vorher auf einen bestimmten Datensatz und wenn ich dann "open" machen müsste doch dieser Datensatz geöffnet werden, oder ?

Wenn ich jetzt aber .edit gegen .append austausche klappt es auch nciht.

Überprüfen tue ich das mit dem SQl-Developer, ob in der Spalte nun Daten vorhanden sind.

Was könnte an meinem Code ncoh falsch sein ?

Gruss

Holger
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#27

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 14:31
Ich filtere ja die TTable vorher auf einen bestimmten Datensatz und wenn ich dann "open" machen müsste doch dieser Datensatz geöffnet werden, oder?
Im Grunde schon, wenn Filtered auf True steht und wenn der Filter überhaupt einen Datensatz zurückliefert. Ich würde hier besser Locate einsetzen. Ansonsten kann ich nicht viel mehr drüber sagen, denn mir ist der Status deiner Anwendung zum Zeitpunkt des Aufrufs der Einlese-Funktion nicht bekannt. Wäre mir jetzt auch zu viel Arbeit, deinen ganzen Programmcode durchzuforsten, um zu sehen, wo irgendwas nicht paßt.

Wieso beläßt du die Function zum Einlesen der PDF-Datei in ein Blobfeld nicht so, wie ich sie dir gezeigt habe, und erledigst alles andere in der aufrufenden Methode? Dann könntest du nämlich deine Daten_To_Blob-Funktion für alle denkbaren Fälle verwenden, auch zum Einlesen von Bildern oder sonstwas, auch zum Einlesen in andere Blob-Felder usw. Zudem würde dein Code dadurch übersichtlicher. Lokalisiere also in der aufrufenden Methode den gewünschten Datensatz, setze deine Table-Komponente auf Append, Insert oder Edit, rufe die Einlese-Function auf und übergebe ihr die beiden Parameter Dateiname und Blobfeld, und danach machst du in der aufrufenden Methode Post und gibst die erzeugte Table-Komponente wieder frei. Das wäre sauberer Programmierstil. Unsauber ist es, wenn man versucht, alles in eine Funktion oder Prozedur zu quetschen.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#28

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 16:29
Habe es jetzt mal für mich etwas umgebaut:
Gibts da nicht auch irgendwo mal ein "Post" (damit die Daten zur Datenbank übertragen werden) und vieleicht auch ein Commit für die Transaktion?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#29

AW: PDF in Datenbank speichern

  Alt 20. Aug 2013, 16:53
Habe es jetzt mal für mich etwas umgebaut:
Gibts da nicht auch irgendwo mal ein "Post" (damit die Daten zur Datenbank übertragen werden) und vieleicht auch ein Commit für die Transaktion?
Das Post steht dort bereits: als letzte Zeile vor dem finally. Commit braucht er nur, wenn Autocommit auf False steht (bei mir meistens true).
  Mit Zitat antworten Zitat
HolgerCW

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

AW: PDF in Datenbank speichern

  Alt 21. Aug 2013, 08:18
Guten morgen zusammen,

mir ist nun aufgefallen, dass bei mir in der Zeile

S.CopyFrom(FileS, FileS.Size); das FileS.Size = 0 ist ?

Ist das richtig ?

Gruss

Holger
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:19 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