Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Format Date / Time im DBGrid (https://www.delphipraxis.net/195325-format-date-time-im-dbgrid.html)

Jumpy 20. Feb 2018 11:08

Datenbank: Oracle • Version: 11g • Zugriff über: ADO+ODBC

Format Date / Time im DBGrid
 
Hallo,

beim Anzeigen einer Tabelle im DBGird gibt es folgendes Frage: Die Tabelle hat ein Feld Namens P_Date und ein Feld Namens P_Time und beide sind vom Oracle-Datentyp Date. Der einzige Unterschied den ich finden konnte ist, dass P_Date nicht nullable ist
Im DBGrid wird nun bei P_Date nur das Datum angezeigt, in P_Time Datum und Uhrzeit, wobei der Datumsteil der 01.01.1899 oder sowas ist, ich vermute mal Tag 0 der Datenbank.

Die Frage ist nun, woran das DBGrid diese beiden Unterscheidet und einmal die Uhrzeit weg lässt und einmal diese mit anzeigt. Noch besser wäre natürlich gewesen nur den Zeit-Anteil anzugzeigen.

Ich vermute mal es geht über den DataType des Feldes, aber wie kann der anders sein, wo doch in der DB beide gleich (Date) sind. Oder interpretiert da eine der Zugriffskomponenten das irgendwie, z.B. haben die ersten 20 Zeilen keine Nachkommastelle (intern ist ja alles immer ein Float(?)), dann zeige das als reines Datum an oder sowas?

Weißt da jemand, wo in den Komponenten da die Entscheidungsfindung ist?

Bernhard Geyer 20. Feb 2018 11:32

AW: Format Date / Time im DBGrid
 
Normalerweise wird in Ergebnis der Datenbank Metadaten mitgeliefert welche Spalte von welchen Typ ist.

Da deine Zugriffspfad über ADO und ODBC alles anders als "Unproblematisch" ist, kann es sein das beim Mappen der Oracle-Typen auf ODBC, dann auf ADO und dann auf die Delphi-Typen informationen verloren gehen oder eine falsches Mapping erfolgt.

Besser ist es bei Oracle direkt oder über den Oracle-Net-Treiber zu gehen.
Neurere Delphi-Versionen bietetn das von sich aus an (FireDac) oder man verwendet die Unidac/OraDac-Komponenten von DevArt.

Jumpy 20. Feb 2018 12:43

AW: Format Date / Time im DBGrid
 
Genau das umgekehrte ist eigentlich das Problem. Die Anzeige ist ja (ohne eigenes dazu tun) wie gewünscht, sprich mal nur das Datum, mal das Datum mit Uhrzeit (obwohl es in der Datenbank alles den selben Datentyp hat (oder zu haben scheint) mit Oracle's SQL-Developer geprüft)?

Ich kriege das Ganze halt mit anderen Zugriffskomponenten (JDBC für ein Java-Tool) nicht hin, sprich die Meta-Daten sehen bei beiden Feldern scheinbar gleich aus. Und ich will halt wissen, wieso kriegt das olle ADO/ODBC das out of the box genau so hin wie ich das will und JDBC nicht.

HolgerX 20. Feb 2018 14:42

AW: Format Date / Time im DBGrid
 
Hmm..

Ich vermute, dass das ADO das garnicht anders hinbekommet.. ;)

Es ist eher das DBGrid, welches bei einer Uhrzeit von 0 einfach nicht '00:00:00' sondern '' anzeigt.

Beim Dataset (Query) gibt es für jedes Field ein Displayformat. Trage hier mal bei den DateTime Feldern etwas ein...

Edit:
Teste mal mit einem einfachen DateTimeToStr(0.0) wie dies angezeigt wird..


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 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