Entwickler-Ecke
Datenbanken - 2 RTF-Datenbankfelder verbinden
Jakane - Fr 09.08.13 13:49
Titel: 2 RTF-Datenbankfelder verbinden
Hallo liebe Delphi-Helfer :)
ich habe folgende Aufgabe bekommen:
Bei uns gibt es ein Datenbankfeld Vorspanntext, als Blob definiert und als TMemoField verwendet.
Wenn ein Vorspanntext ausgewählt wurde, soll geprüft werden:
Ist der Text leer, wird der gewählte Text einfach rein geschrieben
Ist aber schon etwas im Text drin, soll der ausgewählte Text angehangen werden.
In den Foren findet sich dazu nicht wirklich etwas was mir hilft das zu lösen :(
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Case MessageDlg('Möchten Sie den Vorspanntext...' + #10 + 'Ja: hinzufügen.' + #10 + 'Nein: ersetzen.', mtInformation, [mbYes, mbNo, mbAbort], 0) of mrYes: _TMemos_Kombinieren(TMemoField(IBQAuftrag.FieldByName('VORSPANNTEXT')), TMemoField(IBQTextbaustein.FieldByName('VORSPANNTEXT1')), TMemoField(IBQTextbaustein.FieldByName('VORSPANNTEXT2'))); mrNo: TMemoField(IBQAuftrag.FieldByName('VORSPANNTEXT')) := IBQTextbaustein.FieldByName('VORSPANNTEXT1').Value; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm._TMemos_Kombinieren(ZielMemo, Memo1, Memo2 : TMemoField); var sRE1, sRE2 : TDBRichEdit; begin sRE1 := TDBRichEdit.Create(Self); sRE1.Parent:= TWinControl(ZielMemo.Owner); sRE1.DataSource := Memo1.DataSet.DataSource; sRE1.DataField := Memo1.FieldName;
sRE2 := TDBRichEdit.Create(Self); sRE2.Parent:= TWinControl(ZielMemo.Owner); sRE2.DataSource := Memo2.DataSet.DataSource; sRE2.DataField := Memo2.FieldName;
ZielMemo.Text := sRE1.Text + sRE2.Text; end; |
Wollte das mit DBRichEdits machen, aber entweder bekomme ich ein leeres Feld zurück, oder nur den 1. Vorspann aber nicht dazu den 2.
Weiss jemand Rat, oder sogar eine andere Lösung?
Ich soll das heute eigendlich noch fertig kriegen :(
MfG Jaki
Jakane - Fr 09.08.13 15:07
meine RE's sind beide leer :-/ obwohl etwas in den Feldern drin steht...
jaenicke - Fr 09.08.13 15:44
Dann nimm doch normale RichEdits und pack den Feldinhalt manuell herein. Ist denn zumindest der Feldinhalt in Memo1.AsString im Debugger drin?
Jakane - Fr 09.08.13 16:02
Den Fehler mit den leeren RE's habe ich gefunden, jetzt bekomme ich auch beide Texte in einem Feld,
aber ohne Formatierung :(
diese brauche ich aber leider auch
jaenicke - Fr 09.08.13 16:23
Dann musst du die Daten in einen Stream, z.B. einen TStringStream, speichern, sprich RichEdit.Lines.SaveToStream...
Anders bekommst du die RTF-Formatierung nicht mit.
Delete - So 11.08.13 07:18
jaenicke hat folgendes geschrieben : |
Dann musst du die Daten in einen Stream, z.B. einen TStringStream, speichern, sprich RichEdit.Lines.SaveToStream...
Anders bekommst du die RTF-Formatierung nicht mit. |
Lines.LoadFromStream kann er aber nicht einsetzen, wenn er den Text des Quell-RTF an den des Ziel-RTF anhängen will :roll:
Jakane - Mo 12.08.13 09:59
Die funktion ist geil und funktioniert, aber nur auf RichEdit.
Ich schaff es zwar, den Text mit Formatierung in die RichEdits zu bekommen, aber ich krieg den Inhalt des RE nicht mit Formatierung in das Memo zurück.
Delete - Mo 12.08.13 10:02
Jakane hat folgendes geschrieben : |
Die funktion ist geil und funktioniert, aber nur auf RichEdit.
Ich schaff es zwar, den Text mit Formatierung in die RichEdits zu bekommen, aber ich krieg den Inhalt des RE nicht mit Formatierung in das Memo zurück. |
TMemo verfügt nicht über Formatierungseigenschaften. Du kannst zwar das Property Font des Memos einstellen, doch gelten diese Einstellungen dann für den gesamten Memo-Inhalt. Mit anderen Worten: In einem TMemo kannst du
nicht verschiedene Font-Parameter einsetzen, es ist
nicht für Schrift-Formatierungen vorgesehen, denn dafür gibt es TRichEdit.
Jakane - Mo 12.08.13 11:02
Dieses Datenbankfeld kann aber sowohl Formatieren als auch Formatiert anzeigen.
Ich bekomme bei RichEdit.Text aber eben nur den Text und nicht die Formatierung zurück :(
Delete - Mo 12.08.13 11:05
Jakane hat folgendes geschrieben : |
Dieses Datenbankfeld kann aber sowohl Formatieren als auch Formatiert anzeigen.
Ich bekomme bei RichEdit.Text aber eben nur den Text und nicht die Formatierung zurück :( |
Ein Datenbankfeld kann nicht "anzeigen". Mit anderen Worten: Der Begriff "Datenbankfeld" steht nicht für irgend eine datensensitive Komponente, die den Inhalt von Datenbankfeldern anzeigt.
Um welche Komponente handelt es sich denn konkret?
Jakane - Mo 12.08.13 11:17
Fehlermeldung: "Das Speichern des Streams ist misslungen"
Kenn mich mit Stream leider gar nicht aus :(
Delphi-Quelltext
1: 2: 3:
| Stream := TStream.Create; sRE1.Lines.SaveToStream(Stream); qry_AufStammAUFBESTVORSPANN.LoadFromStream(Stream); |
Jakane - Mo 12.08.13 11:42
Delphi-Quelltext
1: 2: 3:
| Stream := qry_AufStamm.CreateBlobStream(qry_AufStammAUFBESTVORSPANN, bmReadWrite); sRE1.Lines.SaveToStream(Stream); qry_AufStammAUFBESTVORSPANN.LoadFromStream(Stream); |
Das macht mein Feld komplett leer :(
jaenicke - Mo 12.08.13 11:43
Wie geschrieben, nimm einen TStringStream. Dann kannst du dessen Eingeschaft DataString nehmen und hast den RTF-Text oder du kannst den als Stream weiterverwenden.
Delete - Mo 12.08.13 11:47
Jakane hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3:
| Stream := qry_AufStamm.CreateBlobStream(qry_AufStammAUFBESTVORSPANN, bmReadWrite); sRE1.Lines.SaveToStream(Stream); qry_AufStammAUFBESTVORSPANN.LoadFromStream(Stream); |
Das macht mein Feld komplett leer :( |
Kann ich davon ausgehen, daß sRE1 vom Typ TMemo ist? Dann ist sRE1 vermutlich leer. Wieso verwendest du nicht TDBRichEdit für beides? Dann mußt du vor dem Einfügen ins Ziel-RichEdit nur dein Dataset auf Edit setzen und nach dem Reinkopieren posten.
Jakane - Mo 12.08.13 11:50
jaenicke hat folgendes geschrieben : |
Wie geschrieben, nimm einen TStringStream. Dann kannst du dessen Eingeschaft DataString nehmen und hast den RTF-Text oder du kannst den als Stream weiterverwenden. |
Kannst du mir nicht ein Beispielcode geben.
Ich habe keine Ahnung von Streams (GAR NICHTS)
Ich probiere blind irgendwelche Codeteile aus und krieg entweder Fehlermeldungen oder leer zurück...
jaenicke - Mo 12.08.13 12:25
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var Stream: TStringStream;
Stream := TStringStream.Create(''); try sRE1.Lines.SaveToStream(Stream); ShowMessage(Stream.DataString); finally Stream.Free; end; |
Jakane - Mo 12.08.13 12:41
danke
funktioniert endlich
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!