Avatar billede muggen Nybegynder
14. april 2005 - 00:15 Der 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???????
Avatar billede kalp Novice
14. april 2005 - 00:38 #1
Du har skrevet hvis MyMonthVar er større eller ligmed start og MyMonthVar er mindre eller ligmed slut.

er det rigtigt?
Avatar billede busschou Praktikant
14. april 2005 - 06:59 #2
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
Avatar billede busschou Praktikant
14. april 2005 - 07:05 #3
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"
Avatar billede busschou Praktikant
14. april 2005 - 07:10 #4
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
Avatar billede muggen Nybegynder
14. april 2005 - 22:51 #5
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.
Avatar billede busschou Praktikant
14. april 2005 - 23:01 #6
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
Avatar billede muggen Nybegynder
14. april 2005 - 23:07 #7
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?
Avatar billede busschou Praktikant
14. april 2005 - 23:14 #8
Ja det er muligt kun at vise dag og måned kig her evt
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctday.asp
Der findes Day() og Month() funktioner som giver tallet på dagen eller måneden.
Hvorfor skulle du opdatere hvert år hvis du har årstallet med? Det forstår jeg ikke helt?
Avatar billede busschou Praktikant
14. april 2005 - 23:19 #9
Ahh tror jeg forstår nu...det er sådan noget sæson betinget noget og produktionen af et produkt finder altid sted samme tid hvert år?
Avatar billede muggen Nybegynder
14. april 2005 - 23:23 #10
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???
Avatar billede busschou Praktikant
14. april 2005 - 23:26 #11
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)"
Avatar billede busschou Praktikant
14. april 2005 - 23:27 #12
glem lige min sidste bemærkning... den går vist ikke godt alligevel! ..desværre
Avatar billede busschou Praktikant
14. april 2005 - 23:30 #13
jo du har ret.. det er ærgeligt for det ville gøre det nemmere at hente det med sql og Between..
Avatar billede muggen Nybegynder
14. april 2005 - 23:37 #14
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.
Avatar billede busschou Praktikant
14. april 2005 - 23:38 #15
det var så lidt:o)
Avatar billede busschou Praktikant
14. april 2005 - 23:48 #16
Må se om de points kommer nu jeg har svaret ;o)
Hvis du kommer på andet må du sige til
Avatar billede muggen Nybegynder
14. april 2005 - 23:51 #17
Der sker ingenting når jeg trykker på Accepter -hmmm
Avatar billede muggen Nybegynder
14. april 2005 - 23:52 #18
Der sker ingenting når jeg trykker på Accepter - hmmmm.
Avatar billede muggen Nybegynder
14. april 2005 - 23:52 #19
Ahhh, måske jeg lige skulle markere dit navn.
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
Kurser inden for grundlæggende programmering

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