Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Format eines DBRichEdit(Textes) speichern und laden (https://www.delphipraxis.net/183843-format-eines-dbrichedit-textes-speichern-und-laden.html)

beanbear6 9. Feb 2015 04:23

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

Format eines DBRichEdit(Textes) speichern und laden
 
Hi zusammen,
ich hab ein DBRichEdit mit einem (Paradox-Feldtyp F) formatierten Memo verbunden.
Im Quellcode schreibe ich folgendes:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with DBRichEdit1.SelAttributes do
  If Style = [fsBold] then Style := [] else Style := [fsBold];
end;
Der markierte Text wird auch in fett dann gezeigt. Nur nach dem Speichern und wieder Laden des Textes in das DBRichEdit ist der Text wieder nicht formatiert. Kann mir jemand helfen und mir sagen, was ich falsch mache oder wie ich sowas lösen kannn?
Ich danke Euch für jeden Tip..
beanbear6

baumina 9. Feb 2015 07:07

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Wahrscheinlich wirst du RTF nur in einem BLOB-Feld speichern können.

Perlsau 9. Feb 2015 07:10

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Zwar habe ich nie mit Paradox oder der BDE gearbeitet, doch kann ich dir sagen, daß man RichEdit-Inhalte am besten in einem binären Feld speichert. Das bedeutet, man wählt kein Feld, das Text aufnimmt, sondern – in der Sprache modernerer Datenbanken – ein binäres Blobfeld. Dann ist nämlich garantiert, daß der Stream der DBRichEdit-Komponente unverändert im Blobfeld ankommt und ebenso unverändert daraus wieder gelesen werden kann. Bei Datenbank-Textfeldern (Memo, VarChar) besteht dagegen die Gefahr, daß Steuerzeichen, die ja im RichText vorkommen, falsch interpretiert werden.

p80286 9. Feb 2015 10:45

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Naja die RTF-Rohdaten sollte man durchaus ineinem Varchar/Char/Text/Memo-Feld speichern können:
Code:
{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1031{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}....
Da wird nicht gezaubert und es ist mit dem ordinären Notepad lesbar. man muß sich nur durch die verschiedenen Begrifflichkeiten durchfinden, um zu erreichen was man will. Irgendwo sollte jede RichText-Komponente auch den Zugriff auf den "SourceCode" ermöglichen, und der kann ganz problemlos als Text gespeichert werden.

Gruß
K-H

mkinzler 9. Feb 2015 10:47

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Es ist nur die Frage, was der DBRichText in die Tabelle ablegt. Es scheint so, ob nur der reine Text gespeichert wird.

Perlsau 9. Feb 2015 12:11

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Zitat:

Zitat von p80286 (Beitrag 1289282)
Naja die RTF-Rohdaten sollte man durchaus ineinem Varchar/Char/Text/Memo-Feld speichern können:
Code:
{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1031{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}....
Da wird nicht gezaubert und es ist mit dem ordinären Notepad lesbar. man muß sich nur durch die verschiedenen Begrifflichkeiten durchfinden, um zu erreichen was man will. Irgendwo sollte jede RichText-Komponente auch den Zugriff auf den "SourceCode" ermöglichen, und der kann ganz problemlos als Text gespeichert werden.

Grundsätzlich ist das nicht falsch oder klingt zumindest logisch nachvollziehbar. Dennoch habe ich die Erfahrung gemacht, daß RTF-Inhalte – insbesondere ab Delphi 2009, wo ja die Unicode-Unterstützung begann – in Textfeldern – auch z.B. bei Firebird's Blobfeld im Textmodus – nicht immer korrekt gespeichert werden, in Binärfeldern dagegen schon, und zwar ausnahmslos. Ich kann dir auch nicht genau sagen, weshalb das so ist, aber ich kann dir versichern, daß es so ist.

Zudem mache vermutlich nicht nur ich von der Möglichkeit Gebrauch, in RichEdit-Komponenten auch Grafiken zu speichern, was die Wahl eines Binärfeldes als zwingend erscheinen läßt. Bei Memo-Komponenten wie TDBMemo z.B. genügt ein Textfeld, da gibts keine Formatierungen und man kann da auch keine Bilder einbinden.

Wenn du mal die Forensuche bemühst, wirst du etlichen Usern begegnen, die große Schwierigkeiten dabei hatten, RTF-Inhalte in Textfeldern zu speichern, diese Probleme aber nicht mehr auftraten, nachdem sie ein Binärfeld gewählt hatten. Deshalb ist das immer auch mein erster Ratschlag bei diesem speziellen Problem.


Zitat:

Zitat von mkinzler (Beitrag 1289283)
Es ist nur die Frage, was der DBRichText in die Tabelle ablegt. Es scheint so, ob nur der reine Text gespeichert wird.

Scheint mir auch so ... Allerdings habe ich schon lange nicht mehr probiert, RTF-Inhalte in Textfeldern zu speichern :P

beanbear6 9. Feb 2015 13:11

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Hallo zusammen,
gleich mal vielen Dank für Eure Mühe. Wie aber versteh ich das mit dem Blob-Feld? Is dan für z.B. Paradox ein OLE-Feld? Ich hab da leider viel zu wenig Erfahrung damit. Ich weis schon, dass man das Ganze auch als .rtf als Datei ablegen könnte, aber ich brauch das unbedingt in einer Datenbank. Bitte helft mir mit diesem Blobfeld...
Vielen Dank an alle!!

Perlsau 9. Feb 2015 14:03

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Welche Blob-Typen gibt es denn überhaupt in Paradox? Soweit ich eben kurz recherchieren konnte, gibt es z.B. die Typen Blob Memo und Blob Graphic. Ich würde dir empfehlen, mit diesen Feldern zu experimentieren, um herauszufinden, welches den Inhalt deiner TDBRichEdit-Komponente korrekt speichert.

Womit bearbeitest du eigentlich deine Tabellen-Strukturen in deiner Paradox-Datenbank; welchen Datenbank-Manager setzt du ein?

Hier im Forum ist auch einiges zu diesem Thema zu finden:

ATS3788 9. Feb 2015 15:58

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Hatte vor kurzen ein ähnliches Problem Perlsau:thumb: hatte
mir geholfen Binär Blob ist
die Antwort.

himitsu 9. Feb 2015 19:55

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Binär muß nicht unbedingt sein, denn die Prüfung geht nur auf Delphi-Referenz durchsuchenTField.IsBlob, welches auch gut und gern ein TEXT sein könnte.

TStringField oder PlainText=True -> Text
TBlobField/TMemoField und PlainText=False -> RichText

beanbear6 10. Feb 2015 10:35

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Hallo,
ich hab das nunmal mit DBRichEdit und nem formatierten Memo (Paradox5) versucht. Ich kann den Text bei Klick formatieren, aber beim wieder laden is die formatierung weg... Was mach ich falsch?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with DBRichEdit1.SelAttributes do
  If Style = [fsBold] then Style := [] else Style := [fsBold];
end;
Gruß beanbear6

DeddyH 10. Feb 2015 10:42

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Hast Du evtl. PlainText des RichEdits auf true gesetzt?

beanbear6 10. Feb 2015 11:46

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Hi,
nein, steht auf false... hm... :cry:
Gruß beanbear6

mm1256 10. Feb 2015 14:02

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Zitat:

Zitat von beanbear6 (Beitrag 1289390)
... aber beim wieder laden is die formatierung weg... Was mach ich falsch?

Wie speicherst bzw. lädst du denn? Ich weiß, vielleicht dumme Frage, aber manchmal sieht man(n) den Wald einfach nicht...

Abgesehen davon verwende ich niemals TDBRichEdit sondern immer TRichEdit mit LoadFromStream bzw. SaveToStream. Damit weiß man(n) was man hat und tut :)

Perlsau 10. Feb 2015 20:17

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Zitat:

Zitat von beanbear6 (Beitrag 1289390)
ich hab das nunmal mit DBRichEdit und nem formatierten Memo (Paradox5) versucht. Ich kann den Text bei Klick formatieren, aber beim wieder laden is die formatierung weg... Was mach ich falsch?

Seit deinem ersten Posting habe ich mir unzählige ähnliche Fälle in allen möglichen Foren angeschaut und mußte feststellen, daß kein einziger der antwortenden User Abhilfe zu schaffen wußte. Das hat bei mir den Eindruck erweckt, daß Paradox – ein völlig veraltetes Datenbankmanagementsystem, und das ist letztlich auch des Pudels Kern – grundsätzlich Schwierigkeiten mit der korrekten Aufnahme von RichEdit-Inhalten hat. Ich würde dir daher empfehlen, auf ein moderneres DBMS umzusteigen und auch auf die Verwendung der ebenso veralteten Borland Database Enginge zu verzichten, denn es ist nicht sichergestellt, daß beide von neueren Betriebssystemen noch ausreichend unterstützt werden.

Mach dir also nicht das Leben unnötig schwer mit veralteter Software, denn wie du siehst, hält dich das am Ende nur unnötig auf und macht deine Mühen letztlich unproduktiv. Wie immer empfehle ich an dieser Stelle Firebird, ein quelloffenes und vollständig kostenloses DMBS, das ständig weiterentwickelt wird und z.B. mit den ebenfalls kostenlosen Zeos-Komponenten und der ebenfalls kostenlosen Personalversion von IbExpert sehr leicht zu handeln ist.

Zitat:

Zitat von mm1256 (Beitrag 1289424)
Abgesehen davon verwende ich niemals TDBRichEdit sondern immer TRichEdit mit LoadFromStream bzw. SaveToStream. Damit weiß man(n) was man hat und tut :)

TDBRichEdit macht intern auch nichts anderes als via Stream aus dem zugewiesenen Tabellenfeld zu lesen bzw. in dieses Feld hineinzuschreiben.

mm1256 11. Feb 2015 09:51

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Zitat:

Zitat von Perlsau (Beitrag 1289461)

Zitat:

Zitat von mm1256 (Beitrag 1289424)
Abgesehen davon verwende ich niemals TDBRichEdit sondern immer TRichEdit mit LoadFromStream bzw. SaveToStream. Damit weiß man(n) was man hat und tut :)

TDBRichEdit macht intern auch nichts anderes als via Stream aus dem zugewiesenen Tabellenfeld zu lesen bzw. in dieses Feld hineinzuschreiben.

UpdateData verwendet die TField.AsString-Methode der TDataSource, und das ist eben nicht das selbe, als TBlobField.LoadFromStream oder TBlobField.SaveToStream. Probier's mal mit unterschiedlichen DBMS und unterschiedlichen Feldtypen aus, du wirst dich wundern...und hast so nebenbei womöglich die für den TE so wichtige Erklärung.

cramer 11. Feb 2015 13:21

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Ich kann Perlsau nur zustimmen.

Habe vor langer Zeit von BDE auf InterBase und dann auf FireBird umgestellt, nie gereut und nie zurückgeschaut.

Für die Bearbeitung der RTF, die in der Datenbank gespeichert werden, nutze ich wpTools, kostet zwar etwas aber andere Programmierer wollen ja auch leben und es geht damit fast alles, was das Anwender-Herz begehrt.

Spell, Kopf- Fußzeilen, Tabellen, Grafiken, Platzhalter für Mailmerge usw.
Die Logos speichere ich allerdings nicht in der DB sondern nur den Link auf die Datei mit dem jeweiligen Logo.

beanbear6 12. Mär 2015 16:13

AW: Format eines DBRichEdit(Textes) speichern und laden
 
Hi an alle...
vielen Dank für Eure Tips! Ich werd nun mal von dieser
(ich mag sie ja selber nicht) BDE weggehn und mit FireBird
versuchen...
Vielen Dank nochmal an alle Helfer! :-)
Gruß beanbear


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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