AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Schleife über Datumsfeld
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife über Datumsfeld

Ein Thema von torud · begonnen am 3. Nov 2005 · letzter Beitrag vom 3. Nov 2005
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Schleife über Datumsfeld

  Alt 3. Nov 2005, 09:16
Datenbank: DBase • Zugriff über: TTable
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...
Danke
Tom
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Schleife über Datumsfeld

  Alt 3. Nov 2005, 16:59
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...
(bin halt noch nicht so fix in Delphi u. SQL...)


Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Schleife über Datumsfeld

  Alt 3. Nov 2005, 17:35
Ja ich kann eine Query nutzen, ahabe es selbst auch schon versucht, bin aber kläglich gescheitert...Leider
Danke
Tom
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Schleife über Datumsfeld

  Alt 3. Nov 2005, 18:35
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
  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 16:16 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