![]() |
Datenbank: Firbird • Version: 2,5,5 • Zugriff über: IBO / IBExpert
Formatierter Text und String zusammenfügen
Hallo,
stehe gerade so ein bisschen auf den Schlauch. Ich habe in einer Tabelle 2 Felder DATUM und TEXT. TEXT ist ein Blob Feld der formatierten RTF Text enthält. Gebt es eine Möglichkeit beide Felder in einem Feld zusammen zu führen ohne das die Formatierung verlorengeht. Beispiel: DATUM 16.02.2016 TEXT Migräne --> (Hat Schriftattribute) ZIEL 16.02.2016: Migräne --> (Schriftattribute sollen bleiben. Danke für einen Tipp. |
AW: Formatierter Text und String zusammenfügen
Du könntest ein unsichtbares RichEdit erzeugen
Delphi-Quellcode:
, dort Deinen Text hineinladen, ihn selektieren und im Anschluss SelText anpassen.
RichEdit := TRichEdit.CreateParented(HWND_MESSAGE);
|
AW: Formatierter Text und String zusammenfügen
Jain!
Du mußt nur an den Anfang des Textes des RTF das Datum als String einfügen :stupid: Ein einfaches verketten der Felder geht auch aber das Ergebnis ist dann wohl nicht in Deinem Sinne. die einfachste Lösung wäre es die RTF-Daten in ein Richedit zu übertragen und dann das Datum an den Anfang zu setzen. danach den Inhalt des Richedits wieder in das Blob-Feld der DB zurück speichern. Gruß K-H |
AW: Formatierter Text und String zusammenfügen
Meine Rede ;)
|
AW: Formatierter Text und String zusammenfügen
OK Danke werde ich probieren. Muss jetzt erst mal weg berichte aber dann vom Ergebnis.:-D
|
AW: Formatierter Text und String zusammenfügen
Zitat:
Zitat:
Gruß K-H |
AW: Formatierter Text und String zusammenfügen
Eine einfach zu handhabende Lösung wäre eine Klasse, die beide Felder aufnehmen kann und den Inhalt in einen Stream schreiben (und von dort auch wieder auslesen kann).
So etwas z.B.
Delphi-Quellcode:
Um die Daten vom/zum Blob-Feld zu bekommen reicht dann
unit Unit2;
interface uses System.Classes; type TDataObject = class( TInterfacedPersistent, IStreamPersist ) private FDate: TDateTime; FText: TStrings; procedure SetText( const Value: TStrings ); public { IStreamPersist } procedure LoadFromStream( Stream: TStream ); procedure SaveToStream( Stream: TStream ); public constructor Create; destructor Destroy; override; property Date: TDateTime read FDate write FDate; property Text: TStrings read FText write SetText; end; implementation { TDataObject } constructor TDataObject.Create; begin inherited; FText := TStringList.Create; end; destructor TDataObject.Destroy; begin FText.Free; inherited; end; procedure TDataObject.LoadFromStream( Stream: TStream ); var reader: TBinaryReader; begin reader := TBinaryReader.Create( Stream ); try FDate := reader.ReadDouble( ); finally reader.Free; end; FText.LoadFromStream( Stream ); end; procedure TDataObject.SaveToStream( Stream: TStream ); var writer: TBinaryWriter; begin writer := TBinaryWriter.Create( Stream ); try writer.Write( FDate ); finally writer.Free; end; FText.SaveToStream( Stream ); end; procedure TDataObject.SetText( const Value: TStrings ); begin FText.Assign( Value ); end; end.
Delphi-Quellcode:
data := TDataObject.Create;
// Daten vom Feld holen data.Assign( MyDataSet.FieldByName('BlobData') ); // Daten in das Feld schreiben MyDataSet.FieldByName('BlobData').Assign( data ); |
AW: Formatierter Text und String zusammenfügen
RTF ist ein TEXT-Format (wie XML, JSON, CSV usw., aber zum Glück ohne Byte-Offsets), wenn du im RTF einen "Platzhalter" hast, der im RTF-Quellcode nicht "schlimm" kodiert ist, dann einfach den TEXT aus dem BLOB auslesen und ein StringReplace drüber.
|
AW: Formatierter Text und String zusammenfügen
@Sir Rufo: Dem TE geht es wohl nicht darum, die Daten gemeinsam in einem Feld zu speichern, sondern um eine schöne formatierte Ausgabe der beiden Felder.
Wenn es nur um die Ausgabe in einem Report geht, würde ich mich in das BeforePrint-Ereignis der RTF-Elementes hängen und dort das Datumsfeld entsprechend injizieren. |
AW: Formatierter Text und String zusammenfügen
Zitat:
|
AW: Formatierter Text und String zusammenfügen
Sir Rufo,
das Thema ist etwas komplexer. Ich will schon die beiden Felder in einem Feld zusammenführen und zusätzlich noch mit : und ; ergänzen. Es können nämlich mehrere Diagnosen vorhanden sein die alle in ein Blob Feld gespeichert werden sollen. Ich hatte versucht Dir eine private Nachricht zu senden ist aber nicht möglich. Hätte gerne mit Dir mal dieses Thema besprochen, weil es doch komplexer ist als hier die Lösungen aufzeigen. Es dürfen auf keinen Fall die Schriftattribute verloren gehen. Im Reportgenerator zu realisieren ist unmöglich. |
AW: Formatierter Text und String zusammenfügen
Hier mal meine Procedure wie ich es bislang gelöst habe. Leider verlieren ich hier alle Schriftattribute.
Delphi-Quellcode:
procedure TRechnungsSerienDruckFrm.AktualisiereRechnungDiagnose;
var Satz : String; Suchwort : String; LetztesDatum : String; begin TempQry.Close; TempQry.SQL.Text := 'Select BEHANDLUNGSDATUM, GebuehNr, Suchwort, Text from tbl_Rechnungspositionen ' + 'where RechnungNr = :RechnungNr and Typ = ''D'' '; TempQry.ParamByName('RechnungNr').AsInteger := RechnungQry.FieldByName('RechnungNr').AsInteger; TempQry.Open; DiagnoseEdit.Clear; // LetztesDatum := ''; While not TempQry.Eof do begin satz := ''; if dmMain.ibqryOptionen.FieldByName('DIAGNOSEDATUM').AsString = 'J' then if LetztesDatum <> FormatDateTime('dd.mm.yyyy', TempQry.FieldByName('Behandlungsdatum').AsDatetime) then begin LetztesDatum := FormatDateTime('dd.mm.yyyy', TempQry.FieldByName('Behandlungsdatum').AsDatetime); Satz := FormatDateTime('dd.mm.yyyy', TempQry.FieldByName('Behandlungsdatum').AsDatetime) + ': '; end; ManuelleDiagnoseEdit.AsString := TempQry.FieldByName('Text').AsString; Suchwort := StringReplace(ManuelleDiagnoseEdit.Text, #13#10, ' ', [rfReplaceAll]); if Suchwort = '' then Suchwort := TempQry.FieldByName('Suchwort').AsString; if dmMain.ibqryOptionen.FieldByName('DIAGNOSE').AsString = 'Diagnose einfügen' then satz := Satz + Suchwort + '; ' else if dmMain.ibqryOptionen.FieldByName('DIAGNOSE').AsString = 'Nur ICD 10 Code einfügen' then satz := Satz + TempQry.FieldByName('GebuehNr').AsString + '; ' else begin if TempQry.FieldByName('GebuehNr').AsString > '' then satz := Satz + TempQry.FieldByName('GebuehNr').AsString + ', ' + Suchwort + '; ' else satz := Satz + Suchwort + '; ' end; DiagnoseEdit.CPPosition := MaxInt; DiagnoseEdit.InputString(Satz); TempQry.Next; end; if TempQry.IsEmpty then DiagnoseEdit.AsString := PatientQry.FieldByName('PatDiagnose').AsString; //Abwärtskompatibilität TempQry.Close; DiagnoseEdit.SelectAll; DiagnoseEdit.CurrAttr.FontName := ProgOptions.Texteditor.FontName; // DiagnoseEdit.CurrAttr.Size := ProgOptions.Texteditor.FontSize; // if ProgOptions.Texteditor.Bold then // DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style + [afsBold] // else // DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style - [afsBold]; // if ProgOptions.Texteditor.Italic then // DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style + [afsItalic] // else // DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style - [afsItalic]; // if ProgOptions.Texteditor.Underline then // DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style + [afsUnderline] // else // DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style - [afsUnderline]; if pgcRechnungen.ActivePage = TabEinzel_Rechnungen then begin RechnungQry.Edit; RechnungQry.FieldByName('Diagnose').asString := DiagnoseEdit.AsString; RechnungQry.Post; end; if pgcRechnungen.ActivePage = TabSammelRechnungen then begin if PatientQry.FieldByName('PATIENTNR').Value = Patientnr then begin UpdateSammeldiagnoseQry.ParamByName('RECHNUNGNR').Value := RechnungQry.FieldByName('RECHNUNGNR').Value; UpdateSammeldiagnoseQry.ParamByName('PATIENTNR').Value := Patientnr; UpdateSammeldiagnoseQry.ParamByName('DIAGNOSE').AsString := DiagnoseEdit.AsString; UpdateSammeldiagnoseQry.ExecSQL; end else begin InsSammeldiagnose.ParamByName('SAMMELDIAGNOSENR').Value := dmMain.GetGeneratorWert('GEN_TBL_SAMMELDIAGNOSE'); InsSammeldiagnose.ParamByName('RECHNUNGNR').Value := RechnungQry.FieldByName('RECHNUNGNR').Value; InsSammeldiagnose.ParamByName('PATIENTNR').Value := PatientQry.FieldByName('PATIENTNR').Value; InsSammeldiagnose.ParamByName('DIAGNOSE').AsString := DiagnoseEdit.AsString; InsSammeldiagnose.ExecSQL; Patientnr := PatientQry.FieldByName('PATIENTNR').Value; end; end; end; |
AW: Formatierter Text und String zusammenfügen
Brechen wir das mal herunter:
Du hast mehrere RTF-Dokumente* und diese möchtest du in einem RTF-Dokument zusammenfassen, ohne das die Formatierungen der einzelnen Dokumente verloren gehen. * Den noch zu formatierenden Teil sehe ich jetzt auch mal als RTF-Dokument an, bzw. ich lasse den Teil aus der Betrachtung heraus, denn das löst man dann separat. Richtig soweit? |
AW: Formatierter Text und String zusammenfügen
Ja das ist richtig.
Ich habe eine Tabelle mit dem Feld Datum (DateTime) und Diagnose (Blob). Es können nun mehrere Diagnosen in der Tabelle zu einem Patienten gehören. Diese sollen in der Rechnung alle zusammengefasst werden ohne das die Diagnosen die Attribute verlieren. Beispiel: 14.01.2016: Diagnose 1; 15.01.2016: Diagnose 2; 01.02.2016: Diagnose 3 Am Ende sollte kein Semikolon sein. |
AW: Formatierter Text und String zusammenfügen
Ist EK RTF (
![]() |
AW: Formatierter Text und String zusammenfügen
Zitat:
Meiner Meinung nach willst Du ja nicht zwei Felder in einem zusammenfassen, sonder zwei Felder so ausgeben, daß es so aussieht, als ob es eines wäre. Für mich ein kleiner Unterschied! Gruß K-H |
AW: Formatierter Text und String zusammenfügen
Man kann die
Delphi-Quellcode:
-Komponente auch noch aufblasen mit
TRichEdit
![]() (Antwort von Ralph Friedman) Mit ein paar kleinen Änderungen (warum immer nur Dateinamen und nicht Streams :roll:) kann man dann die RTF-Dokumente zusammenbasteln. Auf der anderen Seite geht das auch mit FastReport, wenn man einen tabellarische Darstellung wählt
|
AW: Formatierter Text und String zusammenfügen
Hallo,
es soll schon alles in einem Feld zusammengeführt werden. Werde mich heute mal weiter darum kümmern. |
AW: Formatierter Text und String zusammenfügen
Oh Mist,
hier handelt es sich um ein TWPRichText von WPTools das ich mit einem String verbinden will ohne das die Formatierung verloren geht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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 by Thomas Breitkreuz