![]() |
Re: Daten aller Donnerstage im Monat
@Wolfgang: Dann weißt du auch dass mir (d)ein Delphi Code absolut nichts nutzt?
In Delphi könnte ich mir sone Funktion auch schreiben. Aber es geht darum, dass ich keine Ahnung habe wie ich es in SQL machen soll @himitsu: Es gibt kein 'datumsfeld'.. Das haben mkinzler und ich schon mehrmals versucht zu erklären :| |
Re: Daten aller Donnerstage im Monat
wie jetzt,
du hast keine Tabelle und willst von der DB nur jeweils das Datum mit einem bestimmten Wochentag aus dem Nichts bekommen? |
Re: Daten aller Donnerstage im Monat
Zitat:
|
Re: Daten aller Donnerstage im Monat
Zitat:
|
Re: Daten aller Donnerstage im Monat
Dirty hack:
SQL-Code:
CREATE OR ALTER PROCEDURE WOCHENTAGEEINESMONATS (
monat smallint, wtag smallint, jahr integer) returns ( datum date) as declare variable m smallint; begin select extract( weekday from cast ( :jahr || '.' || :monat || '.01' as date)) from rdb$database into :m; m = MOD( :wtag + :m - 2, 7); while (:m <= 31 /* mit berechneten Maxdatum des Monats ersetzen */) do begin datum = cast( :jahr || '.' || :monat || '.' || m as date); m = :m + 7; suspend; end end |
Re: Daten aller Donnerstage im Monat
...
|
Re: Daten aller Donnerstage im Monat
ist Käse wenn man nicht lesen kann :oops:
alex |
Re: Daten aller Donnerstage im Monat
Hi,
Danke an alle und vorallem an mkinzler und omata die sich viel Mühe gemacht haben :zwinker: Ich wollte das ursprünglich über SQL lösen weil ich diese Daten in FreeReport brauchte und es eben um einiges einfacher ist die Daten in SQL mitzuselektieren als sie in Delphi noch mühsam in die Datensätze einfzufügen. Habe mich allerdings jetzt doch dafür entschieden die Berechnung der Wochentage in Delphi durchzuführen. Für die Leute dies interessiert poste ich hier jetzt die Schlüsselfunktion die die Daten aller (z.B.) Donnerstage im Januar des aktuellen Jahres in eine TList<TDate> schreibt.
Delphi-Quellcode:
procedure AddWochentage(AMonat, AWochentag: Byte; ADestList: TList<Date>);
var start: TDateTime; i: Integer; begin start := EncodeDate(YearOf(now),AMonat,1); for i := 0 to DaysInMonth(start) - 1 do begin if DayOfWeek(start)-1 = AWochentag then ADestList.Add(start); start := IncDay(start); end; end; // Aufruf: var AList: TList<TDate>; begin // .. AList erstellen .. AddWochentage(1,4,AList); end; // Ergebnis: // - 07.01.10 // - 14.01.10 // - 21.01.10 // - 28.01.10 |
Re: Daten aller Donnerstage im Monat
man könnte es notfalls noch etwas kürzen
Delphi-Quellcode:
procedure AddWochentage(AMonat, AWochentag: Byte; ADestList: TList<Date>);
var start: TDateTime; i: Integer; begin start := EncodeDate(YearOf(Now), AMonat, 1); for i := 0 to DaysInMonth(start) - 1 do if DayOfWeek(start + i) - 1 = AWochentag then ADestList.Add(start + i); end; |
Re: Daten aller Donnerstage im Monat
Mh, dann wird doch start nicht hochgezählt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 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-2025 by Thomas Breitkreuz