![]() |
Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO
RTF-Dokument in DB, raus kommt Müll
Moin,
hab da echt ein dickes Problem: Ein RTF-Dokument, welches ich in einer DB (Field ist Typ Image), speichere, kommt als Müll wieder heraus (bzw. alle Formatierungen sind weg) Der Quelltext zum Speichern ist hier: (inhalt enthält wprichtext.text, also das rtf)
Delphi-Quellcode:
Hier nun der Code zum Lesen: (Wptext ist wprichtext von den WPTOOLS)
function Tfrm_dokumente.neuer_datensatz(zu_akte, _name, inhalt : string) : integer;
var _stmp : string; _query : TAdoquery; store : boolean; begin result := 0; _query := TADOquery.Create(nil); with _query do begin connection := AktenManager.ADOConnFDD; try _stmp := 'insert into dokumente (dokument) values ('''+inhalt+''')'; sql.Add(_stmp); result := ExecSQL; SQL.Text := 'Select @@Identity'; Active := True; result := Fields[0].AsInteger; sql.Clear; _stmp := 'insert into dokumentenliste (zu_akte,name,dokument_nr) values ('+zu_akte+','''+_name+''','+inttostr(result)+')'; sql.Add(_stmp); result := ExecSQL; except result := 99; end; end; freeandnil(_query); end;
Delphi-Quellcode:
Gruss
try
_stmp := 'select dokument from finanzdesk.dbo.dokumente where lfdnr ='+dok_nr; _query.sql.Text := _stmp; _query.open; erg64 := _query.FieldByName('dokument').Value; _query.close; erg := base64decode(erg64); wptext.Text := erg; wptext.SaveToFile('text.rtf'); // Dieses RTF ist zerhackt - die Formatierung ist weg except // end; end; EL |
Re: RTF-Dokument in DB, raus kommt Müll
hast du dir mal angeschaut, ob die daten richtig in der DB stehen?
|
Re: RTF-Dokument in DB, raus kommt Müll
bist du sicher, dass in inhalt die formatierungen noch drin sind?
|
Re: RTF-Dokument in DB, raus kommt Müll
Ich nutze diese beiden Funktionen, auch in Verbindung mit einem MSSQL Server:
Delphi-Quellcode:
function TDBRTFReport.LoadFromBlob(const AField: TField; const Stream: TStream): boolean;
var ResultStr: string; PResultStr: PChar; begin Result := false; if (Assigned(AField)) and (Assigned(Stream)) then begin try ResultStr := AField.Value; PResultStr := PChar(ResultStr); Stream.Write(PResultStr^, Length(ResultStr)); Stream.Seek(0,0); Result := true; except end; end; end; function TDBRTFReport.SaveToBlob(const Stream: TStream; const AField: TField): boolean; var FieldStr: string; PFieldStr: PChar; begin Result := false; if (Assigned(AField)) and (Assigned(Stream)) then begin try Stream.Seek(0,0); SetLength(FieldStr, Stream.Size); PFieldStr := PChar(FieldStr); Stream.Read(PFieldStr^, Stream.Size); AField.Value := FieldStr; Result := true; except end; end; end ; |
Re: RTF-Dokument in DB, raus kommt Müll
Wieso nimmst Du als Datentyp 'IMAGE'?? Also RTF ist eindeutig ein 'TEXT' bzw. 'NTEXT', oder :zwinker: ? Hat bei mir funktioniert.
|
Re: RTF-Dokument in DB, raus kommt Müll
Zitat:
Gruss EL |
Re: RTF-Dokument in DB, raus kommt Müll
Hallo emsländer,
TEXT ist schon besser. und mit einen ADODataset sieht es dann zum Speichern so aus:
Delphi-Quellcode:
und zum lesen, so:
ADODS.FieldByName('dokument').Assign(RichEdit.Lines);
Delphi-Quellcode:
RichEdit.Lines.Assign(ADODS.FieldByName('dokument'));
|
Re: RTF-Dokument in DB, raus kommt Müll
Meine Methode oben funktioniert einwanfrei mit dem Feldtype image und den ADO Komponenten. Es vermeidet den Weg über ein TRichEdit, das die ein RTF Dokument zerstückeln kann.
@Emsländer: hast du das mit den Streams denn schon ausprobiert? |
Re: RTF-Dokument in DB, raus kommt Müll
Zitat:
text kannste knicken. Da bei diesem, doch recht komplexen Text, viele üble Zeichen bei sind, knallt das an der Stelle. Gruss EL |
Re: RTF-Dokument in DB, raus kommt Müll
Hallo zusammen,
ich glaube, das ich das ein wenig eingrenzen konnte:
Delphi-Quellcode:
Jetzt möchte ich das Zeug in einen string speichern, um das speichern in der Datenbank vorzubereiten:
wptext.SaveToFile(sAppdir+'\danach.rtf'); => hier ist das Dokument noch ok.
Delphi-Quellcode:
Wenn ich diesen Variableninhalt nun in eine Datei speichere,
_stmp := wptext.text
Delphi-Quellcode:
speichere, hab ich da Müll stehen.
fs := tfilestream.create(sAppDir+'\tmp.rtf', fmcreate);
fs.Write(_stmp[1],Length(_stmp)); fs.free; Gruss EL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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