Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi PDF in DB speichern und öffnen danach Proggi-Abstutz (https://www.delphipraxis.net/168187-pdf-db-speichern-und-oeffnen-danach-proggi-abstutz.html)

DeddyH 14. Mai 2012 08:46

AW: PDF in DB speichern und öffnen danach Proggi-Abstutz
 
Jaja :stupid:, letzter Vorschlag (ungetestet):
Delphi-Quellcode:
procedure TForm17.Button2Click(Sender: TObject);
const
  FILENAME = 'Dok.pdf';
var
  PDFField: TBlobField;
  TempPath : String;
  ExecuteInfo: SHELLEXECUTEINFO;
begin
  ADOTable1.Open;
  PDFField := ADOTable1.FieldByName('PDFFILE') as TBlobField;
  if not PDFField.IsNull then
    begin
      SetLength(TempPath, GetTempPath(0, nil));
      GetTempPath(Length(TempPath), PChar(TempPath));
      SetLength(TempPath, StrLen(PChar(TempPath)));
      TempPath := IncludeTrailingPathDelimiter(TempPath) + FILENAME;
      try
        PDFField.SaveToFile(TempPath);
        ZeroMemory(@ExecuteInfo, SizeOf(ExecuteInfo));
        ExecuteInfo.cbSize := SizeOf(ExecuteInfo);
        ExecuteInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
        ExecuteInfo.lpVerb := 'open';
        ExecuteInfo.lpFilename := PChar(TempPath);
        ExecuteInfo.nShow := SW_SHOWNORMAL;
        if ShellExecuteEx(@ExecuteInfo) then
          CloseHandle(ExecuteInfo.hProcess)
        else
          raise Exception.Create(SysErrorMessage(GetLastError));
      except
        on E: Exception do
         ShowMessage('Fehler beim Öffnen der Datei: ' + E.Message);
      end;
    end
  else
    ShowMessage('Kein PDF im aktuellen Datensatz enthalten.');
end;
Wobei man das ganze ShellExecuteEx-Geraffel (und auch das Ermitteln des Temp-Verzeichnisses) natürlich besser in eine eigene Routine auslagert, in der man dann auch auf das Schließen des PDF-Readers warten könnte, um die temporäre Datei im Anschluss wieder zu löschen. Beispiele gibt es ja genug im Forum oder der Codelib.

Andreas L. 14. Mai 2012 08:59

AW: PDF in DB speichern und öffnen danach Proggi-Abstutz
 
Ich kenne mich mit ADO nicht aus aber kann es sein das keine Daten in die Datenbank geschrieben werden weil ADOTable1.Post im except-Abschnitt steht?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOTable1.Edit;
  OpenDialog1.Filter:='*.pdf|*.pdf';
  if OpenDialog1.Execute then
  try
    TBlobField(ADOTable1.FieldByName('PDFFILE')).LoadFromFile(OpenDialog1.FileName);
  EXCEPT
    ShowMessage ('Fehler beim Öffnen der Datei!');
    ADOTable1.Post; // <-- Aufruf in Except-Bereich? 
  end;
end;

DeddyH 14. Mai 2012 09:02

AW: PDF in DB speichern und öffnen danach Proggi-Abstutz
 
Das ist noch keinem aufgefallen (mir auch nicht) :lol:. OK, wenn wir eh schon dabei sind:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.Filter:='*.pdf|*.pdf';
  if OpenDialog1.Execute then
    try
      ADOTable1.Edit;
      TBlobField(ADOTable1.FieldByName('PDFFILE')).LoadFromFile(OpenDialog1.FileName);
      ADOTable1.Post;
    except
      on E: Exception do  
        ShowMessage ('Fehler beim Speichern der Daten: ' + E.Message);            
    end;
end;

p80286 14. Mai 2012 10:12

AW: PDF in DB speichern und öffnen danach Proggi-Abstutz
 
Darf ich mal vorsichtig fragen um was es hier jetzt noch geht?
Lesen einer Datei und abspeichern in DB?
oder
DB-Wert in Datei Speichern?
oder doch Bahnhof,Kofferklauen?

Gruß
K-H

DeddyH 14. Mai 2012 10:17

AW: PDF in DB speichern und öffnen danach Proggi-Abstutz
 
Prinzipiell waren ja beide Methoden im Ausgangspost falsch. Das haben wir nur (hoffentlich) korrigiert.

octonet 6. Okt 2016 23:28

AW: PDF in DB speichern und öffnen danach Proggi-Abstutz
 
Danke, das hat mir alles sehr geholfen...

Grüße
Robert


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.
Seite 4 von 4   « Erste     234   

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