Det drejer sig om mit \'evighedsprojekt\' en vagtplan. Jeg har en tabel med 3 felter:Dato, vagt, navn.
Mit udtræk skal vise antal vagter pr mand pr 6 ugers periode. I Access kan man lave en SQL: SELECT ([vagtplan_res]![dato]+1)-(([vagtplan_res]![dato]+1) Mod 42) AS periode, Min(vagtplan_res.Dato) AS start, First(vagtplan_res.Navn) AS Navn, First(vagtplan_res.Vagt) AS Vagt, Count(vagtplan_res.Vagt) AS Antal_Vagt FROM vagtplan_res GROUP BY ([vagtplan_res]![dato]+1)-(([vagtplan_res]![dato]+1) Mod 42);
Hvor alle felter grupperes efter et beregnet felt: Periode. Jeg forventer ikke en færdig løsning, bare et hint til hvordan jeg skal gøre.
Jamen i Delphi fyrer du jo sådan set bare SQL statements af til din database, så du kan på sin vis gøre det samme - - siger jeg uden at kende noget til Access. Hvilken database kører du op mod? Skal du tælle noget sammen kan du bruge count. det bliver altså SELECT Count(et felt) AS Test Group by og order by er jo standard SQL. Skal du arbejde med datoer er det meget afhængigt af hvilken database du arbejder med, men både i Oracle og MSSQL er der en bunke tid/dato funktioner og konverterings/formaterings funktioner der gør livet let for dig.... altså bortset fra at man aldrig kan huske hvor hvad hører til :) A_C
A_C -> Jeg forsøger mig med paradox. Problemmet er at felter af \'date\' type kun kan +,-.. Jeg kan ikke *,/,\'MOD\' når datatypen er date. ik\' endnu ihvertfald ;)
- Men er der ikke en mulighed for at lave beregninger og brugerdef funktioner i Delphi/Paradox databaser ???? Det er lykkedes mig at lave noget lignede din vagtplan.
Jeg har aldrig brugt selve Access i sig selv, kun i forbindelse med Delphi, så jeg er ikke helt klar over hvad brugerdef funktioner er.
Vedr. beregninger definerer du bare din query. du kan selvfølge ændre sql statementet i runtime. Prøv at kigge på Adoquery delen i det jeg har sendt dig.
Det er fuldstændig det samme om du bruger Tquery eller Adoquery.
du finder et antal (count) mellem 2 datoer vha parametere. Disse parametere skal mit program kende i forvejen. I designtime vælger jeg en reference dato (1/1/1), og at vi kører med 6 ugers perioder. Når brugeren indtaster(vælger) et årstal, er det meningen at Query\'en skal spytte en liste ud på ca 9 poster (9 perioder á 6 uger=52) med navn og antal vagter.
Forespørgslen skulle se sådan ud: periode1 person1 vagt1 antal periode1 person1 vagt2 antal periode1 person2 vagt1 antal periode1 person2 vagt2 antal periode2 person1 vagt1 antal periode2 person1 vagt2 antal periode2 person2 vagt1 antal periode2 person2 vagt2 antal
Og så havde man jo lave et hav af muligheder for rapporter
Opret en ekstra kolonne/felt i din database der indeholder perioden.
Når du så indsætter en post sætter du programmet til at finde ud af hvilken periode datoen hører til og gemmer dette i periode feltet.
noget ala
if (DayOfTheYear>0 and DayOfTheYear<=42) then periode = 1 if (DayOfTheYear>42 and DayOfTheYear<=84) then periode = 2
etc. etc.
Herefter laver du bare sql som group by periode,navn
Din database vil selvfølgelig blive lidt større, men jeg tror det vil gå væsentlig hurtigere da den ikke skal lave modulus beregninger på samtlige poster.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.