Avatar billede Jman Praktikant
23. februar 2004 - 21:21 Der er 31 kommentarer og
1 løsning

Finde ud af om der er optaget og efterfølgende ledighed

Jeg har en rigtig tricky en:
Skal slå op i en accesDB om en valgt lørdag (StartDate) er ledig. -Altså om den ikke er mellem "FromDate" og "ToDate" i hver record hvor id = (valgt ID).
Hvis den valgte lørdag ikke er ledig, skal der komme en fejlmeddelelse.
Hvis lørdagen er ledig, kommer man til en bookingside, hvor der i en dropdownmenu skal kunne vælges hvor mange uger, der sammenhængede kan vælges inden næste optaede lørdag.

FromDate og ToDate er begge dato/tid-felter med kort datoformat
Avatar billede Jman Praktikant
23. februar 2004 - 21:33 #1
Come on guys ... Det er min sidste hurtle ;)
Avatar billede fennec Nybegynder
23. februar 2004 - 21:47 #2
set rs = conn.Execute("select * from booking where '"& StartDate &"' >= FromDate and '"& StartDate &"' <= Todate")

hvis der ikke bliver valgt noget er lørdagen ledig. Husk at have StartDate på det rigtige format.
Avatar billede Jman Praktikant
23. februar 2004 - 21:54 #3
lige nu ser min SQL således ud:
SQL = "Select * from booking where (sagsnummer=" & request.querystring("sagsnr") & ") AND ("&Cdate(StartDate)&" < FromDate AND "&Cdate(StartDate)&" > ToDate)"

Jeg får ingen fejl på den, men jeg at i DB'en er der booket (FromDate 07-02-2004) og (ToDate = 13-2-2004), så jeg burde få en fejl, når jeg spørger på 07-02-2004
Avatar billede eagleeye Praktikant
23. februar 2004 - 21:59 #4
Et forsøg skrivet i "fri" hånd så det muligt det lige skal rettes lidt til, men det er måske noget i den stil.


StartDate = Request.Form("startDate")
StartDateDB = Year(StartDate) & "-" & Month(StartDate) & "-" & Day(StartDate)
id = 32

SQL = "select * from tabelnavn where id = " & id & " and FromDate < #" & StartDateDB & "# AND ToDate > #" & StartDateDB & "#"
Set rs = Conn.Execute(SQL)
if not rs.EOF then
  'Fejl der var en dato i databasen.
  Response.Write "Fejl ingen ledige"
else
  'find den næste optaget
  SQL = "select top 1 * from tabelnavn where id = " & id & " and fromDate >= #" & StartDateDB & "# order by fromDate"
  Set rs = Conn.Execute(SQL)
  if rs.EOF then
    'Ingen slut dato, sæt max 10 uger frem
    slutDato = DateAdd("ww",10,StartDate)
  else
    slutDato = rs("fromDate")
  end if
%>
  <select name="uger">
  <option value="">Vælg antal uger</option>
<% uger=1
  StartDate = DateAdd("ww",1,StartDate)
  do while CDate(StarDate) <= CDate(slutDato) %>
    <option value="<%=uger%>"><%=uger%> til <%=StartDate%></option>
<%  StartDate = DateAdd("ww",1,StartDate)
    uger=uger+1
  loop
%>
  </select>
<%
end if
Avatar billede Jman Praktikant
23. februar 2004 - 22:11 #5
jeg kan se ideen... kigger lige hvorfor jeg får fejl p.t. vender lige tilbage ;)
Avatar billede Jman Praktikant
23. februar 2004 - 22:17 #6
select * from booking where sagsnummer = 83001 and fromdate < #07-02-2004# AND todate > #07-02-2004#
Microsoft VBScript runtime error '800a01a8'

Object required

/bookingTest.asp, line 61
Avatar billede Jman Praktikant
23. februar 2004 - 22:20 #7
prøver lige at smide min connectionstring ind ;)
Avatar billede eagleeye Praktikant
23. februar 2004 - 22:22 #8
Ja det nok en god ide :)
husk datoen skal formateres som yyyy-mm-dd eller mm-dd-yyyy via SQL og ikke som DK med dd-mm-yyyy, Access vil så bytte rundt på måned og dag.
Avatar billede Jman Praktikant
23. februar 2004 - 22:23 #9
ok - det hjalp da ... men den looper helt vildt deruda'.... kigger (også) selv videre
Avatar billede Jman Praktikant
23. februar 2004 - 22:24 #10
det med datoen vidste jeg ikke
Avatar billede eagleeye Praktikant
23. februar 2004 - 22:27 #11
den loop meget vildt :(

PRøv at rette loopet til dette så stopper den efter 50 gange:

do while CDate(StarDate) <= CDate(slutDato) and uger < 50
Avatar billede Jman Praktikant
23. februar 2004 - 22:27 #12
og et lille p.s. - Der bookes lørdag til fredag
Avatar billede Jman Praktikant
23. februar 2004 - 22:29 #13
det hjalp på loopingen :D
Avatar billede eagleeye Praktikant
23. februar 2004 - 22:35 #14
hehehe der er en stavefejl i samme linje :)
jeg har skrevet StartDate, der mangler t i StartDate, så prøv:

  do while CDate(StartDate) < CDate(slutDato) and uger < 50 %>
Avatar billede Jman Praktikant
23. februar 2004 - 22:37 #15
jeg behøver slet ikke så mange , så jeg har sat den ned til 5 :)

Den første if (rs.eof) ikke skal være not ... skal den ?
Avatar billede Jman Praktikant
23. februar 2004 - 22:40 #16
den skal jo melde fejl, hvis datoen findes i db'en
Avatar billede eagleeye Praktikant
23. februar 2004 - 22:40 #17
Jo det skal det være, den finder poster hvor datoen er taget. Så det er måske lidt omvendt :)

man kan skrive sql'ens where del om.
Avatar billede eagleeye Praktikant
23. februar 2004 - 22:42 #18
hmm SQL skal havde et lig med også :
SQL = "select * from booking where id = " & id & " and FromDate =< #" & StartDateDB & "# AND ToDate >= #" & StartDateDB & "#"
Avatar billede eagleeye Praktikant
23. februar 2004 - 22:43 #19
hmm FromDate =< #"  skal være FromDate <= #"
Avatar billede Jman Praktikant
23. februar 2004 - 22:51 #20
OK - så virker forespørgslen på om datoen er ledig... (har testet med d. 14-02-2004)
Jeg får så lov at kunne vælge 5 uger frem til d. 12-03-2004, selv om min næste post i DB'en er d. 28-02-2004 (?)
Avatar billede Jman Praktikant
23. februar 2004 - 22:52 #21
der burde den jo kun kunne give frem til d. 27-02-2004, som valgmulighed (igen med mente at det er fra fredag til lørdag)
Avatar billede eagleeye Praktikant
23. februar 2004 - 22:58 #22
ok, hvis jeg putter det i databasen, giver det en uge til den 21-02-2004??

(fredag til lørdag) er det så 27-02-2004 -> 28-02-2004
Avatar billede Jman Praktikant
23. februar 2004 - 22:59 #23
nej lørdag til fredag... eks. 14-02-2004 til 20-02-2004
Avatar billede Jman Praktikant
23. februar 2004 - 23:00 #24
det var vist mig der skrev forkert :/
Avatar billede eagleeye Praktikant
23. februar 2004 - 23:06 #25
ok, nå jeg er nød til at smutte for i aften så jeg håber du kommer vidre med det :)
Avatar billede Jman Praktikant
23. februar 2004 - 23:07 #26
ok - jeg kigger lidt videre ... skrive på tråden om jeg har givet op eller fundet løsningen... tak indtil nu-læg bare et svar :)
Avatar billede eagleeye Praktikant
23. februar 2004 - 23:11 #27
ok :)
God nat :)
Avatar billede Jman Praktikant
23. februar 2004 - 23:12 #28
god nat
Avatar billede Jman Praktikant
23. februar 2004 - 23:31 #29
jeg fandt den vist - det var en den slåfejl du havde beskrevet - men jeg havde slet ikke set indlægget ... DOH!
Avatar billede Jman Praktikant
24. februar 2004 - 15:12 #30
det funger bare - jeg er skideglad for det :)
Fik en ide til en forbedring, men ved ikke rigtigt, hvorfor det ikke virker...

Hvis datoen er optaget, vil jeg finde den førtkommende ledige lørdag:
SQL2 = "select top 1 * from booking where sagsnummer = " & id & " and todate >= #" & StartDateDB & "# order by todate desc"
Den viser rigtig nok den næste åbne periode i forhold til 1. request, men den næste periode er OGSÅ booket, og det skal den tage højde for ?????
Avatar billede Jman Praktikant
25. februar 2004 - 00:20 #31
skal jeg oprette et nyt sp. ?
Avatar billede Jman Praktikant
25. februar 2004 - 11:03 #32
okay - fandt en anden vej rundt om problemet, så det er ikke aktuelt alligevel :)
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