Jeg skal søge mellem 2 tidspunkter... Jeg har oprettet flg. sql: Sql="SELECT * FROM tblKalender WHERE Aktivitet=" & Request.Form("D1") & " AND #" & FormatDateTime(FraTid) & "# BETWEEN StartTid AND SlutTid"
StartTid og SlutTid er Standard Dato og Klokkeslæt felter i databasen...
Det ser ud som om, der byttes rundt på dag og måned...
FormatDateTime viser vel mm/dd/yyyy hh:mm:ss...???
Hvis du vil anvende strengsammensætte SQL-sætninger (hvilket ikke kan anbefales aht. SQL injections), så bør du nok satse på at formatere dine datoer således:
dim cmd, rs set cmd = Server.CreateObject("ADODB.Command") set cmd.Connection = dinConnection cmd.CommandText = "SELECT * FROM tblKalender WHERE Aktivitet=?" & _ " AND ? BETWEEN StartTid AND SlutTid" cmd.CommandType = adCmdText set rs = cmd.Execute(Array(Request.Form("D1"), FraTid)) ' Læs dine resultater fra variablen rs...
dinConnection er den aktive forbindelse til databasen.
Aktivitet =1 FraTid=16-10-2017 01:00:00 SELECT * FROM tblKalender WHERE Aktivitet = ? AND ? BETWEEN StartTid AND SlutTid Microsoft JET Database Engine fejl '80040e10'
Der er ikke angivet nogen værdi for en eller flere krævede parametre.
Næj...det funker ikke... Så snart der er en dato, der kan fortolkes på 2 måder (06-07-2017 og 07-06-2017) så kokser det... Tidspunktet (15:10:30) fungerer fint...
Do Until FormatDateTime(FraTid,4) > FormatDateTime(TilTid,4) Sql="SELECT * FROM qryKalender WHERE Aktivitet=" & Request.Form("D1") & " AND #" & FraTid & "# BETWEEN StartTid AND SlutTid" RS.Open Sql, Conn, 3, 3 If RS.EOF = False Then x = 1 Optaget = Optaget & FraDato & "<br>" RS.Close Exit Do End If RS.Close FraTid = DateAdd("h",1,FraTid) Loop
OK, men det gør jo heller ikke brug af noget som helst af det jeg har foreslået. Jeg havde jo en forventning om, at du rent faktisk forsøgte at implementere det jeg har skrevet om og at det var det vi arbejdede med... :-/
Du har ikke engang implementeret ÅR-MÅNED-DAG formatet (som jeg vil tro løser problemet med datoen). Kunne du i det mindste ikke prøve det og så vise den kode du kommer frem til? Du må også gerne være specifik i forhold til, hvad du får af respons fra systemet i stedet for bare at sige "det ikke virker". Det er overordentlig svært at hjælpe dig videre, hvis du ikke giver den fornødne information og giver de ting man foreslår en chance...
Umiddelbart bør du konvertere fra- og tildatoerne til datotypen fra starten og så arbejde med datotypen resten af vejen. Det vil isolere evt. problemer med datokonvertering til et sted i koden i stedet for alle steder, hvor du skal kalde CDate for at arbejde med datoer.
Ydermere virker det relativt ineffektivt, at lave databaseopslag i en løkke. Du må kunne gruppere opslaget i tidsintervaller og så iterere over resultaterne istedet. Så vil du spare en masse tid (læs: din kode vil køre hurtigere).
Desuden er der stadig et stort problem med at strengsammensætte på den måde som du gør. Din kode er meget sårbar overfor input som er i et uønsket format.
Det kunne også være godt, hvis du lige ridsede op, hvilke data denne kode bliver fodret med og hvad det er du forsøger at gøre, samt på hvilken datastruktur dette skal ske.
Med ÅR-MÅNED-DAG mener du så ÅR-MÅNED-DAG hh:nn:ss...?
Jo, jeg har prøvet de 2 løsninger du ridsede op... har også haft yyyy-mm-dd formatet på...
Men det er denne kode, der giver de fleste svar... Dog, så snart datoen kan fortolkes "forkert" bliver den det...:/
Det er en Access database...
Forespørgslen fodres med et tal, og en dato som kriterie...
Det indre loop kigger på om tidspunkt er mellem tidspunkter på valgte datoer...
Går ud fra, at det er en Standard datoformat i tabeldesignet, altså dd-mm-yyyy hh:nn:ss... Skal det konverteres til yyyy-mm-dd hh:nn:ss i forespørgslen...?
Sorry, hvis jeg ikke forklarer godt nok - spørg endelig...:)
Det grundlæggende problem er, at din database bruger engelsk datoformat og din kode bruger dansk format. Det letteste ville derfor nok være, at formatere din dato som en engelsk dato når du arbejder med datoer i databasen.
engelsk formet er mm/dd/yyyy dansk format er dd/mm/yyyy
set cmdIns = Server.CreateObject("ADODB.Command") cmdIns.CommandText = sql set cmdIns.ActiveConnection = Conn
Do Until FraDato > TilDato x=0 FraTid = DateAdd("h", CInt(Left(Request.Form("D2"),2)), FraDato) TilTid = DateAdd("h", CInt(Left(Request.Form("D3"),2)), TilDato)
Do Until FraTid > TilTid set rs = cmdSel.Execute(, Array(Request.Form("D1"), FraTid) If not rs.EOF Then x = 1 Optaget = Optaget & FraDato & "<br>" rs.Close Exit Do End If rs.Close FraTid = DateAdd("h",1,FraTid) Loop
Dette er komplet utestet og løser ikke alle problemer, men det burde tage hånd om parameteriseringen af dine forspørgsler, samt håndtere datoer som det de er, nemlig datoer...
Hvis du arbejder med Sessions kan du, såvidt jeg husker, sætte session.LCID = 1030 for at få dansk formatering af tal og datoer (f.eks. returneret fra FormatDateTime).
Do Until FormatDateTime(FraTid,4) > FormatDateTime(TilTid,4) Sql="SELECT * FROM qryKalender WHERE Aktivitet=" & Request.Form("D1") & " AND #" & FraTid & "# BETWEEN StartTid AND SlutTid" RS.Open Sql, Conn, 3, 3 If RS.EOF = False Then x = 1 Optaget = Optaget & FraDato & "<br>" RS.Close Exit Do End If RS.Close FraTid = DateAdd("h",1,FraTid) Loop
If Optaget <> "" Then Response.Write "<font size='6'>Lokalet er optaget d. :</font><br><br><font size='5'>" & Optaget & "</font>" Response.Write "<a href='kalender.asp?ID=" & Serie & "&ID1=SletSerie'>Slet serie</a>" Response.End End If '--------/ uge tjek for optaget / ledig tid ----------
Synes godt om
Ny brugerNybegynder
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.