14. april 2005 - 00:15Der er
18 kommentarer og 1 løsning
Month(Now) funktion i forhold til start- og slutmåned i database
Jeg har en produktdabase (Access) med nogle produkter, hvor hvert enkelt produkt har en start måned [start] og en slut måned [slut], hvor produktet er i produktion. Datatypen på de to felter er sat til Number (Integer). [start] kan f.eks. være 1 (Januar) og [slut] kan f.eks. være 3 (marts), men start kan også være 11 (november) og slut 2 (februar). Jeg vil vise listen af produkter som er produktion i forhold til den måned vi er i. Så hvis vi er i april måned (4), så skal alle produkter der ligger inde for dette område vises. Da årstal ikke skal indgå har jeg brugt month(now) funktionen og når jeg looper igennem databasen tjekker jeg på følgende måde for at se om jeg ligger inden for intervallerne:
if MyMonthVar>=rs.Fields("start") and MyMonthVar<=rs.Fields("slut") then
hvor MyMonthVar = Month(Now).
Mit problem er, at det virker fint så længe [start] er større end [slut], men hvis [start] f.eks. er 12 og [slut] er 5, så burde produktet vises da vi kun er i april (4), men jeg fejler på det første udtryk, da MyMonthVar (4) er mindre end [start] som er lig 12. Hvordan løser jeg lige dette problem???????
Det du ønsker er måske følgende: If rs.Fields("start") < rs.Fields("slut") then If MyMonthVar>=rs.Fields("start") And MyMonthVar<=rs.Fields("slut") Then //her er produktet i produktion Else //her er produktet ikke i produktion End If Else If rs.Fields("start") > rs.Fields("slut") then If MyMonthVar<=rs.Fields("start") And MyMonthVar>=rs.Fields("slut") Then //her er produktet i produktion Else //her er produktet ikke i produktion End If Else If MyMonthVar = rs.Fields("start") Then //her er produktet i produktion Else //her er produktet ikke i produktion End If End If
Men du har ikke et tilfælde hvor start er fx januar 2005 og slut er februar 2006 vel? For så holder det ikke! Afhængig af hvad du bruger den start og slut værdi til ellers. Så ville jeg overveje at lave dem som dato felter i databasen. For så kan du teste dem i din sql på følgende måde dagsDato = Date SQL = Select * From din_tabel Where #"&dagsDato&"# Between start And Slut"
Lige en rettelse til koden 06:59:30 ------ If rs.Fields("start") < rs.Fields("slut") then If MyMonthVar>=rs.Fields("start") And MyMonthVar<=rs.Fields("slut") Then //her er produktet i produktion Else //her er produktet ikke i produktion End If Else If rs.Fields("start") > rs.Fields("slut") then If MyMonthVar>=rs.Fields("start") Or MyMonthVar<=rs.Fields("slut") Then //her er produktet i produktion Else //her er produktet ikke i produktion End If Else If MyMonthVar = rs.Fields("start") Then //her er produktet i produktion Else //her er produktet ikke i produktion End If End If
busschou -> Bortset fra Else IF vs. ElseIf, så lader det til at det virker. Send din løsning som et svar, så du kan få dine point. Det er sikkert også en god ide at ændre felterne til date i stedet for integer og samtidig tjekke mod faktisk dato i stedet for måned. Det gør systemet mere fleksibelt da jeg nu også kan sætte et produkt i produktion midt på måneden eller i lutningen af måneden. Tak for hjælpen.
argh ja syntaks...hvorfor skal den også altid variere fra sprog til sprog ;o) Men ideen kunne vel gennemskues :o) Men det er jo ikke bedre end du kan sætte et produkt i produktion i "lutningen" af måneden hehe ;o) Men her er et svar
Busschou - ups, et problem med date og grunden til at jeg ikke valgte date typen i første omgang er, at jeg ikke vil have årstallet med. Hvis jeg har årstallet med bliver jeg nødt til at opdatere start og slut hvert år for hver enkel post, gør jeg ikke??? Er det i det hele taget muligt at bruge date typen og kun vise dag og måned?
Hvis jeg har lagt en start dato ind i databasen 10-10-2005 og slut dato ind som 11-11-2005, så vil jeg jo fejle med date funktionen når vi kommer inden for dette interval i 2006 på grund af følgende:
If MyDateVar>=rs.Fields("start") And MyDateVar<=rs.Fields("slut") Then
MyDateVar vil jo i 2006 være større en slut som ligger med 11-11-2005. Har jeg ikke ret???
Du kan også hive dem ud af din sql som de er nu på følgende vis ----- thisMonth = Month(Date) SQL = "Select * From produkter Where ("&thisMonth&">=start And "&thisMonth&"<=slut) Or ("&thisMonth&">=start Or "&thisMonth&"<=slut)"
Nå, jeg tror jeg holder mig til month() funktionen i første omgang og så må jeg se om jeg kan komme på en bedre løsning senere. Nu skal du have dine velfortjente point. Endnu en gang tak for hjælpen.
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.