Announcement

Collapse
No announcement yet.

Richedit in SQL-DB speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Richedit in SQL-DB speichern

    Hallo,<BR>
    Wie kann ich einen Richedit formatierten Text ordentlich in meine SQL-DB speichern und auch wieder laden ? Das Feld habe ich deklariert als Binary.<BR>
    <BR>
    Danke im vorraus

  • #2
    Hallo,

    &gt;Das Feld habe ich deklariert als Binary.

    das ist nicht notwendig, denn hinter RTF verbirgt sich eine ASCII-Codierung der formatierten Zeichen. Der folgende kurze Test demonstriert dies:

    1. Wordpad starten und dort den Satz "Das ist ein Test." eintippen und das Wort Test fett und rot hervorheben. <br>
    2. Das Ganze als TEST.RTF speichern <br>
    3. Diese Datei mit Notepad (Editor) öffnen, der folgende Inhalt ist zu sehen:
    <pre>
    {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl {\f0\fswiss\fcharset0 Arial;}}
    {\colortbl ;\red255\green0\blue0;}
    {\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\f0\fs20 Das ist ein \cf1\b Test\cf0\b0 .\par
    \par
    }
    </pre>
    Der RTF-Text kann also in einer TEXT-Spalte der Tabelle gespeichert und später über LoadFromStream eingelesen werden

    Comment


    • #3
      Hallo Andreas,
      das Richedit ein ASCII Format ist, ist mir schon klar. Aber wie bekomme ich diese Formatierung in die DB ? Wenn ich einfach Richedit.Text auslese, bekomme ich einen unformatierten Text. Der Formatierte Text soll nämlich per Quickreport-RichText wieder ausgegeben werden.<BR>
      Gruß<BR>
      Sasch

      Comment


      • #4
        Hallo,

        &gt;Aber wie bekomme ich diese Formatierung in die DB ?

        das folgende Beispiel verdeutlicht dies:

        <b>Schritt 1:</b> Tabelle <i>RTFTBL</i> in der MS SQL Server-Datenbank <i>tempdb</i>
        <pre>
        USE tempdb
        GO
        CREATE TABLE RTFTBL
        (
        recid INTEGER NOT NULL IDENTITY PRIMARY KEY,
        rtf TEXT,
        )
        GO
        </pre>
        <b>Schritt 2:</b> TRichEdit-Inhalt in die Datenbank speichern
        <pre>
        <b>procedure</b> TForm1.ButtonSaveClick(Sender: TObject);
        <b>var</b>
        aMS : TMemoryStream;
        <b>begin</b>
        aMS := TMemoryStream.Create;
        RichEdit1.PlainText := False;
        RichEdit1.Lines.SaveToStream(aMS);
        ADOCommand1.Parameters[0].LoadFromStream(aMS, ftMemo);
        ADOCommand1.Execute;
        <b>end</b>;
        </pre>
        Konfiguration im Objektinspektor:
        <pre>
        object ADOCommand1: TADOCommand
        CommandText = 'INSERT INTO RTFTBL (rtf) VALUES (:rtf)'
        Connection = ADOConnection1
        ExecuteOptions = [eoExecuteNoRecords]
        Parameters = <
        item
        Name = 'rtf'
        Attributes = [paNullable, paLong]
        DataType = ftString
        NumericScale = 255
        Precision = 255
        Size = 2147483647
        Value = Null
        end>
        Left = 88
        Top = 296
        end
        </pre>
        <b>Schritt 3:</b> TRichEdit-Inhalt aus der Datenbank einlesen
        <pre>
        <b>procedure</b> TForm1.ButtonLoadClick(Sender: TObject);
        <b>var</b>
        aMS : TMemoryStream;
        <b>begin</b>
        ADODataSet1.Active := False;
        ADODataSet1.Active := True;
        aMS := TMemoryStream.Create;
        ADODataSet1rtf.SaveToStream(aMS);
        aMS.Position := 0;
        RichEdit2.PlainText := False;
        RichEdit2.Lines.LoadFromStream(aMS);
        <b>end</b>;
        </pre>
        Konfiguration im Objektinspektor:
        <pre>
        object ADODataSet1: TADODataSet
        Connection = ADOConnection1
        CommandText = 'select recid, rtf from RTFTBL'
        Parameters = <>
        Left = 224
        Top = 296
        object ADODataSet1recid: TAutoIncField
        FieldName = 'recid'
        ReadOnly = True
        end
        object ADODataSet1rtf: TMemoField
        FieldName = 'rtf'
        BlobType = ftMemo
        end
        end
        </pre&gt

        Comment


        • #5
          Hallo Andreas,<BR>
          danke erst mal für deine Umfangreiche Hilfe.<BR>
          Ich möchte aber lieber Dynamisch mit denm TMemoryStream arbeiten. ich habe mir da eine Funktion geschrieben wo mir der Syntax richtig erscheint, das RichEdit aber keine Daten anzeigt. Wo ist der fehler ?<BR>
          <BR>
          <PRE>
          var Text : String;
          Len : Integer;
          begin
          Text := 'Hello World';
          Len := Length(Text);

          Stream.WriteBuffer(Len,SizeOf(Integer));
          Stream.WriteBuffer(Text[1],Len);

          RichEdit.Lines.LoadFromStream(Stream);
          end;
          </PRE&gt

          Comment


          • #6
            Hallo,

            &gt;Wo ist der fehler ?

            der Stream muss nach dem Schreiben und vor dem Einlesen durch TRichtEdit wieder auf die Position 0 gesetzt werden (ansonsten findet TRichEdit nichts zum Einlesen vor)

            Comment

            Working...
            X