![]() |
Datenbank: SQLite • Version: 5.3 • Zugriff über: DBGrid Table
Berechnetes Feld ändern Integer<->DateTime
Hallo zusammen
Zugegeben, der Titel ist etwas unglücklich gewählt, denn ein berechnetes Feld lässt sich nicht ändern. Aber der Titel sagt zumindest meine Intention aus. Was habe ich: - Eine Datenbanktabelle mit der Spalte HISTDATE. Darin steht z.B. 119243 (ist ein Datum in einem speziellen julianischen Format) - Eine Table-Komponente (unitable von devart). - Ein DBGrid (von devexpress) mit der Spalte "HistDate". Die Spalte ist vom Typ TDateTime und hat eine DateEdit-Komponente. (Ich glaube und hoffe die Hersteller obiger Komponenten tun in diesem Fall nichts zur Sache) Was will ich: 1. Anzeige der HISTDATE-Tabellenwerte im DBGrid im *gregorianischen Format*. Also nicht 119243, sondern als DateTime 24.06.2019. 2. Das Datum im Grid soll dann editierbar sein und der editierte Wert soll als 119243 wieder in der Tabelle gespeichert werden. Was habe ich schon gemacht: Punkt 1 schaffe ich mit einem berechnetem Feld. ich erstelle in der Table ein neues berechnetes Feld und mit CalcFields errechne ich den DateTime-Wert aus diesem speziellem Datumswert. Im Grid weise ich der Spalte dann mein berechnetes Feld zu. Das Datum wird dann wunderbar im Grid angezeigt. Was ist mein Problem: Der DateTime-Wert im Grid lässt sich nicht ändern. Ich komme nicht drauf wie ich diesen DateTime-Wert in das Table-Feld HISTDATE zurückschreiben kann. Habe schon mit onGetText und onSetText geschaut. Aber da der Wert im Grid ein DateTime-Wert ist, erschent mir das nicht zielführend. Habt ihr eine Idee wie ich das machen könnte? |
AW: Berechnetes Feld ändern Integer<->DateTime
Für sowas gibt es bei einem TField die Events OnGetText und OnSetText.
|
AW: Berechnetes Feld ändern Integer<->DateTime
Danke für deinen Hinweis Uwe. Wie geschrieben hatte ich mich in diese Richtung mit onGetText und onSetText bereits orientiert. Habe jedoch keine Möglichkeiten gesehen, da bei onGetText und onSetText mit Strings gearbeitet wird. Ich benötige jedoch eine Umwandlung Integer<->DateTime. Das Grid-Feld ist ein DateTime-Feld. Falls du dennoch Chancen siehst.. dürfte ich dich bitten einen kurzen Pseudo-Code zu posten? Danke!
|
AW: Berechnetes Feld ändern Integer<->DateTime
Du kannst Doch den String -> nach TDateTime umwandeln und dann in Dein Integer
|
AW: Berechnetes Feld ändern Integer<->DateTime
Danke für deine Antwort stifflersmom
Wie soll das deiner Meinung nach ausschauen? Ich habe in der TTable ein Data-Feld "HISTDATE" welches den Tabellenwert inne hat. Soll ich nun ein GetText und SetText auf diesem Feld machen? So sieht die Get-Funktion aus:
Code:
Ich habe einen var Text:String. Wie soll ich da jetzt einen DateTime-Wert reinschreiben?
procedure TFrame_Base_Brick.UniTable_BrickHistHISTDATEGetText(Sender: TField;
var Text: string; DisplayText: Boolean); begin inherited; Text := JulianToGregorian(FieldbyName('HISTDATE').asInteger); // Funktion gibt TDateTime zurück end; ...und dann gleiches Spiel mit SetText..
Code:
procedure TFrame_Base_Brick.UniTable_BrickHistHISTDATESetText(Sender: TField;
const Text: string); begin inherited; end; |
AW: Berechnetes Feld ändern Integer<->DateTime
|
AW: Berechnetes Feld ändern Integer<->DateTime
Ich sehe gerade, daß es gar nicht um ein Standard-TDBGrid geht, sondern das von DevExpress! Da muss ich passen.
|
AW: Berechnetes Feld ändern Integer<->DateTime
Hallo,
dann nimm doch ein Dummy-Feld für die Datumsanzeige (OnGetText/OnSetText), dein eigentliches Datumsfeld versteckst du. OnGetText Text:= Konvertiere(Verstecktes_DatumsFeld) |
AW: Berechnetes Feld ändern Integer<->DateTime
Nur noch zur Information, falls es jemanden interessiert. Ich hatte hierzu bei Devexpress nachgefragt. Hier ist die Antwort:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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