AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi RichEdit aus DB (Blob) einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit aus DB (Blob) einlesen

Ein Thema von Echtet · begonnen am 23. Feb 2022 · letzter Beitrag vom 24. Feb 2022
Antwort Antwort
Echtet

Registriert seit: 5. Jan 2004
Ort: Dortmund
21 Beiträge
 
Delphi XE3 Professional
 
#1

RichEdit aus DB (Blob) einlesen

  Alt 23. Feb 2022, 08:50
Datenbank: Firebird • Version: 3 • Zugriff über: IBX
Hallo Zusammen,

Ich speichere mit Formatierungen versehenene Texte eines RichEdit in einem Blob-Feld (Subtype:Text) über eine IBQuery in einer Firebird-DB ab. Leider gelingt mir das Einlesen nicht.
Folgendermaßen speichere ich ab (funktioniert):

Delphi-Quellcode:
...
var RichEditStream : TStringStream;
...
    if frmMain.AdvRichEditorBeschreibungNeu.Text.IsEmpty = False then
    begin
      RichEditStream := TStringStream.Create;
      RichEditStream.WriteString(frmMain.AdvRichEditorBeschreibungNeu.ContentAsRTF); //Dadurch bleibt der formatierte Text erhalten
      RichEditStream.Position := 0;
      Query.ParamByName('beschreibung').LoadFromStream(RichEditStream, ftBlob);
      RichEditStream.Free;
    end
...
Mein Versuch des Einlesens sieht folgendermaßen aus:
Delphi-Quellcode:
...
var RichEditStream : TStringStream;
  RichEditStream := Query.CreateBlobStream(Query.Fields[4],bmRead);
  RichEditStream.Position := 0;
  frmMain.AdvRichEditorRTFIO.RichEditor.LoadFromStream(RichEditStream);
  RichEditStream.Free;
...
1. Beim Compilieren bekomme ich die Fehlermeldung:
"E2010 Inkompatible Typen: 'TStringStream' und 'TStream'"

2. Also ändere ich testweise folgendermaßen ab:
var RichEditStream : TStream;
Compilieren gelingt, aber ich bekomme beim Einleseversuch die Exception:
"EReadError: Ungültiges Stream-Format"

Ich komme momentan einfach nicht weiter. Kann mir hier jemand helfen?

Viele Grüße und Danke!
Echtet
Thimo Echtermann
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.018 Beiträge
 
Delphi 2009 Professional
 
#2

AW: RichEdit aus DB (Blob) einlesen

  Alt 23. Feb 2022, 19:14
Zum Speichern:
Du nimmst in der Spaltendefinition und im Speichern-Code an, dass RTF ein ASCII-Format ist. Das solltest du nicht machen, denn der Inhalt von Dateien, die normalerweise nicht per Texteditor erstellt werden (niemand erstellt ein RTF von Grund auf mit Texteditor), geht dich eigentlich nichts an. Stell dir vor, der TStringStream schreibt dir eine BOM in den String - was machst du dann?
Normalerweise speichert man den Inhalt eines RichEdit so (zumindest beim Standard-RichEdit):
Delphi-Quellcode:
...
var RichEditStream : TMemoryStream;
...
    if not frmMain.AdvRichEditorBeschreibungNeu.Text.IsEmpty then
    begin
      RichEditStream := TMemoryStream.Create;
      try
        frmMain.AdvRichEditorBeschreibungNeu.Lines.SaveToStream(RichEditStream);
        RichEditStream.Position := 0;
        Query.ParamByName('beschreibung').LoadFromStream(RichEditStream, ftBlob);
      finally
        RichEditStream.Free;
      end;
    end
...
Zum Laden:
Auch beim Laden ist StringStream nicht gut, daher scheitert das: Die allermeisten Komponenten verwenden TStrings und TStream als Eigenschaften und Rückgabewerte, weil es dich als Verwender einfach nichts angeht, welcher Typ das genau ist.
Mach mal RichEditStream.SaveToFile und schau dir das Ergebnis in Word oder so an.
Spalten über die Nummer ansprechen ist auch oft keine gute Idee.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Echtet

Registriert seit: 5. Jan 2004
Ort: Dortmund
21 Beiträge
 
Delphi XE3 Professional
 
#3

AW: RichEdit aus DB (Blob) einlesen

  Alt 24. Feb 2022, 08:13
Hallo Janni,
Danke für die schnelle Antwort.
Ich werde jetzt erstmal einige Tests durchführen.

Ich finde es verwirrend und leider auch schlecht dokumentiert, wann man den jeweiligen Stream-Typen nimmt.
Viele Grüße,
Echtet
Thimo Echtermann
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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