Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi JvRichEdit in MSSQL-DB speichern und laden (https://www.delphipraxis.net/181809-jvrichedit-mssql-db-speichern-und-laden.html)

Captnemo 10. Sep 2014 11:51

JvRichEdit in MSSQL-DB speichern und laden
 
Hallo,

ich möchte einen RichText in einer DB speichern und auch wieder laden.
Als Control nehme ich ein JvRichEdit und als DB MSSQL über ADO.
Die eigentlichen Daten befinden sich in einer Klasse, die das speichern und laden aus der DB übernimmt.

Die Übertragung an die Klasse mache ich so:

Delphi-Quellcode:
    SetRichText(edt_arbeiten, termin.Arbeiten); //Richedit -> Klasse
    termin.Arbeiten:=GetRichText(edt_arbeiten); //Klasse -> Richedit
Und hier die entsprechenden Funktion und Procedure

Delphi-Quellcode:
function GetRichText(RichEdit: TJvRichEdit): string;
var
  Stream: TMemoryStream;
  sl: TStringList;
begin
  Stream:=TMemoryStream.Create;
  sl:=TStringList.Create;
  RichEdit.Lines.SaveToStream(Stream);
  Stream.Position:=0;
  sl.LoadFromStream(Stream);
  Result:=sl.Text;
  Stream.Free;
  sl.Free;
end;

procedure SetRichText(RichEdit: TJvRichEdit; s: string);
var
  Stream: TMemoryStream;
  sl: TStringList;
begin
  Stream:=TMemoryStream.Create;
  sl:=TStringList.Create;
  sl.Text:=s;
  sl.SaveToStream(Stream);
  Stream.Position:=0;
  RichEdit.Lines.LoadFromStream(Stream);
  Stream.Free;
  sl.Free;
end;
Als DB-Feld habe ich ein varchar(MAX).

Wenn ich jetzt in mein RichEdit ein bischen "blablabla" mit ein paar Formatierungsangeben schreibe,
diese dann speichere und wieder lade, dann steht im RichEdit das hier drin:

Code:
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
{\colortbl ;\red0\green0\blue255;\red255\green255\blue0;}
\viewkind4\uc1\pard\cf1\highlight2\b\f0\fs16 blablabla\cf0\highlight0\b0\par
}
Irgendwie hab ich mich verrannt und find den Fehler nicht.

arnof 10. Sep 2014 12:13

AW: JvRichEdit in MSSQL-DB speichern und laden
 
Code:
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
{\colortbl ;\red0\green0\blue255;\red255\green255\blue0;}
\viewkind4\uc1\pard\cf1\highlight2\b\f0\fs16 blablabla\cf0\highlight0\b0\par
}
das ist was im RTF in echt steht, d.h. er erkennt bei Dir die Formatierung nicht und stellt den Text "Plain" dar.

Blöde Fragen, warum machst Du nicht einfach:

RichEdit.Lines.Text:=s;

Über einen Stream gehe ich nur, wenn ich den echten Text haben möchte (ohne RTF-Formatierung) und dort mit Plaintext True und False spiele

Captnemo 10. Sep 2014 12:18

AW: JvRichEdit in MSSQL-DB speichern und laden
 
Ja, is klar ;-)

Nur warum steht es jetzt so da drin, und nicht mehr formatiert?

Ich hab mittlerweile rausbekommen, dass es wohl durch das speichern in der DB passiert.

Wenn ich nämlich das hier mache:
Delphi-Quellcode:
procedure Tfrm_termin.btn3Click(Sender: TObject);
begin
  termin.Arbeiten:=GetRichText(edt_arbeiten);
  edt_arbeiten.Clear;
  SetRichText(edt_arbeiten, termin.Arbeiten);
end;
bleibt der Inhalt wunderbar formatiert erhalten.

Bleibt die Frage, was beim Speichern in einem varchar(MAX) verloren geht und warum? Bzw. warum das RichEdit beim laden nicht mehr, dass es sich um RTF handelt?

Captnemo 10. Sep 2014 13:26

AW: JvRichEdit in MSSQL-DB speichern und laden
 
Das Thema hat sich erledigt.
So wie ich es oben gemacht habe, funktioniert es einwandfrei.

(So wie arnof es vorgeschlagen hat bestimmt auch)

Mein Fehler hat sich eingeschlichen, während ich so rumprobiert habe. An irgendeiner Stelle hatte ich versehentlich nochmal den Richtext falsch zugewiesen. Nachdem ich diese Stelle gefunden hatte, lief es.


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