Announcement

Collapse
No announcement yet.

RTF in Datenbank speichern

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

  • RTF in Datenbank speichern

    Hallo,

    Wie kann ich ein Text im Rich Text Format (RTF) in eine MySQL Datenbank speichern. Wenn ich den TMemoryStream (umgeandelt in ein String) mittels TQuery speichern will, bekomme ich einen EDatabaseError.

    Vielleicht liegt es am ANSI-Code oder ähnlich? Habe keine Ahnung mehr. Hilfe ist willkommen.

  • #2
    Hallo,

    das folgende Beispielprojekt demonstriert verschiedene Alternativen, wie BLOb-Daten (RTF) über TQuery verwaltet werden können:
    <pre>
    { ************************************************** **************
    Source File Name : BLOBQueryMainForm.PAS
    Typ : Formular-Unit
    Autor : Andreas Kosch
    Erstellt am : 03.08.97
    Compiler : Delphi 3.0
    Betriebssystem : Windows 95
    Beschreibung : BLOB-Feld einer Paradox-Tabelle via TQuery
    updaten. In diesem Fall werden drei direkte
    Updates via SQL vorgestellt:
    - AsMemo
    - SetBlobData
    - LoadFromFile
    Revisionen :
    ************************************************** ************** }

    unit BLOBQuery2MainForm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Db, StdCtrls, ComCtrls, DBCtrls, Mask, ExtCtrls, DBTables;

    type
    TFormMain = class(TForm)
    QueryBLOB: TQuery;
    Table1: TTable;
    DataSource1: TDataSource;
    RichEdit1: TRichEdit;
    Table1Hinweis: TStringField;
    Table1RTFMemo: TBlobField;
    QueryBLOBHinweis: TStringField;
    QueryBLOBRTFMemo: TBlobField;
    Splitter1: TSplitter;
    Panel1: TPanel;
    ButtonAsMemo: TButton;
    Panel2: TPanel;
    DBRichEdit1: TDBRichEdit;
    Panel3: TPanel;
    DBNavigator1: TDBNavigator;
    DBEdit1: TDBEdit;
    ButtonSetBlobData: TButton;
    ButtonLoadFromFile: TButton;
    procedure ButtonAsMemoClick(Sender: TObject);
    procedure ButtonSetBlobDataClick(Sender: TObject);
    procedure ButtonLoadFromFileClick(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    FormMain: TFormMain;

    implementation

    {$R *.DFM}

    (* QueryBLOB.SQL = UPDATE rtfmemo
    SET RTFMemo = :mRTFMemo
    WHERE Hinweis = :sHinweis

    QueryBLOB.Params = mRTFMemo : BLOB
    sHinweis : String

    Alle drei Varianten verwenden die gleiche QueryBLOB-
    Konfiguration. *)

    procedure TFormMain.ButtonAsMemoClick(Sender: TObject);
    begin
    with QueryBLOB do
    begin
    // Update-Variable via AsMemo-Zuweisung füllen
    Params[0].AsMemo := RichEdit1.Lines.Text;
    // Primärschlüssel des ausgewählten Datensatzes übergeben
    Params[1].Value := Table1Hinweis.AsString;
    ExecSQL;
    end;
    // zur Kontrolle die Anzeige via TTable aktualisieren
    Table1.Refresh;
    end;

    procedure TFormMain.ButtonSetBlobDataClick(Sender: TObject);
    var
    pBlobText : PChar;
    begin
    with QueryBLOB do
    begin
    // Old-Fashion-Way über einen PChar
    pBlobText := RichEdit1.Lines.GetText;
    Params[0].SetBlobData(pBlobText, Length(pBlobText));
    // Primärschlüssel des ausgewählten Datensatzes übergeben
    Params[1].Value := Table1Hinweis.AsString;
    ExecSQL;
    end;
    Table1.Refresh;
    end;

    procedure TFormMain.ButtonLoadFromFileClick(Sender: TObject);
    const
    sDOCName = 'C:\ablage\d3fs.htm';
    begin
    with QueryBLOB do
    begin
    // direkt aus einer externen Datei importieren
    Params[0].LoadFromFile(sDOCName, ftBlob);
    // Primärschlüssel des ausgewählten Datensatzes übergeben
    Params[1].Value := Table1Hinweis.AsString;
    ExecSQL
    end;
    Table1.Refresh;
    end;

    end.
    </PRE&gt

    Comment

    Working...
    X