Entwickler-Ecke
Datenbanken - RichEdit DataField zuweisen
Jakane - Mi 23.05.12 09:27
Titel: RichEdit DataField zuweisen
Hallo liebe Delphi-Helfer :)
Für eines meiner Programme benötige ich ein RichEdit, dem erst wärend des Programmlaufs die Daten gegeben werden,
weil erst dann der Ursprung der Daten bekannt ist.
Ich habe schon einiges versucht, bekomme aber immer Fehlermeldungen wenn er das DataField zuweisen soll.
Die Funktion muss nicht so bleiben, das RichEdit muss nur zwingend die Daten selbst ziehen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function TFuP_R._Funktion(Query: TIBQuery; Datenfeld: String): String; var RichEdit : TDBRichEdit; DataSource : TDataSource; begin DataSource:= TDataSource.Create(Self); DataSource.DataSet:= Query; RichEdit:= TDBRichEdit.Create(Self); RichEdit.DataSource:= DataSource; ShowMessage('1'); RichEdit.DataField:= ?; ShowMessage('2'); Result:= RichEdit.Text; end; |
Hoffe jemand hat eine Idee :)
Danke im voraus.
Moderiert von
Narses: Delphi-Tags hinzugefügt
Sybok Factor - Mi 23.05.12 09:49
Also wenn du eine Delphi Version > Delphi 2010 hast, dann ist DataField als WideString definiert. Daher kann das so nicht funktionieren.
Wenn du Richedit tatsächlich zur Runtime erzeugt, musst du es dann nicht noch irgendwie in der Größe einrichten?
Jakane - Mi 23.05.12 10:00
Sybok Factor hat folgendes geschrieben : |
Also wenn du eine Delphi Version > Delphi 2010 hast, dann ist DataField als WideString definiert. Daher kann das so nicht funktionieren.
Wenn du Richedit tatsächlich zur Runtime erzeugt, musst du es dann nicht noch irgendwie in der Größe einrichten? |
Ich habe Delphi 5.
Wie in der Größe einrichten?
Wenn ich ein RichEdit auf mein Formular packe und DataSource und DataField manuell zuweise klappt alles.
Mehr braucht er nicht um dann zu tun was er soll.
Aber ich will nicht immer ein RE auf meinem Formular haben.
Sybok Factor - Mi 23.05.12 11:57
Falls das nachfolgende nicht hilft, dann poste bitte die genaue Fehlermeldung.
1. Größe einrichten:
Damit meinte ich, dass du nach dem Erzeugen des RE doch ein Platzierung vornehmen musst, oder nicht?
Delphi-Quelltext
1: 2: 3:
| RichEdit.Left := 8; ReichEdit.Top := 86; ... |
2. Fehler:
Was mir noch einfällt:
Kann es sein, dass der Fehler durch query hervorgerufen wird und nicht durch DataField?
Ansonsten versuche das:
Delphi-Quelltext
1: 2: 3:
| If query.active then query.Close; RichEdit.DataField := Datenfeld; query.open; |
Sonst s.o.
Jakane - Do 24.05.12 07:28
Ich habe beides ausprobiert, bekomme den Fehler aber immernoch :(
"Im Projekt xxx.exe ist eine Exception der Klasse EInvalidOperation aufgetreten. Meldung: 'Element '' hat kein übergeordnetes Fenster'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."
Sybok Factor - Do 24.05.12 08:17
Deine Fehlermeldung hat ü b e r h a u p t nichts mit der Datenanbindung zu tun! Beim nächsten Mal bitte gleich die Fehlermeldung mitliefern.
Du bekommst die Fehlermeldung weil eine der von dir zur Laufzeit erzeugten Komponenten keinen Parent (oder Owner) zugewiesen bekommt. Vermutlich ist es das Richedit.
Abhilfe sollte sein:
Delphi-Quelltext
1:
| RichEdit.Parent := Self; |
Self ggf. gegen das Control ersetzen, auf dem RichEdit abgelegt werden soll.
jasocul - Do 24.05.12 09:09
Jakane hat folgendes geschrieben : |
| Aber ich will nicht immer ein RE auf meinem Formular haben. |
Ähm, dann kann man auch die Eigenschaft Visible auf false setzen.
Alerdings frage ich mich, warum du überhaupt ein TDBRichEdit benötigst. Deine Funktion liefert doch nur den String zurück. Kannst du nicht einfach den String direkt aus dem Datenfeld lesen?
Delphi-Quelltext
1:
| DeineVariable := DeinQuery.FieldByName('DeinDatenfeld').AsString; |
Jakane - Fr 25.05.12 14:50
Sybok Factor hat folgendes geschrieben : |
Deine Fehlermeldung hat ü b e r h a u p t nichts mit der Datenanbindung zu tun! Beim nächsten Mal bitte gleich die Fehlermeldung mitliefern.
Du bekommst die Fehlermeldung weil eine der von dir zur Laufzeit erzeugten Komponenten keinen Parent (oder Owner) zugewiesen bekommt. Vermutlich ist es das Richedit.
Abhilfe sollte sein:
Delphi-Quelltext 1:
| RichEdit.Parent := Self; |
Self ggf. gegen das Control ersetzen, auf dem RichEdit abgelegt werden soll. |
Auf die Idee kam ich schon selbst, aber das hilft auch nicht. Weder Self noch der Name des Formulars.
Moderiert von
Narses: Beiträge zusammengefasst
Wenn ich es auf Visible:= False setzte ist das RE trotzdem auf dem Formular auch wenn ich es nicht sehe.
Das mit dem String ist zwar richtig, aber das RE entfernt dabei die RTF Formatierung, die manche Datenbankfelder haben.
Und eine wirklich effektive und sichere Möglichkeit die RTF Formatierung zu entfernen habe ich nicht gefunden, ausser das Arbeiten für RE.
bummi - Fr 25.05.12 15:48
ich würde es so umsetzen ....
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| Function GetRichEditFieldAsString(f:TField):String; var re:TrichEdit; ms:TMemoryStream; begin if f is TBlobField then begin re := Trichedit.Create(nil); re.Visible := False; re.Parent := Application.MainForm; ms:=TMemoryStream.Create; try TBlobField(f).SaveToStream(ms); ms.Position := 0; re.Lines.LoadFromStream(ms); Result := re.Lines.Text; finally re.Free; ms.Free; end; end; end;
procedure TForm5.Button1Click(Sender: TObject);
begin Showmessage(GetRichEditFieldAsString(Adodataset1.FieldByName('Einleitung'))); end; |
Jakane - Di 29.05.12 07:52
Funktioniert, danke :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!