Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi HowTo: PDF oder HTML Dokumente in Paradox Datenbank ablegen? (https://www.delphipraxis.net/16821-howto-pdf-oder-html-dokumente-paradox-datenbank-ablegen.html)

hacki 24. Feb 2004 10:29


HowTo: PDF oder HTML Dokumente in Paradox Datenbank ablegen?
 
Hallo,

ich möchte gerne grafisch aufbereitete Dokumente wie z.B. PDF oder HTML- Dokumente so ablegen, daß der 0815-Anwender sie nicht einfach von der Festplatte kopieren kann. Für meine Applikation setze ich die Desktopdatenbank Paradox ein.

Die einfachste Möglichkeit wäre diese Dokumente irgendwie als BLOB - Feld in eine Tabelle rein schreiben zu können. Reine RTF-Dokumente reichen leider nicht aus, da sie keine Grafiken fassen können.

Bin momentan ratlos und suche dringend Euren RAT !!! :roll:

Danke und Grüsse
Hacki

MarcoWarm 1. Mär 2004 09:17

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Hi Hacki,

also ich benutze Interbase, aber das Prinzip ist wohl das gleiche:

Delphi-Quellcode:
procedure irgendwas;
var
  MyStream : TStream;
  Image   : TBitmap;
begin
    //Tabelle bearbeiten
    Table1.edit;

    //Bitmapobjekt erzeugen und aus Datei laden
    Image:=TBitmap.Create;
    Image.LoadFromFile('D:\Bilder\test.bmp');

    //einen Blobstream aus dem Tabellenfeld (Typ BLOB) erstellen
    MyStream:=Table1.CreateBlobStream(table1.FieldByName('BILD'),bmReadWrite);
   
    //Das Bild in den Stream speichern - das BLOB-Feld wird automatisch aktualisiert
    Image.SaveToStream(MyStream);

    //Allen Kram freigeben
    Image.Free;
    MyStream.Free;
   
    //Änderungen schreiben
    Table1.Post;
end
Ciao

Marco

MarcoWarm 1. Mär 2004 09:32

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Halt - ich hab noch was vergessen

Wenn der Dateityp nicht bekannt ist mag es sinnvoll sein die Datei in einen
Filestream zu laden und diesen in den BLOB-Stream zu kopieren

Delphi-Quellcode:
...
MyFileStream:=TFileStream.Create('c:\myfile.xyz',fmOpenRead);

MyStream.CopyFrom(MyFileStream, 0);
...
Ciao

hacki 1. Mär 2004 18:54

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Hallo Marco,

danke für die Tips.

Welchen BLOB Typ muß ich in der Datenbank denn anlegen.

Soweit ich weiß gibt es doch unterschiedliche BLOB Deklarationen.

Werde es dann gleich ausprobieren.

Grüsse hacki

MarcoWarm 2. Mär 2004 05:37

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Hi,

nun, wie gesagt, hab ich das in Paradox noch nie gemacht, aber laut

http://www.cpcug.org/user/clemenzi/t...ieldTypes.html

solltest du den Typ "Binary" nehmen.

Ciao

Marco

hacki 2. Mär 2004 20:48

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Hallo Marco,

nun habe ich es ausprobiert:

Code:
procedure TForm1.Button2Click(Sender: TObject);
var
  MyStream : TStream;
  MyFileStream : TFileStream;
begin
    Table1.Open;

    Table1.Append;

     //Tabelle bearbeiten
    Table1.edit;

    MyFileStream:=TFileStream.Create('C:\download\test.pdf',fmOpenRead);

    MyStream := TStream.Create;

    MyStream.CopyFrom(MyFileStream, 0);

    //einen Blobstream aus dem Tabellenfeld (Typ BLOB) erstellen
    MyStream:=Table1.CreateBlobStream(table1.FieldByName('pdf'),bmReadWrite);

    MyStream.Free;

    //Änderungen schreiben
    Table1.Post;

    Table1.Close;
end;
Leiser erhalte ich in der Zeile:

Code:
MyStream:=Table1.CreateBlobStream(table1.FieldByName('pdf'),bmReadWrite);
Immer einen "abstract error" !?

Habe ich da etwas falsch gemacht ?

Wäre nett, wenn Du mir nochmal helfen könntest.

Danke und Grüsse
Hacki

MarcoWarm 3. Mär 2004 05:34

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Hi Hacki,

Der abstrakte Fehler kommt, da Du Versuchst direkt in ein als TStream erzeugten Stream
zu schreiben - das klappt aber nicht. Der Stream wird nämlich durch CreateBlobStream
erzeugt und somit dem Blob-Feld zugeordnet.

So klappts:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyStream : TStream;
  MyFileStream : TFileStream;
begin
    Table1.Open;

    Table1.Append;

     //Tabelle bearbeiten
    Table1.edit;

    MyFileStream:=TFileStream.Create('C:\temp\test.pdf',fmOpenRead);

    //einen Blobstream aus dem Tabellenfeld (Typ BLOB) erstellen
    MyStream:=Table1.CreateBlobStream(table1.FieldByName('pdf'),bmReadWrite);

    //Dateiinhalt in BLOB kopieren
    MyStream.CopyFrom(MyFileStream, 0);

    MyStream.Free;
    MyFileStream.Free;

    //Änderungen schreiben
    Table1.Post;

    Table1.Close;
end;
Hope this helps

Ciao

marco

hacki 3. Mär 2004 18:22

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Hi Marco,

klappt echt Super ! Erstmal vielen vielen Dank !!! :lol: :lol: :party: :dancer2:

Jetzt habe ich nur noch das Problem, die Datei wieder raus zu lutschen und vielleicht zu speichern (später will ich sie dann im PDF-Reader direkt anzeigen).

Wenn Du da noch einen Tip hast, wie ich das nun wieder anstelle ? Mit Streams habe ich es nicht so - habe noch nie damit gearbeitet. :?

Sieht aber eigentlich gut aus wenn's funzt.


Ciao hacki

MarcoWarm 4. Mär 2004 05:29

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Dann machst Du es einfach umgekehrt:

1. Blobstream erzeugen
2. Filestream erzeugen (mit fmCreate)
3. Filestream.CopyFrom(BlobStream,0)
4. Alles Freigeben

und schon hast Du die Datei wieder draußen

Ciao

marco

hacki 17. Jun 2004 16:49

Re: HowTo: PDF oder HTML Dokumente in Paradox Datenbank able
 
Hallo Marco,

mit dem Schreiben in die Datenbank hat wunderbar geklappt. Das rauslesen bekomme ich nicht hin. Mag trivial sein - aber ich weiß nicht wie ?? Ich habe folgendes versucht:

Delphi-Quellcode:
    MyStream:=Table1.CreateBlobStream(table1.FieldByName('pdf'),bmReadWrite);

    MyFileStream.CopyFrom(MyStream, 0);

    MyFileStream.Create('C:\transfer\12345.pdf',fmOpenRead);
Bei
Delphi-Quellcode:
  MyFileStream.CopyFrom(MyStream, 0);
bekomme ich immer eine Access Violation. Keine Ahnung was da passiert. Funzt es überhaupt so oder mache ich grundsätzlich etwas falsch ??

Wäre toll wenn ich Hilfe bekäme !!

Danke und Grüsse, hacki


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
Seite 1 von 2  1 2      

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