Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Schleife über Datumsfeld (https://www.delphipraxis.net/56281-schleife-ueber-datumsfeld.html)

torud 3. Nov 2005 09:16

Datenbank: DBase • Zugriff über: TTable

Schleife über Datumsfeld
 
Hallo Leute!

Ich habe 2 Probleme. Ich habe eine DBF-Tabelle in der sich ein Feld befindet, worin ein Datum abgelegt wird. Da das Programm auf unterschiedlichen Rechnern mit unterschiedlichen Datumsformaten läuft, habe ich in der DB nun Daten mit einem 2-stelligen Jahr und mit einem 4-stelligen Jahr drin.

1. Ich würde gern das Datum einheitlich gestalten.

2. Ich würde gern eine Statistik erstellen. Darin soll folgendes geschehen. Es wird das älteste Datum gesucht und das neueste. Anschliessend müssen die Jahre und Monate herausgefunden werden und dann in einer weiteren Schleife jeweils die Datensätze passend zu Monat und Jahr aufgelistet werden.

Ergebnis soll dann ungefähr so aussehen:

Monat/Jahr Umsatz
01/2005 115,00 Euro
02/2005 230,00 Euro

Kann mir jemand folgen? Das Problem, dass ich habe ist, dass ich dies immer dynamisch halten muss, da ich nicht weiss, wieviel Monate und Jahr ich habe, da es das Datum ja immer weiter geht und diese Routine bei jedem Programmstart durchlafen werden soll. Ich würde mich freuen, wenn mir jemand einen Wink geben könnte, denn ich habe noch nicht mal den Hauch eines Denkansatzes...

Pfoto 3. Nov 2005 16:59

Re: Schleife über Datumsfeld
 
Benutzt man nicht einfach eine "Query" für sowas?
(Habe keine Erfahrung, ob DBase dies unterstützt, aber müsste doch...)

In einer Query könnte man die Summe pro Monate bilden und nach Monat, Jahr sortieren.

Wenn du Querys einsetzen kannst/willst, werde ich mir mal genauere Gedanken über die Syntax machen, falls nicht ein Profi schneller ist... :wink:
(bin halt noch nicht so fix in Delphi u. SQL...)


Gruß
Pfoto

torud 3. Nov 2005 17:35

Re: Schleife über Datumsfeld
 
Ja ich kann eine Query nutzen, ahabe es selbst auch schon versucht, bin aber kläglich gescheitert...Leider

marabu 3. Nov 2005 18:35

Re: Schleife über Datumsfeld
 
Hallo ihr beiden.

Beim ersten Problem von Tom ist mir nicht ganz klar, wie das Datum gespeichert ist. In DATE-Feldern steht das Datum bei DBase immer in der Form YYYYMMDD. Da zwei- und vierstellige Jahreszahlen vorliegen, gehe ich davon aus, dass Jahr und Monat bereits in einzelnen Spalten abgelegt sind. Trotzdem sei noch darauf hingewiesen, dass beim Zugriff über LOCALSQL nur über echte Spaltenwerte aggregiert werden kann, berechnete Felder sind nicht zulässig. Ist also das Datum in einem DATE-Feld gespeichert, dann muss die Tabelle für die Auswertung entweder erweitert werden:

SQL-Code:
alter table umsatz
  add jahr smallint,
  add monat smallint

update umsatz set
  jahr = extract(year from datum),
  monat = extract(month from datum)
Oder man muss mit einer local view arbeiten. Dazu speichert man folgende view definition in einer Datei UMSATZ.SQL:

SQL-Code:
select extract(year from datum) as jahr,
  extract(month from datum) as monat, menge
from umsatz
Anschließend führt man dann die eigentliche query aus:

SQL-Code:
select jahr, monat, sum(menge) as summe
from "umsatz.sql"
group by jahr, monat
order by jahr, monat
Wenn die Spalten JAHR und MONAT bereits in der Basis-Tabelle existieren, dann kann man statt der local view natürlich gleich die Tabelle verwenden:

SQL-Code:
select jahr, monat, sum(menge) as summe
from umsatz
group by jahr, monat
order by jahr, monat
Die zwei-und vierstelligen Jahreszahlen müssen zuerst normiert werden. Das kann so geschehen:

SQL-Code:
update umsatz
set jahr = jahr + 1900
where jahr between 6 and 99

update umsatz
set jahr = jahr + 2000
where jahr between 1 and 5
Im Programm sollte für die Normierung besser eine Parameter-Query verwendet werden, da meine Festwerte im kommenden Jahr ein falsches Ergebnis produzieren würden.

Grüße vom marabu


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