![]() |
Datenbank: Firebird • Version: 3 • Zugriff über: IBX
RichEdit aus DB (Blob) einlesen
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:
Mein Versuch des Einlesens sieht folgendermaßen aus:
...
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 ...
Delphi-Quellcode:
1. Beim Compilieren bekomme ich die Fehlermeldung:
...
var RichEditStream : TStringStream; RichEditStream := Query.CreateBlobStream(Query.Fields[4],bmRead); RichEditStream.Position := 0; frmMain.AdvRichEditorRTFIO.RichEditor.LoadFromStream(RichEditStream); RichEditStream.Free; ... "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 |
AW: RichEdit aus DB (Blob) einlesen
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:
Zum Laden:
...
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 ... 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. |
AW: RichEdit aus DB (Blob) einlesen
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr. |
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