Avatar billede mugs Novice
28. juli 2004 - 16:57 Der er 15 kommentarer og
1 løsning

En periode der ligger inde i en anden periode

Jeg har "gjort" en database der styrer medarbejdernes forsikring, når disse er på tjenesterejse i udlandet. Bl.a. er der 2 felter AFREJSE og HJEMKOMST, der som navnene siger fortæller tjenesterejsens periode. Perioden kan strække sig fra 1 dag til flere måneder. Et eksempel:

AFREJSE: 2004-06-01
HJEMKOMST: 2004-06-30

AFREJSE: 2004-05-01
HJEMKOMST: 2004-10-31

På baggrund af disse 2 datoer er der så nogle beregnende udtryk, der beregner forsikringspræmien for den samlede tjenesterejse.

Problemet er nu, at jeg skal bruge en oversigt, der viser forbruget indenfor en valgfri måned. Hvis jeg f.eks med et kriterie indsætter >=2004-06-01 for AFREJSE og <=2004-06-30, kommer der kun een post ud, idet AFREJSE for tjenesterejse 2004-05-01 jo ligger før kriteriet.Jeg skal også have forbruget for den del af af tjenesterensen der starter 2005-05-01, der ligger indenfor kriteriet.

Jeg mener der er funktioner "in" og "not in", der måler om en periode ligger inde i en anden periode.

Jeg er sikker på, at jeg også har set et eksempel på eksperten, men kan ikke finde det. Og da jeg er lidt presset på tid...
Avatar billede hekla Nybegynder
28. juli 2004 - 17:36 #1
Kan du ikke loope igennem dine poster og lave de 4 mulige cases og en else, eller sætte de tilsvarende kriterier ind i en forespørgsel:
If Afrejse < måedens startdato and Hjemkomst > månedens slutdato then
...
If Afrejse < månedens startdato and Hjemkomst < månedens slutdato  And > Månedens Startdato then
....
If Afrejse > Månedens startdato And < månedens slutdato and Hjemkomst > månedens slutdato then
....
If Afrejse < Månedens startdato and < månedens slutdato and Hjemkomst < månedens slutdato then
...
Else
Endif
Avatar billede mugs Novice
28. juli 2004 - 20:50 #2
Hej hekla.

Tak for forslaget. Efter at have arbejdet med databasen siden imorges, og når jeg ser på de forespørgsler / rapporter jeg har lavet, sammenlignet med de specifikationer jeg har fået, føler jeg mig mere og mere overbevist om, disse til fulde opfylder de oprindelige kravsspecifikationer. Jeg vil TOR se "bestilleren" dybt i øjnene og spørge, om denne forespørgsel er så vigtig.

Jeg har en fornemmelse af, det er nice to know, og ikke need to know.

Jeg vil dog bede dig om lidt tålmodighed, og lade spørgsmålet stå åbent et par dage endnu.
Avatar billede hekla Nybegynder
28. juli 2004 - 21:08 #3
Forespørgslen er vel ikke så svær. Det er bare kriterier i fire rækker :o)
Avatar billede mugs Novice
28. juli 2004 - 21:11 #4
Det er korrekt. Men jeg er simpelthen så firkantet i øjnene, at jeg snart ikke kan se skoven for bare træer, og endnu mindre have at gøre med disse If.. Then.., dem har jeg aldrig været gode venner med :o)
Avatar billede nih Novice
28. juli 2004 - 22:44 #5
Hej Mugs

Jeg har en løsning:
Den kræver at du opretter en tabel med ALLE datoer i:
Opret en tabel: AlleDatoer med eet felt 'dato'

Sub IndsetDatoer()
    Dim rs As dao.Recordset
    Dim dato As Date
    Set rs = CurrentDb.OpenRecordset("alledatoer")
    dato = #1/1/2000#
    For i = 0 To 10000
        rs.AddNew
        rs(0) = dato + i
        rs.Update
    Next i
End Sub

Herefter kan du lave en foresp:
Jeg har kaldt din eksiterende tabel MugsTabel: (navn, afrejse, hjemkomst)

SELECT MugsTabel.navn, Count(AlleDatoer.dato) AS AntalOfdato, Year([dato]) & "-" & Month([dato]) AS Udtryk1
FROM AlleDatoer, MugsTabel
WHERE (((MugsTabel.affrejse)<[dato]) AND ((MugsTabel.Hjemkomst)>[dato]))
GROUP BY MugsTabel.navn, Year([dato]) & "-" & Month([dato]);

Niels
Avatar billede nih Novice
28. juli 2004 - 22:46 #6
Der er mange modstandere af sådan en tabel med alle datoer i, men den er tit nemmere end at kode sig ud af det. Desuden er harddisk MB ikke så dyre :)
Avatar billede hekla Nybegynder
28. juli 2004 - 23:57 #7
Den bliver tung, hvis man skal have den over et netværk
Avatar billede nih Novice
29. juli 2004 - 07:43 #8
Godmorgen

Hekla -> Ikke for at være uhøflig, men er det noget du ved eller tror ??
Avatar billede hekla Nybegynder
29. juli 2004 - 18:07 #9
nih >> Det er noget jeg tror. Hvor meget fylder en tabel med 10.000 datoer (er det 8 byte/dato + noget overhead)?
Avatar billede mugs Novice
29. juli 2004 - 18:09 #10
Kæmper stadigvæk. Fakta er dog, at databasen med en tabel med 10000 datoer fylder 775 Kb.
Avatar billede nih Novice
29. juli 2004 - 21:08 #11
Jeg mener ikke det er en optimal løsning at have en ekstra tabel med 10.000 poster - men jeg er sikker på det er det nemmeste.
Så kan man opveje fordele ulemper, og jeg mener fordelene: hastighed i beregninger og forespørgsler, overskuelighed osv. vejer tungere end nettrafik og harddiskplads på knap 1 MB.

Niels
Avatar billede nih Novice
29. juli 2004 - 21:11 #12
Og det er også bare noget jeg tror :)
Avatar billede nih Novice
02. august 2004 - 23:22 #13
Hva så Mugs - er du kommet videre ??

Niels
Avatar billede mugs Novice
03. august 2004 - 05:37 #14
Hej Niels

Egentlig ikke. Jeg har prøvet at implementere din SQL, men kan ikke få det til at give det rigtige resultat. Db ligger på min arbejdsplads, hvor jeg i de sidste dage ikke har haft ro til at forsøge mig. Vi fik ny Chef i FRE, så det giver en masse administrativ uro at sætte ham ind i tingene.
Men jeg prøver igen idag, og I vil få en tilbagemelding iaften.

/ Mogens
Avatar billede mugs Novice
03. august 2004 - 14:59 #15
Så lykkedes det. Man skal bare blive tilstrækkelig gal i skralden. Jeg brugte Niels' løsning, og når bare feltnavnene bliver stavet korrekt fungerer det perfekt.
Tak for hjælpen til Jer begge.
Avatar billede nih Novice
03. august 2004 - 15:19 #16
Selv tak :o)

Niels
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester