Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Werte im DBGrid ändern (https://www.delphipraxis.net/149935-werte-im-dbgrid-aendern.html)

aurikel_Max 2. Apr 2010 20:46

Datenbank: SQLite • Version: 3.6.23 • Zugriff über: TDISQLite3 Personal

Werte im DBGrid ändern
 
Seid gegrüßt,

ich speichere meine Daten in meiner Datenbank in folgendem Format: yyyy-mm-tt, in meinem DBGrid möchte ich sie aber im Format tt-mm-yyyy anzeigen, dafür muss ich die Daten ja an einer bestimmten Stelle ändern.

Das wollte ich an der AfterOpen-Prozedur des ClientDataSets machen, hab also folgende Prozedur geschrieben:

Delphi-Quellcode:
procedure TfmBlubba.cdsBlubbaAfterOpen(DataSet: TDataSet);
begin
cdsBlubba.Close; //ohne das, bekomme ich den Fehler, dass ich nicht im Insert-Modus bin
  while not cdsBlubba.eof do
  begin
    cdsBlubba.FieldByName('datum').Text :=
      FormatDateDeu(cdsBlubba.FieldByName('datum').Text); //FormatDateDeu ist eine von mir geschriebene function
    cdsBlubba.Next;
  end;
 cdsBlubba.Open;
end;
Das geht allerdings schief, da ich folgenden Fehler bekomme:

http://img215.imageshack.us/img215/4610/fehlera.png
(http://img215.imageshack.us/img215/4610/fehlera.png)

Darum die Frage, was an meinem Ansatz falsch ist .. oder muss ich erst beim DBGrid in der DrawColumnCell die Werte ändern?

Gruß und frohe Ostern.

haentschman 2. Apr 2010 20:58

Re: Werte im DBGrid ändern
 
Hallo :hi:

Versuche mal folgendes:
1. Deine Versuche weglassen
2. nach dem Erzeugen des Datasets oder im OnCreate des Formulars
Delphi-Quellcode:
TDateTimeField(cdsBlubba.FieldByName('datum')).DisplayFormat:='dd.mm.yyyy';
3. dann sind alle Werte des Feldes Datum des Datasets cdsBlubba entsprechend des Formatstrings angepaßt

PS:
- solange das Dataset existiert bleibt die Formatierung bestehen. Auch nach Datenänderung.
- es gibt auch z.B. TNumericField wo man z.B. Floatwerte in der Darstellung formatieren kann.

ob der FormatString so paßt mußt du probieren.

Nachfrage: liegt das Datum in der DB als String oder als Date Wert ? Im Falle des Strings funktioniert das nicht :roll:

aurikel_Max 2. Apr 2010 21:26

Re: Werte im DBGrid ändern
 
Zitat:

Zitat von haentschman
Hallo :hi:

Versuche mal folgendes:
1. Deine Versuche weglassen
2. nach dem Erzeugen des Datasets oder im OnCreate des Formulars
Delphi-Quellcode:
TDateTimeField(cdsBlubba.FieldByName('datum')).DisplayFormat:='dd.mm.yyyy';
3. dann sind alle Werte des Feldes Datum des Datasets cdsBlubba entsprechend des Formatstrings angepaßt

PS:
- solange das Dataset existiert bleibt die Formatierung bestehen. Auch nach Datenänderung.
- es gibt auch z.B. TNumericField wo man z.B. Floatwerte in der Darstellung formatieren kann.

ob der FormatString so paßt mußt du probieren.

Nachfrage: liegt das Datum in der DB als String oder als Date Wert ? Im Falle des Strings funktioniert das nicht :roll:

Das Datum wurde ursprünglich als String gespeichert (da das bisher für meine Zwecke ausgereicht hat), habs gerad geändert. Als es als String vorlag hab ich eine Exception bekommen, seitdem es als Datum gespeichert wird, tritt keine Exception mehr auf, allerdings sind die Werte in dem DBGrid jetzt alle: ddmmyyyy :D

Danke (schonmal) für Deine/Eure Hilfe. :)

haentschman 3. Apr 2010 07:59

Re: Werte im DBGrid ändern
 
Guten Morgen...
Zitat:

allerdings sind die Werte in dem DBGrid jetzt alle: ddmmyyyy
:gruebel: mit deiner Funktion oder mit TDateTimeField ?

aurikel_Max 3. Apr 2010 09:08

Re: Werte im DBGrid ändern
 
Zitat:

Zitat von haentschman
Guten Morgen...
Zitat:

allerdings sind die Werte in dem DBGrid jetzt alle: ddmmyyyy
:gruebel: mit deiner Funktion oder mit TDateTimeField ?

Zitat:

TDateTimeField(cdsBlubba.FieldByName('datum')).Dis playFormat:='dd.mm.yyyy';
Wenn ich den Code 1:1 übernehme und den Namen von cdsBlubba anpasse, sind in meinem DBGrid alle Werte unter Datum "ddmmyyyy". (meine Funktion benutz ich hierbei nicht mehr)

http://img708.imageshack.us/img708/1356/datum.png

haentschman 3. Apr 2010 10:49

Re: Werte im DBGrid ändern
 
Nun...

ich habe es gerade mal probiert und exakt das Ergebnis erhalten was zu erwarten war. Falsch war allerdings, daß die Formatierung auch nach dem Neuladen des Datasets beibehalten wird. Es muß wieder neu gesetzt werden. Kann es sein, daß deine Spaltenbreite einfach nicht zur Darstellung ausreicht ? Ansonsten fällt mir nichts dazu ein. :gruebel:

Edit:
Zitat:

und den Namen von cdsBlubba anpasse
- :gruebel: Ich denke, daß Dataset heißt so ?
- Welche Komponente ist das Dataset ? (Standard / Fremdkomponente)

Edit2:
...auch wenn der fehlende Buchstabe bereits nicht kopiert wurde :stupid:

aurikel_Max 3. Apr 2010 11:07

Re: Werte im DBGrid ändern
 
Zitat:

Zitat von haentschman
Zitat:

und den Namen von cdsBlubba anpasse
- :gruebel: Ich denke, daß Dataset heißt so ?
- Welche Komonente ist das Dataset ? (Standard / Fremdkomponente)

Das Dataset heißt anders, ich benutze andere Namen hier im Forum.
Das Dataset ist ein TClientDataSet.

Der ganze Zugriff erfolgt über: TDISQLite3Database -> TDISQLite3UniDirQuery -> TDataSetProvider -> TClientDataSet -> TDataSource -> TDBGrid.
(außer TDISQLite3Database und TDISQLite3UniDirQuery sind alle anderen Standardkomponenten)


Liebe Grüße.

haentschman 3. Apr 2010 11:15

Re: Werte im DBGrid ändern
 
hmmm...

mit SQLite kenn ich mich nicht wirklich aus. Aber die TDISQLite3UniDirQuery ist doch ein Dataset oder ? Warum mußt du noch einen Provider und ein ClientDataset zwischen der Query und die Datasource basteln ? Versuch mal die Formatierung auf die Query und den Provider und das ClientDataset weglassen. Das heißt die Datasource direkt an die TDISQLite3UniDirQuery.

aurikel_Max 3. Apr 2010 11:35

Re: Werte im DBGrid ändern
 
Zitat:

Zitat von haentschman
hmmm...

mit SQLite kenn ich mich nicht wirklich aus. Aber die TDISQLite3UniDirQuery ist doch ein Dataset oder ? Warum mußt du noch einen Provider und ein ClientDataset zwischen der Query und die Datasource basteln ? Versuch mal die Formatierung auf die Query und den Provider und das ClientDataset weglassen. Das heißt die Datasource direkt an die TDISQLite3UniDirQuery.

Wenn ich die TDSIQLite3UniDirQuery mit dem Datasource verbinde, bekomme ich die Fehlermeldung: "Operation not allowed on a unidirectional dataset."

Allerdings machen "wir" Fortschritte, ich hab gerad

Delphi-Quellcode:
procedure TfmBlubba.dsqlBlubbaQueryAfterOpen(DataSet: TDataSet);
begin
  TDateTimeField(dsqlBlubbaQuery.FieldByName('Datum')).DisplayFormat := 'dd.mm.yyyy';
end;
gemacht, das hat auch einen gewissen Erfolg, jetzt steht in meinem DBGrid unter Datum allerdings nur "2010" (in 6 Einträgen). (wenn ich die Spalte zur Laufzeit vergrößere, steht da trotzdem nur 2010)

haentschman 3. Apr 2010 11:43

Re: Werte im DBGrid ändern
 
und wenn du statt der UniDirQuery eine "normale" Query verwendest ?

Frage: die TDISQL stammen woher ? Schon mal Zeos als alternative Zugriffskomponenten probiert ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr.
Seite 1 von 5  1 23     Letzte »    

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-2025 by Thomas Breitkreuz