Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi RTF-Dokument in DB, raus kommt Müll (https://www.delphipraxis.net/91420-rtf-dokument-db-raus-kommt-muell.html)

emsländer 4. Mai 2007 16:53

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:
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;
Hier nun der Code zum Lesen: (Wptext ist wprichtext von den WPTOOLS)
Delphi-Quellcode:
    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;
Gruss

EL

mkinzler 4. Mai 2007 16:59

Re: RTF-Dokument in DB, raus kommt Müll
 
hast du dir mal angeschaut, ob die daten richtig in der DB stehen?

DGL-luke 4. Mai 2007 17:01

Re: RTF-Dokument in DB, raus kommt Müll
 
bist du sicher, dass in inhalt die formatierungen noch drin sind?

Jelly 4. Mai 2007 20:09

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 ;

alzaimar 4. Mai 2007 22:01

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.

emsländer 5. Mai 2007 08:53

Re: RTF-Dokument in DB, raus kommt Müll
 
Zitat:

Zitat von alzaimar
Wieso nimmst Du als Datentyp 'IMAGE'?? Also RTF ist eindeutig ein 'TEXT' bzw. 'NTEXT', oder :zwinker: ? Hat bei mir funktioniert.

An anderer Stelle wurde mir hier einmal Typ Image empfohlen.

Gruss

EL

Alter Mann 5. Mai 2007 09:30

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:
   ADODS.FieldByName('dokument').Assign(RichEdit.Lines);
und zum lesen, so:

Delphi-Quellcode:
  RichEdit.Lines.Assign(ADODS.FieldByName('dokument'));

Jelly 5. Mai 2007 09:36

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?

emsländer 5. Mai 2007 09:53

Re: RTF-Dokument in DB, raus kommt Müll
 
Zitat:

Zitat von Alter Mann
Hallo emsländer,

TEXT ist schon besser. und mit einen ADODataset sieht es dann zum Speichern so aus:

Delphi-Quellcode:
   ADODS.FieldByName('dokument').Assign(RichEdit.Lines);
und zum lesen, so:

Delphi-Quellcode:
  RichEdit.Lines.Assign(ADODS.FieldByName('dokument'));

Hoi alter Mann,

text kannste knicken. Da bei diesem, doch recht komplexen Text, viele üble Zeichen bei sind, knallt das an der Stelle.

Gruss

EL

emsländer 5. Mai 2007 10:40

Re: RTF-Dokument in DB, raus kommt Müll
 
Hallo zusammen,

ich glaube, das ich das ein wenig eingrenzen konnte:

Delphi-Quellcode:
wptext.SaveToFile(sAppdir+'\danach.rtf'); => hier ist das Dokument noch ok.
Jetzt möchte ich das Zeug in einen string speichern, um das speichern in der Datenbank vorzubereiten:
Delphi-Quellcode:
_stmp := wptext.text
Wenn ich diesen Variableninhalt nun in eine Datei speichere,
Delphi-Quellcode:
fs := tfilestream.create(sAppDir+'\tmp.rtf', fmcreate);
fs.Write(_stmp[1],Length(_stmp));
fs.free;
speichere, hab ich da Müll stehen.

Gruss

EL


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr.
Seite 1 von 2  1 2      

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