AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Formatierten Text in PostgreSQL 9 speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Formatierten Text in PostgreSQL 9 speichern

Ein Thema von FBrust · begonnen am 20. Dez 2015 · letzter Beitrag vom 21. Dez 2015
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Formatierten Text in PostgreSQL 9 speichern

  Alt 20. Dez 2015, 17:20
Wenn ich die oben bereits verlinkte Dokumentation richtig verstehe, gibt zwei Blob-Typen:

The bytea type supports two external formats for input and output: PostgreSQL's historical "escape" format, and "hex" format. Both of these are always accepted on input. The output format depends on the configuration parameter bytea_output; the default is hex. (Note that the hex format was introduced in PostgreSQL 9.0; earlier versions and some tools don't understand it.)

The SQL standard defines a different binary string type, called BLOB or BINARY LARGE OBJECT. The input format is different from bytea, but the provided functions and operators are mostly the same.


Ich würde da jetzt mal herumexperimentieren (oder besser: nein, ich würde jetzt nicht, aber du könntest). Schau dir auch mal die beiden Tabellen in der verlinkten Doku an, da gibt es auch sog. Ausgabe-Parameter, die darüber entscheiden, was wie ausgegeben wird, insbesondere, wenn Zeichen zuvor maskiert wurden.

Gerade finde ich noch einen Hinweis in meinem PostGre-Handbuch: Um den Datentyp bytea zu verwenden, sollten Sie einfach die Methoden getBytes(), setBytes(),
getBinaryStream() oder setBinaryStream() anwenden.

Geändert von Perlsau (20. Dez 2015 um 17:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Formatierten Text in PostgreSQL 9 speichern

  Alt 20. Dez 2015, 17:41
Hallo,

der RTF-String ist schon abgeschnitten, wenn ich in innerhalb des Programms in einen Stream und wieder zurück wandele, ohne dass die Datenbank im Spiel ist.

Perlsau hat schon recht, ich muss da experimentieren und die richtige Kombination aus Stream-Konfiguration, Komponenteneinstellung und Wissen aus Forenbeiträgen austüfteln.

Jedenfalls danke für die Ideen, ich werde berichten.




Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Formatierten Text in PostgreSQL 9 speichern

  Alt 20. Dez 2015, 18:39
Sorry, aber das kann ich nun überhaupt nicht nachvollziehen. Im Anhang eine Zip-Datei mit einem Test-Projekt (D2009), das einwandfrei funktioniert: Die geladene RTF-Datei wird via TMemoryStream in ein zweites RichEdit kopiert, und zwar vollständig fehlerfrei:
Delphi-Quellcode:
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type
  TFormMain = class(TForm)
    Panel_Main: TPanel;
    Panel_Navi: TPanel;
    Rich_Quelle: TRichEdit;
    Rich_Ziel: TRichEdit;
    Btn_Close: TButton;
    OpenDlg: TOpenDialog;
    SaveDlg: TSaveDialog;
    Btn_Open: TButton;
    Btn_Save: TButton;
    Btn_Kopie: TButton;
    procedure Btn_CloseClick(Sender: TObject);
    procedure Btn_OpenClick(Sender: TObject);
    procedure Btn_SaveClick(Sender: TObject);
    procedure Btn_KopieClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

procedure TFormMain.Btn_CloseClick(Sender: TObject);
begin
  Close;
end;

procedure TFormMain.Btn_OpenClick(Sender: TObject);
begin
  If Not OpenDlg.Execute Then Exit;
  Rich_Quelle.Lines.LoadFromFile(OpenDlg.FileName);
end;

procedure TFormMain.Btn_SaveClick(Sender: TObject);
begin
  If Not SaveDlg.Execute Then Exit;
  Rich_Ziel.Lines.SaveToFile(SaveDlg.FileName);
end;

procedure TFormMain.Btn_KopieClick(Sender: TObject);
Var
  S : TMemoryStream;
begin
  S := TMemorystream.Create;
  Try
    Rich_Quelle.Lines.SaveToStream(S);
    S.Position := 0;
    Rich_Ziel.Lines.LoadFromStream(S);
  Finally
    S.Free;
  End;
end;

end.
Angehängte Dateien
Dateityp: zip RtfStreamTest.zip (5,8 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#4

AW: Formatierten Text in PostgreSQL 9 speichern

  Alt 21. Dez 2015, 07:30
Mal ne Frage:

Wie groß ist den der Text im RichEdit?

Per Default kann das RichEdit nur 64K aufnehmen. Vielleicht wird zwar mehr Text angezeigt, aber beim Speichern nur die 64K exportiert.
Zu Bedenken ist hier der Unterschied zwischen Text und RTF.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Formatierten Text in PostgreSQL 9 speichern

  Alt 21. Dez 2015, 08:15
Es ist schon sehr abenteuerlich, was du da mit dem Stream veranstaltest (casten des Stream-Inhalts mit PChar ).

Wenn du den RTF-String haben möchtest, dann nimm doch einfach
Delphi-Quellcode:
function TfrmMain.GetRTFText: string;
begin
  Result := redt1.Lines.Text;
end;
Wenn du in ein Blob-Feld speichern möchtest, dann nimm doch die einfache Variante:
Delphi-Quellcode:
// DataSet und Name des Felds musst du anpassen
MyDataSet.FieldByName( 'MyRtfBlobField' ).Assign( redt1.Lines );
und das Lesen geht ähnlich kompliziert
Delphi-Quellcode:
// DataSet und Name des Felds musst du anpassen
redt1.Lines.Assign( MyDataSet.FieldByName( 'MyRtfBlobField' ) );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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:58 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