![]() |
Datenbank: MySql aber eigentlich egal • Version: 5 • Zugriff über: Zeos
DbGrid Integer-Wert als Datum anzeigen
Ich glaube mein Gehirn macht eine Pause oder ich hab irgendetwas übersehen und benötige deshalb einige Anregungen von Euch.
Der Zugiff auf eine Tabelle in der Datenbank erfolgt über Zeos mit einer ZTable-Komponente. An der ZTable hängt eine DataSource. An der DataSource hängt auch ein DBGrid. Das Grid soll nun anstatt den Integer-Wert (z.B. 20061001) eines Feldes ein Datums-Feld (01.10.2006) anzeigen und auch als Datums-Feld editierbar sein. Also sollte die Tabelle praktisch ein zusätzliches virtuelles Datums-Feld erhalten, welches seinen Wert aus dem Integer-Feld berechnet. Das Problem (oder vielleicht auch nicht) an der ganzen Sache ist, dass die Tabelle nicht nur zwingend vorgegebene Felder enthält, sondern von den Nutzern erweitert werden kann und automatisch vom System bei zusätzlichen installierbaren Sprachen erweitert wird. Das Einzige, was mir eingefallen ist, ist eine weitere Query für jede Tabelle zu erstellen und diese vorab zu öffnen, um die Felddefinitionen der Tabelle in die ZTable zu kopieren und das Zusatzdatumsfeld hinzufügen. Mir fehlt im Moment einfach die zündende Idee. Es ist alles an Anregung oder Code-Beispielen zur Kalkulation oder Erstellung des Feldes willkommen. Also egal was Euch einfällt, ersteinmal her damit. Mal schauen, was ich daraus dann machen kann, oder ob ich feststellen muss, dass sich wirklich nur eine Gehirnwindung verknotet hat. vielen Dank BadenPower |
AW: DbGrid Integer-Wert als Datum anzeigen
Hallo,
zum Feld anzeigen würde ich TDBGrid.OnDrawColumnCell nehmen
Delphi-Quellcode:
Nicht getestet..aber so ähnlich müsst es tun. Zum Editieren: Soll das direkt im DBGrid stattfinden?
..
if Column.FieldName = 'DasDatumFeld' then with (Sender as TDBGrid).Canvas do begin if State = [gdSelected] then begin Brush.Color := clHighLight; Pen.Color := clHighLightText; end else begin Brush.Color := DBGrid.Color; Pen.Color := DBGrid.Font.Color; end; FillRect(Rect); TextOut(Rect.Left, Rect.Top,'DatumAusIntegerBerechnet'); end; |
AW: DbGrid Integer-Wert als Datum anzeigen
Nur mal so ne Idee: Gleich mit der DB-Abfrage ein Datumsfeld erhalten, durch casten auf varchar und der mySQL-Funktion STR_TO_DATE.
|
AW: DbGrid Integer-Wert als Datum anzeigen
Hallo,
wieso benutzt Du nicht OnGetText und OnSetText von TField? Siehe auch ![]() |
AW: DbGrid Integer-Wert als Datum anzeigen
Mal doof gefragt:
In der Tabelle ist ein Integer-Feld und die Tabelle kann erweitert werden. Woran erkennst du ob du dieses Feld jetzt wie ein Datum behandeln musst oder eben doch als einfachen Integer? Da müsste es jetzt zusätzliche Meta-Daten geben, aus denen du dann eine Tabelle aufbauen kannst und dann mit den Werten aus der echten Tabelle (inkl. Konvertierung) füllst. |
AW: DbGrid Integer-Wert als Datum anzeigen
Zitat:
Zitat:
Allerdings handelt es sich um eine TZTable, wodurch ein manueller Eingriff programmierseitig nicht erforderlich ist und dann müßte ich das SQL-Statement selbst festlegen. Und da es sich dabei noch um eine Detail-Tabelle in einer Master-Detail-Beziehung handelt wollte ich mir das Erstellen der Statements ersparen. Zitat:
:thumb::thumb::thumb: Hätte man auch selbst drauf kommen können. Das könnte durchaus die einfachste und praktikabelste Lösung sein. Irgendwelche anderen Vorschläge oder Anregungen??? |
AW: DbGrid Integer-Wert als Datum anzeigen
Zitat:
Es wird zwar in den Formularen die Möglichkeit geboten die durch den Nutzer erweiterten Felder in DBMemo oder DBEdit je nach Datentyp und im DBGrid zu editieren, aber es findet keine Formatierung der Ausgabe/Eingabe statt. Dies betrifft nur die in der Grundsoftware zwingend vorgegebnen Datenbankfelder. Und dort ist der Datentyp und der Verwendungszweck klar definiert. Zitat:
"Wenn Du etwas erweiterst und eine gewisse Anzeige/Formatierung haben möchtest, dann hinterlege dies in einer Datenbank." |
AW: DbGrid Integer-Wert als Datum anzeigen
Kann mySQL 'updateable views'? Dann wäre das ein denkbarer Weg. Die View zeigt die Daten so an, wie sie editiert werden sollen. Um Instead-Of-Trigger der View konvertierst du dann die Daten wieder in den Originalwert.
Diese View kannst Du auch automatisch erstellen, anhand der Metadaten oder was auch immer Du für Informationen hast. |
AW: DbGrid Integer-Wert als Datum anzeigen
Zitat:
Es kann durchaus vorkommen, dass die gesamte Datenbank zusätzlich als Mirror auf einem anderen DBMS läuft, als die Life-Daten und die Arbeitsdaten. Im ungünstigsten Fall habe ich dann 3 verschiedene Datenbanksysteme, welche übergreifend mit den selben Formularen abgedeckt werden müssen. |
AW: DbGrid Integer-Wert als Datum anzeigen
Das hatte ich befürchtet.
Zitat:
Du könntest die Daten auch in einem TClientDataset vorhalten, dem Du ein TDateTimeField spendiert hast (und eventuell weitere Felder). Das lohnt sich dann, wenn Du die Daten eh von Hand persistierst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 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