Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [Solved]Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie? (https://www.delphipraxis.net/186657-%5Bsolved%5Ddatasnap-rtf-text-fly-plaintext-konvertieren-wie.html)

DeddyH 20. Sep 2015 12:57

Datenbank: Firebird • Version: 2.5 • Zugriff über: Datasnap

[Solved]Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Es ist mir ein wenig peinlich, aber ich kriege es nicht gebacken: ich habe hier eine Firebird-Tabelle, die in einem BLOB-Feld RichText enthält. Die Datenbank importiere ich per Datasnap auf ein Android-Smartphone, das klappt auch gut. Da ich aber auf dem Gerät mit RichText wenig anfangen kann, würde ich den BLOB-Inhalt eben gern im Klartext haben. Wie gehe ich da nun vor, wenn ich diese Arbeit vom Datasnap-Server erledigen lassen möchte? Die Originaldaten sollen auf dem PC natürlich RichText bleiben, also dachte ich in Richtung berechnetes Feld, nur wie?
Ich bin für jeden Tipp dankbar, Performance ist übrigens eher zweitrangig, da es sich um eher geringe Datenmengen handelt und der Import selbst auch nur sporadisch ausgeführt werden wird, da darf das ruhig ein paar Sekunden dauern.

P.S.: Nicht, dass das falsch verstanden wird: es geht mir nicht um RichEdit und dessen PlainText-Property, sondern darum, dass mir der Server per REST ein (in der Tabelle nicht existierendes) Feld mit dem Klartext übermittelt.

nahpets 20. Sep 2015 14:13

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Und was spricht dagegen, den von Dir beschriebenen Weg über das RichEdit zu gehen?

Musste vor Jahren mal "on the fly" aus Datenbankdaten Grafiken generieren, die dann per Webserver an die anfordernden Browser geliefert wurden. Die TeeChart-Komponente war dazu hervorragend geeignet.

Also wurde zur Laufzeit in der ISAPI-DLL ein Formular erstellt, das TeeChart mit Daten befüllt, die entstandene Grafik als JPeg per Stream ausgeliefert, Formular freigegeben.

Funktionierte über Jahre hinweg problemlos, auch dort galt: Die Grafiken wurden ab und an mal benötigt, auf Tempo kam es nicht an.

Würde bei Deiner Aufgabenstellung auch so in der Art vorgehen und erst wenns nicht funktioniert nach 'nem komplizierteren Weg suchen.

Das TeeChart verweigerte ohne Formular seine Arbeit, wenn das RichEdit ohne Formular auskommt, müsste das doch eigentlich relativ einfach zu implementieren sein.

MS schlägt für C# diesen Weg vor: https://msdn.microsoft.com/de-de/library/cc488002.aspx

Ansonsten mit 'ner Word-Fernsteuerung im Hintergrund? Escheint mir dann aber deutlich aufwändiger.

Haben die eventuell eine Ideenvorlage für Dich? http://stackoverflow.com/questions/3...rt-rtf-to-text

ungetestet würd' ich das so in der Art versuchen:
Delphi-Quellcode:
function RTFToText(s : String) : String;
var
          re : TRichEdit;
begin
  re := TRichEdit.Create(Nil);
  re.WordWrap  := false;
  re.Lines.Text := s;
  re.PlainText := true;
  Result       := re.Text;
  re.Free;
end;
Aufruf:
Delphi-Quellcode:
AusgabevariabelAttributOderWieAuchImmer := RTFToText(Blobfeld.AsString);

DeddyH 20. Sep 2015 14:19

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Danke, aber wie ich im Postscriptum schon schrieb, geht es nicht um die Konvertierung (wenn man ein RichEdit mit CreateParented(HWND_MESSAGE) erzeugt, kommt man auch ohne Formular aus), sondern darum, dass es mir nicht gelingt, ein berechnetes Feld mit dem Klartext liefern zu lassen. Das kann eigentlich nur eine simple Property des Datasets sein, die ich übersehe, aber das nervt ungemein.

Uwe Raabe 20. Sep 2015 14:24

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Zitat:

Zitat von DeddyH (Beitrag 1316387)
sondern darum, dass es mir nicht gelingt, ein berechnetes Feld mit dem Klartext liefern zu lassen. Das kann eigentlich nur eine simple Property des Datasets sein, die ich übersehe

Wo liegt denn nun genau das Problem? Bekommst du kein berechnetes Feld in das DataSet oder kannst du dessen Inhalt nicht setzen?

Zeig doch mal, was du schon hast.

DeddyH 20. Sep 2015 14:53

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Ich habe in meinem Datasnap-Server dem entsprechenden Dataset mit dem Feldeditor ein Feld hinzugefügt (Name PlainText, BlobType ftMemo, FieldKind fkInternalCalc). Im OnCalcFields des Dataset steht momentan dieser Code:
Delphi-Quellcode:
procedure TServerMethods1.TexteTableCalcFields(DataSet: TDataSet);
var
  RE: TRichEdit;
  Stream, PlainStream: TStream;
begin
  RE := TRichEdit.CreateParented(HWND_MESSAGE);
  try
    Stream := DataSet.CreateBlobStream(DataSet.FieldByName('Text'),
      TBlobStreamMode.bmRead);
    try
      Stream.Seek(0, TSeekOrigin.soBeginning);
      RE.PlainText := false;
      RE.Lines.LoadFromStream(Stream);
      RE.PlainText := true;
      PlainStream := TStringStream.Create;
      try
        RE.Lines.SaveToStream(PlainStream);
        PlainStream.Seek(0, TSeekOrigin.soBeginning);
        (DataSet.FieldByName('PlainText') as TBlobField)
          .LoadFromStream(PlainStream);
      finally
        PlainStream.Free;
      end;
    finally
      Stream.Free;
    end;
  finally
    RE.Free;
  end;
end;
Damit ernte ich bei der Ausführung "Datenmenge weder im Editier- noch im Einfügemodus". Füge ich ein Dataset.Edit ein, enthält es keine Daten.

Sir Rufo 20. Sep 2015 15:39

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Irgendwie schwebt mir im Kopf herum, dass ein
Delphi-Quellcode:
TBlobField
nicht berechnet werden kann.

DeddyH 20. Sep 2015 15:57

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Das wär aber ausgesprochen blöd, dann müsste ich mir was anderes überlegen.

Dejan Vu 20. Sep 2015 16:22

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Wie wäre es mit einem TStringField?

DeddyH 20. Sep 2015 16:34

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Damit geht es, nach kurzer Recherche sind das maximal 8000 Zeichen, das sollte aber genügen.

mkinzler 20. Sep 2015 17:08

AW: Datasnap: RTF-Text "on the fly" in PlainText konvertieren, wie?
 
Ein Textblobfeld sollte sich, wenn es kleiner 32KB ist als Textfeld ansprechen lassen.


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

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-2025 by Thomas Breitkreuz