lzRichEdit in MySQL speichern [gelöst]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
AlterMann
Beiträge: 233
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

lzRichEdit in MySQL speichern [gelöst]

Beitrag von AlterMann »

Hallo

Ich müßte formatierten Text (fett, evtl. kursiv, Zeilenumbrüche) in eine MySQL-DB speichern.

Ich habe im Netz dazu dieses Codestück gefunden:

Code: Alles auswählen

function TForm20.RichText(re: TlzRichEdit): String;
var
   ss: TStringStream;
begin
   ss := TStringStream.Create ('');
   try
     re.Lines.SaveToStream(ss);
     Result := ss.DataString;
   finally
     ss.Free;
   end;
end;
 


Wenn ich diesen Text in ein Textfeld speichere und anschließend wieder einlese und dem lzRichEdit.Text übergebe sind zwar die Zeilenumbrüche noch da, aber die restlichen Formatierungen (fett u. dgl.) sind weg.

Kann mir jemand sagen was ich falsch mache?

Gute Nacht
Christian
Zuletzt geändert von AlterMann am Sa 10. Okt 2015, 10:37, insgesamt 1-mal geändert.
Früher war alles besser. Und aus Holz!

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: lzRichEdit in MySQL speichern

Beitrag von wp_xyz »

Hab das lzRichEdit nicht auf der Maschine, aber das Property Lines scheint mir eher für die Übergabe des unformatierten Texts zu sein. Gibt es vielleicht auch eine "RichText"-Eigenschaft, o.ä, der du den String zuweisen kannst. Oder lies den String über LoadFromStream ein, wobei der Stream zuvor das DB-Feld ausgelesen hat (Beliebter Fehler: nach dem Einlesen des DB-Feldes den Stream wieder an den Anfang zurücksetzen bevor er ans RichEdit übertragen wird).
Zuletzt geändert von wp_xyz am Sa 10. Okt 2015, 00:24, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: lzRichEdit in MySQL speichern

Beitrag von theo »

AlterMann hat geschrieben:Kann mir jemand sagen was ich falsch mache?


Warum machst du
re.Lines.SaveToStream(ss);
und nicht
re.SaveToStream(ss);
:?:

Und warum machst du später nicht das umgekehrte, nämlich
re.LoadFromStream(ss);
:?:

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: lzRichEdit in MySQL speichern

Beitrag von hde »

wenn überhaupt, dann: re.SaveRichText(Dest: TStream):Boolean
aber damit ist es noch nicht in mySQL
( aber DBRichEdit gibt's in Delphi )

AlterMann
Beiträge: 233
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: lzRichEdit in MySQL speichern

Beitrag von AlterMann »

theo hat geschrieben:Warum machst du
re.Lines.SaveToStream(ss);
und nicht
re.SaveToStream(ss);


Das war der entscheidende Hinweis :wink:

theo hat geschrieben:Und warum machst du später nicht das umgekehrte, nämlich
re.LoadFromStream(ss);


Das hatte ich versucht (zwar re.Lines.LoadFromStream(ss)), aber da ja das falsche gespeichert wurde, nützte das natürlich nix.

Außerdem kam auch noch

wp_xyz hat geschrieben:(Beliebter Fehler: nach dem Einlesen des DB-Feldes den Stream wieder an den Anfang zurücksetzen bevor er ans RichEdit übertragen wird)


zum tragen :mrgreen:

So sieht das funktionierende Ding jetzt aus:

Code: Alles auswählen

function TForm20.RichText(re: TlzRichEdit): String;
var
   ss: TStringStream;
begin
   ss := TStringStream.Create ('');
   try
     re.SaveToStream(ss);
     Result := ss.DataString;
   finally
     ss.Free;
   end;
end;
 
procedure TForm20.Button2Click(Sender: TObject);
 
begin
  SQLQuery1.SQL.Text := 'INSERT INTO texte (titel, text) VALUES (:ttl,:txt)';
  SQLQuery1.Params.Clear;
  SQLQuery1.Params.CreateParam(ftString,'ttl', ptInput);
  SQLQuery1.Params.CreateParam(ftString,'txt', ptInput);
  SQLQuery1.ParamByName('ttl').AsString:= 'test';
  SQLQuery1.ParamByName('txt').AsString := Richtext(LZRichEdit1);
  SQLQuery1.ExecSQL; SQLTransaction1.Commit;
end;
 
procedure TForm20.Button3Click(Sender: TObject);
 
var ss: TStringStream;
 
begin
 SQLQuery1.SQL.Text := 'SELECT text from texte where titel = '+#39+'test'+#39;
 SQLQuery1.Open;
 ss := TStringStream.Create ('');
 try
   ss.WriteString(SQLQuery1.Fields[0].AsString);
   ss.Position:=0;
   lzRichEdit1.LoadFromStream(ss);
 finally
   ss.Free;
 end;
 SQLQuery1.Close;
end;
 


Vielen Dank euch allen
Christian
Früher war alles besser. Und aus Holz!

Antworten