AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Berechnetes Feld ändern Integer<->DateTime
Thema durchsuchen
Ansicht
Themen-Optionen

Berechnetes Feld ändern Integer<->DateTime

Ein Thema von geesmith · begonnen am 12. Sep 2019 · letzter Beitrag vom 30. Sep 2019
Antwort Antwort
geesmith

Registriert seit: 17. Jan 2003
Ort: Frauenfeld
32 Beiträge
 
Delphi XE5 Architect
 
#1

Berechnetes Feld ändern Integer<->DateTime

  Alt 12. Sep 2019, 21:24
Datenbank: SQLite • Version: 5.3 • Zugriff über: DBGrid Table
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 12. Sep 2019, 21:36
Für sowas gibt es bei einem TField die Events OnGetText und OnSetText.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
geesmith

Registriert seit: 17. Jan 2003
Ort: Frauenfeld
32 Beiträge
 
Delphi XE5 Architect
 
#3

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 12. Sep 2019, 22:16
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!
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 13. Sep 2019, 09:10
Du kannst Doch den String -> nach TDateTime umwandeln und dann in Dein Integer
  Mit Zitat antworten Zitat
geesmith

Registriert seit: 17. Jan 2003
Ort: Frauenfeld
32 Beiträge
 
Delphi XE5 Architect
 
#5

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 13. Sep 2019, 13:24
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:
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;
Ich habe einen var Text:String. Wie soll ich da jetzt einen DateTime-Wert reinschreiben?

...und dann gleiches Spiel mit SetText..
Code:
procedure TFrame_Base_Brick.UniTable_BrickHistHISTDATESetText(Sender: TField;
  const Text: string);
begin
  inherited;

end;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 13. Sep 2019, 13:28
Moin...
DateToStr http://docwiki.embarcadero.com/Libra...tils.DateToStr
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 13. Sep 2019, 13:55
Ich sehe gerade, daß es gar nicht um ein Standard-TDBGrid geht, sondern das von DevExpress! Da muss ich passen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 13. Sep 2019, 14:30
Hallo,
dann nimm doch ein Dummy-Feld für die Datumsanzeige (OnGetText/OnSetText),
dein eigentliches Datumsfeld versteckst du.

OnGetText
Text:= Konvertiere(Verstecktes_DatumsFeld)
Heiko
  Mit Zitat antworten Zitat
geesmith

Registriert seit: 17. Jan 2003
Ort: Frauenfeld
32 Beiträge
 
Delphi XE5 Architect
 
#9

AW: Berechnetes Feld ändern Integer<->DateTime

  Alt 30. Sep 2019, 15:58
Nur noch zur Information, falls es jemanden interessiert. Ich hatte hierzu bei Devexpress nachgefragt. Hier ist die Antwort:

Zitat:
"Calculated Field" is one of standard types of DataSet Fields. They are read-only. This behavior is standard and we cannot regulate this.

As for the task, I recommend you consider opening an extra dialog form, where you will be able to edit the clicked cell value. For example:
1. Handle the cell's double click;
2. Open the dialog form and show there a converted date in a DateEdit editor;
3. The end user can edit the value and close the dialog form;
4. Post the required value to the DataSet after you close the dialog form.
  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 02:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz