Avatar billede kramerfan Nybegynder
28. november 2000 - 23:47 Der er 15 kommentarer og
1 løsning

Tjek på DB input

Jeg har en DB hvor jeg sender en dato og en tid ned. Jeg mangler et script der tjekker i DB\'en om der er en dato, hvor enten Tid1, Tid2 eller Tid3 er reserveret.
Avatar billede nil.dk Nybegynder
28. november 2000 - 23:52 #1
Do While Not recordset.EOF
  Select Case recordset(\"tid\")
    Case Tid1
      Reserveret = \"ja\"
    Case Tid2
      Reserveret = \"ja\"
    Case Tid3
      Reserveret = \"ja\"
    Case Else
      Reserveret = \"nej\"
  End Select
Loop
Avatar billede kramerfan Nybegynder
29. november 2000 - 00:17 #2
Jeg forstår ikke rigtig Case-begrebet, måske du kunne forklarer. Også tror jeg der er et problem med tid. Jeg har tre - Tid1, Tid2, Tid3 i DB\'en, så der er ikke bare en \"Tid\" i min Recordset.
Avatar billede nil.dk Nybegynder
29. november 2000 - 00:47 #3
Select..Case er lidt ligesom If Then..

Hvis recordset(\"tid\") = Tid1 så er Reserveret = \"ja\" osv.

Du kan bare lave 3 Select-Cases. Én for Tid1, Tid2 og Tid3
Avatar billede soerens Nybegynder
29. november 2000 - 09:25 #4
Øh, så vil jeg nu hellere gøre det i en SQL-sætning, på den måde er du fri for at loope igennem et recordset:

strSQL = \"SELECT * FROM MyTable WHERE Tid=\" & Tid1 & \" OR Tid=\" & Tid2 & \" OR Tid=\" & Tid3

Set rsSchedule = cnnDatabase.Execute(strSQL)

If rsSchedule.EOF Then
  Response.Write \"Ingen aftaler fundet\"
Else
  Response.Write \"Aftale(r) fundet!\"
End If
Avatar billede kramerfan Nybegynder
29. november 2000 - 09:59 #5
Meningen er ikke at jeg skal vide om der er nogle reserveret, men scriptet skal tjekke hvilke tider der er reserveret. Det skal ikke sende besked tilbage, men stoppe for reserveringen hvis der allerede er reserveret på den tid, som vedkommende forsøger at reserverer, og lade vedkommende gennemfører reservationen, hvis tiden er ledig.
Avatar billede nil.dk Nybegynder
29. november 2000 - 10:02 #6
Det kan du da også sagtens gøre med både mit og soerens\' scripts..
Avatar billede soerens Nybegynder
29. november 2000 - 10:13 #7
Nåh, ok!

Lad os sige at brugeren indtaster to tidspunkter kaldet StartTime og EndTime (begge af typen datetime) og vi ønsker at tjekke på om det konflikter med en eksisterende reservation.

Prøv med nedenstående. Vær opmærksom på at koden ikke er testet og at den er frit fra leveren ;-)

rqsStartTime = Trim(Request.Form(\"StartTime\"))
rqsEndTime = Trim(Request.Form(\"EndTime\"))

strSQL = \"SELECT * FROM tblReservations WHERE \"
strSQL = strSQL & \"(StartTime>=\" & rqsStartTime & \" AND StartTime<=\" & rqsEndTime & \")\"
strSQL = strSQL & \" OR (EndTime>=\" & rqsStartTime & \" AND EndTime<=\" & rqsEndTime & \")\"

Set rsSchedule = cnnDatabase.Execute(strSQL)

If rsSchedule.EOF Then
  Response.Write \"Inserting reservation....\"
  \'Indsæt reservation i databasen
Else
  Response.Write \"A conflict has occured, we\'re not going to do anything!\"
End If
Avatar billede kramerfan Nybegynder
29. november 2000 - 10:37 #8
Den melder

Object required: \'\'
når den kommer til denne SQL.

strSQL = \" SELECT * FROM Kalend WHERE Tid= \" & Tid1 & \" OR Tid=\" & Tid2 & \" OR Tid=\" & Tid3&\" \"
Set rsSchedule = cnnDatabase.Execute(strSQL)

Hvad kan det betyde?
Avatar billede nil.dk Nybegynder
29. november 2000 - 10:42 #9
Du skal lave en connection til databasen.
Avatar billede kramerfan Nybegynder
29. november 2000 - 10:54 #10
Nu har jeg lavet noget der ser sådan her ud

<%\'----------skal tjekke om dato\'en og tiden er taget------------------

strSQL = \" SELECT * FROM Kalend WHERE Tid1= \" & -5 & \" OR Tid2=\" & -4 & \" OR Tid3=\" & -5 &\"  And Dato = #\"&session(\"a\")&\"#\"
Set rsSchedule = conn.Execute(strSQL)

If rsSchedule.EOF Then
  Response.Write \"\"
Else
  \'Response.Write \"Aftale(r) fundet!\"
Response.Redirect \"skema.asp?error=3\"
End If
%>

Men den melder error hver gang. Er der en der kan gennemskue hvorfor?
Avatar billede nil.dk Nybegynder
29. november 2000 - 10:55 #11
Hvilken error får du?
Avatar billede kramerfan Nybegynder
29. november 2000 - 10:56 #12
Det vil altså sige at den går igennem if sætningen og tager det efter else - hvilket i min forståelse vil sige at den har fundet noget også selvom der ikke er reserveret noget i dette felt.
Avatar billede kramerfan Nybegynder
29. november 2000 - 10:56 #13
Den udfører dette

Response.Redirect \"skema.asp?error=3\"
Avatar billede kramerfan Nybegynder
29. november 2000 - 11:03 #14
Betyder dette

If rsSchedule.EOF

At Recordset er tom og altså at der ikke er fundet nogen resultater.
Avatar billede soerens Nybegynder
29. november 2000 - 11:16 #15
Ja, hvis rsSchedule.EOF = True er det fordi recordsettet er tomt....

Har du husket at lave en connection til din database (Dit conn objekt er ikke defineret i din ovenstående kode)? Hvilken databasen bruger du?

Avatar billede kramerfan Nybegynder
29. november 2000 - 11:31 #16
Jeg har lavet en ny der ser sådan ud.

<%\'----------skal tjekke om dato\'en og tiden er taget------------------

strSQL = \" SELECT Tid1, Tid2, Tid3 FROM Kalend WHERE Dato = #\"&session(\"a\")&\"#\"
Set rsSchedule = conn.Execute(strSQL)

If rsSchedule(\"Tid1\") = \"-5\" Then
Response.Redirect \"skema.asp?error=3\"
elseif rsSchedule(\"Tid2\") = \"-4\" Then
Response.Redirect \"skema.asp?error=3\"
elseif rsSchedule(\"Tid3\") = \"-5\" Then
Response.Redirect \"skema.asp?error=3\"
Else
Response.Write \"\"
End If
%>

Men problemet er at bare en af tiderne er udfyldt så melder den at tiden er reserveret, men det er jo kun hvis den pågældende tid er reserveret at det er interessant.
Hvordan kommer man frem til det?
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