Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi RTF in Firebird via StoredProc (https://www.delphipraxis.net/73969-rtf-firebird-via-storedproc.html)

Billa 26. Jul 2006 10:00

Re: RTF in Firebird via StoredProc
 
...es ist ein TRichEdit...

mkinzler 26. Jul 2006 10:05

Re: RTF in Firebird via StoredProc
 
Du könntest den Inhalt auch direkt in den Blob "streamen". (.Lines.SaveToStream)

Billa 26. Jul 2006 10:11

Re: RTF in Firebird via StoredProc
 
... wie lautet denn da die korrekte Anweisung? Ich bekomme alle möglichen Fehlermeldungen (..habe aber auch noch nie mit Streams gearbeitet..) !

Hansa 26. Jul 2006 10:38

Re: RTF in Firebird via StoredProc
 
Zitat:

Zitat von Billa
...sorry, habe ich vergessen: ja der Feldtyp von FIRST_STORY ist Blob Subtype Text!

Also ist es ein Text.

Zitat:

Zitat von Billa
ParamByName('FIRST_STORY').asString := ( edStory.Lines.GetText );
......
ExecProc;
end;

...liegt das Problem.

Und der wird mit AsString im Programm verarbeitet. Für dieses ist es also ein String. Fazit : nix formatiert !

Da die Zeit drängt : suche auf Lemmys Seiten nach seinem kurzen Blob-Tuto und lese das durch. Blob Subtype Text dürfte so nicht gehen.

www.delphi-tutorials.de

Prinzipiell gibt es allerdings 2 Möglichkeiten : Du hast vor, eine quasi Binärdatei in die DB zu friemeln. Wie man sieht, geht das nicht ganz so einfach und hat weitere Nachteile. Die andere Möglichkeit ist : speichere lediglich den Pfad der Datei in der DB. Die direkte Speicherung in DB empfiehlt sich dann, wenn Binärdaten eine Grundlage für das Programm sind und zwingend benötigt werden. Z.B. Immobilienmakler. Der braucht zu jedem Haus ein paar Bilder, Baupläne usw. Die Zahlen : Baujahr, qm usw. sind da eher irrelevant. Hätte ich ein solches Programm zu schreiben, dann wären auch die Bilder usw. zentral in der DB.

Bei mir siehts aber z.B. so aus : Zahlen, Strings usw. sind das wichtigste. Einige Lieferanten geben nun in unregelmäßigen Abständen auch CDs raus mit Bildern, Druckvorlagen usw. zu diversen Artikeln. Schaufele ich diese in die DB, dann wird die wohl aufgebläht. Je nach Auflösung brauchen ein paar Bilder schon soviel Speicherplatz wie alle anderen Daten zusammen. Um jetzt die tägliche Datensicherung nicht wegen ein paar jährlich erneuerter Bilder zu verlangsamen und CDs mit immer den gleichen Sachen zu füllen macht es da eher Sinn, Bilder etc. NICHT in die DB zu nehmen.

dataspider 26. Jul 2006 10:47

Re: RTF in Firebird via StoredProc
 
Hi,

ich hoffe, es hilft dir weiter. Ich mache hier aus einem Stream einen String und zeige den Inhalt des RTF an:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  AStream: TMemoryStream;
  tmp: String;
begin
  AStream := TMemoryStream.Create;
  try
    RichEdit1.Lines.SaveToStream(AStream);
    AStream.Position := 0;
    SetLength(tmp, AStream.Size);
     AStream.Read(tmp[1], AStream.Size);
    // jetzt ist Alles im String tmp!
    MessageDlg(tmp, mtWarning, [mbOK], 0);
  finally
    AStream.Free;
  end;
end;
[EDIT]
als function
Delphi-Quellcode:
function GetRTFString(ARichEdit: TRichEdit): string;
Var
  AStream: TMemoryStream;
begin
  Result := '';
  AStream := TMemoryStream.Create;
  try
    ARichEdit.Lines.SaveToStream(AStream);
    AStream.Position := 0;
    if AStream.Size > 0 then
    begin
      SetLength(Result, AStream.Size);
      AStream.ReadBuffer(Result[1], AStream.Size);
    end;
  finally
    AStream.Free;
  end;
end;
Cu, Frank

Billa 26. Jul 2006 10:53

Re: RTF in Firebird via StoredProc
 
...leider ist in dem Fall gerade der Text MIT den Formatierungen so wichtig...wg. Dokumentation.

Das Design habe ich nicht gemacht, es hat sich wohl auch in den letzten 8 oder 9 Jahren so entwickelt. Die Datenbank ist mehrfach migriert worden (ursprünglich mal DBase) und zu allem Überfluß ist so gut wie nix dokumentiert. Weil mehrere Programme auf die DB zugreifen, kann ich nicht einfach die DB-Struktur ändern.....

Das Tutorial war nicht so hilfreich. Das waren mehr allgemeine Hinweise.

Es werden in den RTF-Feldern nicht nur Dateien eingelesen, sondern auch ergänzt. Deshalb kommt ein Verweis auf die Quelldateien nicht in Frage.

Ich werde mal den Umweg über eine Zwischenspeicherung gehen. (File oder Stream)..

Schade, ich hatte die Hoffnung, daß es für so einen Fall so eine Art "Kochrezept" gibt....
trotzdem allen einen herzlichen Dank!

dataspider 26. Jul 2006 11:00

Re: RTF in Firebird via StoredProc
 
Zitat:

Zitat von Billa
Schade, ich hatte die Hoffnung, daß es für so einen Fall so eine Art "Kochrezept" gibt....
trotzdem allen einen herzlichen Dank!

Wenn du die Function aus meinem Beitrag nimmst, brauchst du doch nur noch deinen Code ändern:
Delphi-Quellcode:
with prcSave do
begin
  ParamByname('FIRST_ID').AsInteger := ActId;
  ParamByname('FIRST_NAME').AsString := edFirstName.Text;
  ParamByName('FIRST_STORY').asString := GetRTFString(edStory);
  ......
  ExecProc;
end;
Frank

Billa 26. Jul 2006 11:08

Re: RTF in Firebird via StoredProc
 
....Ja super! Ich hatte Deinen Beitrag nicht gesehen, da ich selber gerade postete. Habe die Funktion probiert, und: ES KLAPPT! :hello: :bounce1: Klasse, Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz