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....
Annonceindlæg fra Infor
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
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 ---
12. august 2010 - 14:38
#3
" = "& rs("antal") &" skal jo så være " = "& objRs("antal") &" :)
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?
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
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
12. august 2010 - 16:47
#7
bare do while startdato <> slutdato loop skal fjernes .. eller udkommenteres
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ærelser" aktueldato = dateadd("D",1,aktueldato) 'loop Set objRs = objConn.Execute(strSQL) %>
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
05. oktober 2010 - 20:56
#10
therealyoda, gider du lægge et svar, så får du nogle points.
06. oktober 2010 - 08:36
#11
Jada.. lige her..
Kurser inden for grundlæggende programmering