Avatar billede CRavnkilde Nybegynder
10. august 2010 - 14:49 Der er 10 kommentarer og
1 løsning

Hjælp til tæller (countif) i database

Jeg har en tabel med to kolonner: "check-in" og "check-out", som bruges til registrering af mødedeltagere. Jeg vil gerne kunne trække en oversigt over hvor mange værelser, jeg har brug for.

Hvis check-in for den første person er 15-09-2010 og check-out er 17-09-2010 giver det flg. resultat:

15-09-2010 = 1 vær
16-09-2010 = 1 vær

den sidste dag (17-09-2010) skal ikke tælles med, da personen ikke overnatter. Funktionen skal naturligvis tælle alle records og akkumulere antal værelser for hver dato.

Jeg har siddet og rodet med noget DateDiff, men er gået total i stå.

Er der nogle, der kan hjælpe mig lidt på vej....
Avatar billede The Real Yoda Juniormester
11. august 2010 - 17:29 #1
startdato = "01-09-2010"
slutdato = "01-10-2010"
aktueldato = startdato

do while dato <> slutdato

  set rs=conn.execute("select count(*) as antal from tabel where check-in <= '"&aktueldato&"' and check-out>'"&aktueldato&"'"

  response.write "<br>"&aktueldato&" = "&rs("antal")&" Værelser"


  aktueldato = dateadd("D",1,aktueldato)
loop

hvis ovenstående ikke virker .. så skal du blot lige ha lavet datoerne om til datestamp ..

startdato = "20100901"
slutdato = "20101001"
aktueldato = startdato

do while dato <> slutdato

  set rs=conn.execute("select count(*) as antal from tabel where check-in <= '"&aktueldato&"' and check-out>'"&aktueldato&"'"

  response.write "<br>"&aktueldato&" = "&rs("antal")&" Værelser"

  aktueldatoalm = right(aktueldato,2)&"-"&right(left(aktueldato,6),2)&"-"&left(aktueldato,4)

  aktueldatoalm = dateadd("D",1,aktueldatoalm)
  aktueldato = year(aktueldatoalm)&right("0"&month(aktueldato),2)&right("0"&day(aktueldato),2)
 
loop

Dette kræver dog bare at dine datoer også ligger sådan i databasen
Avatar billede CRavnkilde Nybegynder
12. august 2010 - 10:19 #2
Hej therealyoda! Hvor fint at du gider hjælpe.

Jeg har tilrettet din kode en smule - se nedenfor - og prøvet at køre koden, men får en fejl:

Type mismatch: 'rs' i linien med response.write.

Kan du se hvad fejlen er?

--- start kode ---

<%
' Database forbindelse
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("../../database/11243.mdb")

' Recordset object
Set objRs = Server.CreateObject("ADODB.Recordset")

' SQL
strSQL= "SELECT Participants.RegID, Participants.ParticipantID AS Participants_ParticipantID, Participants.Firstname, Participants.Familyname, Participants.Position, Participants.Dinner, Participants.DinnerHotel, Participants.Email, Participants.Registrationdate, ArrivalDetails.Id AS ArrivalDetails_Id, ArrivalDetails.ParticipantID AS ArrivalDetails_ParticipantID, ArrivalDetails.ArrivalDate, ArrivalDetails.ArrivalHour, ArrivalDetails.ArrivalMinute, ArrivalDetails.ArrivalBy, ArrivalDetails.ArrivalFlightNo, DepartureDetails.Id AS DepartureDetails_Id, DepartureDetails.ParticipantID AS DepartureDetails_ParticipantID, DepartureDetails.DepartureDate, DepartureDetails.DepartureHour, DepartureDetails.DepartureMinute, DepartureDetails.DepartureBy, DepartureDetails.DepartureFlightNo, RoomReservation.Id AS RoomReservation_Id, RoomReservation.ParticipantID AS RoomReservation_ParticipantID, RoomReservation.Checkin, RoomReservation.Checkout, RoomReservation.Nights, RoomReservation.Remarks, RoomReservation.DiateryPreferences FROM ((Participants INNER JOIN DepartureDetails ON Participants.ParticipantID = DepartureDetails.ParticipantID) INNER JOIN RoomReservation ON Participants.ParticipantID = RoomReservation.ParticipantID) INNER JOIN ArrivalDetails ON Participants.ParticipantID = ArrivalDetails.ParticipantID ORDER BY Participants.Familyname;"

startdato = "01-09-2010"
slutdato = "01-10-2010"
aktueldato = startdato

do while dato <> slutdato

  set objRs=objConn.execute("select count(*) as antal from RoomReservation where Checkin <= '"&aktueldato&"' and Checkout>'"&aktueldato&"'")

  response.write "<br>"&aktueldato&" = "& rs("antal") &" Vaerelser"

  aktueldato = dateadd("D",1,aktueldato)
loop

Set objRs = objConn.Execute(strSQL)
'Response.Write strSQL

%>

--- stop kode ---
Avatar billede The Real Yoda Juniormester
12. august 2010 - 14:38 #3
" = "& rs("antal") &"

skal jo så være
" = "& objRs("antal") &"


:)
Avatar billede CRavnkilde Nybegynder
12. august 2010 - 15:11 #4
Har rettet det, men siden timer out. Har sat timeout op til 360 sek. Har ca. 50 records i databasen lige nu.

Noget forslag?
Avatar billede The Real Yoda Juniormester
12. august 2010 - 15:37 #5
prøv at fjerne loopet .. og se om den udskriver en dato med værelse

ellers skal du nok over i den anden måde at gøre det på som jeg skrev nedenunder
Avatar billede CRavnkilde Nybegynder
12. august 2010 - 16:21 #6
@ fjerne loop: gør jeg det ved at fjerne disse tre linier?:

do while startdato <> slutdato
aktueldato = dateadd("D",1,aktueldato)
loop
Avatar billede The Real Yoda Juniormester
12. august 2010 - 16:47 #7
bare

do while startdato <> slutdato

loop

skal fjernes .. eller udkommenteres
Avatar billede CRavnkilde Nybegynder
13. august 2010 - 10:23 #8
Det går fremad! Uden loop'et virker den - Yes! Men med loop virker den ikke, dvs. den timer out. Hvad kan vi gøre?

Jeg har i øvrigt opdaget at datoerne er anført sådan her i db'en:
2010/06-13

---

min nuværende kode:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
' Database forbindelse
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("../../database/11243.mdb")

' Recordset object
Set objRs = Server.CreateObject("ADODB.Recordset")

' SQL
strSQL= "SELECT osv;"

startdato = "2010/09/15"
slutdato = "2010/09/23"
aktueldato = startdato

'do while startdato <> slutdato

  set objRs=objConn.execute("select count(*) as antal from RoomReservation where Checkin <= '"&aktueldato&"' and Checkout>'"&aktueldato&"'")

      response.write "<br>"&aktueldato&" = "& objRs("antal") &" V&aelig;relser"

  aktueldato = dateadd("D",1,aktueldato)
'loop

Set objRs = objConn.Execute(strSQL)

%>
Avatar billede CRavnkilde Nybegynder
13. august 2010 - 10:24 #9
@ Jeg har i øvrigt opdaget at datoerne er anført sådan her i db'en:
2010/06-13


Datoerne står sådan her selvfølgelig:

2010/09/11
Avatar billede CRavnkilde Nybegynder
05. oktober 2010 - 20:56 #10
therealyoda, gider du lægge et svar, så får du nogle points.
Avatar billede The Real Yoda Juniormester
06. oktober 2010 - 08:36 #11
Jada.. lige her..
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