Avatar billede r-bj Nybegynder
04. november 2000 - 18:29 Der er 10 kommentarer og
1 løsning

Avanceret Søgning.......

Nu kan det godt være det her er nemt nok, men siden jeg har brudt min hjerne med i et par dage, vil jeg gerne høre om der er nogen der kan hjælpe. Først koden:


datofra = Request.form(\"datofra\")
datotil = Request.form(\"datotil\")

\' Opbygger en dynamisk SQL streng
SQL = \"SELECT * FROM tabel WHERE\"
SQL = SQL & \" (ankomst <=  #\"&datofra&\"# AND afgang >=  #\"&datotil&\"#)\"
SQL = SQL & \" And (felt1 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" or (felt2 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" OR (felt3 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" OR (felt4 LIKE \'%\" & strKeyword & \"%\')\"

\' Skaber DSNLess forbindelse til DBen
strDSN = \"DSN-navn\"
Set myConn = Server.CreateObject(\"ADODB.Connection\")
myConn.Open strDSN

\' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(SQL)
If Not (rs.BOF Or rs.EOF) Then
    \' Hvis der er fundet poster på søgningen
    Response.Write \"<p>Søgeresultat</p>\"
    Response.Write \"<table border=1>\"
    Response.Write \"<tr><th>felt1</th><th>felt2</th><th>felt3</th><th>felt4</th></tr>\"
    Do While Not rs.EOF
        Response.Write \"<tr><td><a href=info.asp?id=\" & rs(\"id\") & \">\" & rs(\"felt1\") & \"</a></td>\"
        Response.Write \"<td>\" & rs(\"felt2\") & \"</td>\"
        Response.Write \"<td>\" & rs(\"felt3\") & \"</td>\"
        Response.Write \"<td>\" & rs(\"felt4\") & \"</td>\"
        rs.MoveNext
    Loop
    Response.Write \"</table>\"
Else
    \' Hvis der ikke er fundet poster på søgningen
    Response.Write \"<p>Der er ikke fundet noget på denne søgning</p>\"
    Response.Write(dato)
End If

\' Rydder op efter os
myConn.Close
Set myConn = Nothing
%>

Det jeg gerne vil have er at der for hver dato mellem \"datofra\" og \"datotil\" skal udføres søgningen, således så hvis jeg søger i intervallet 21-11-2000 til 29-11-2000 får jeg først vist alle de resultater hvor kriterierne gør sig gældende d. 21-11-2000 derefter resultaterne der er gældende for d 22-11-200, derefter for d. 22-11-2000 hele vejen op til og med d. 29-11-2000

Det vigtigste er at datoerne er variabler....

Er der nogen der kan gøre det for mig, eller i det mindste fortælle hvordan det skal gøres...
Avatar billede tina_m Nybegynder
04. november 2000 - 18:32 #1
hej r-bj
Du skal bare slutte din SQL med ORDER BY ankomst
Avatar billede stigc Nybegynder
04. november 2000 - 18:37 #2
hvorfor har du både ankomst og afgang? Der er noget der ikke hænger sammen, med det du ønsker!
Avatar billede r-bj Nybegynder
04. november 2000 - 18:38 #3
hehe, nej det var ikke lige det jeg ledte efter....

hvis der nu er en post med ankomst d. 21-11-2000 og afgang d. 24-11-2000 så er de gældende for mit kriterie de første 4 dage, mens ikke er gældende de sidste 5 dage.......

er du med på hvad jeg mener.....
Avatar billede tigerdyr Nybegynder
04. november 2000 - 18:46 #4
Den vil jeg da gerne have uddybet lidt mere...
Som jeg tolker det spørger du hvordan du kan få det delt i to \"dele\" en hvor det kun er \"Ankomst\" datoen der figurerer og en hvor alt andet end den første dato figurerer
Avatar billede r-bj Nybegynder
04. november 2000 - 18:52 #5
ok ok, et skib ankommer d 24 og afgår d 27. Jeg ønsker at få vist alle skibe der er i havn i perioden 21 - 29. Skrevet op på den måde så jeg kan se hvilke skibe er i havn d 21, hvilke er i havn d 22 osv osv (der er naturligvis nogle der vil figurer dobbelt....)

Jeg ved ikke helt hvordan jeg skal udtrykke det tydeligere
Avatar billede stigc Nybegynder
04. november 2000 - 19:01 #6
så laver du bare en forespørgelse på hver dato:

Du laver en løkke der kører fra start dato til slutdato:
Den laver en variable \"loopdato\" der indeholder den aktuelle dato i hvert loop:


Her med ville sql kaldet give alle skibe der vil ligge i havnen den dag:


\' Opbygger en dynamisk SQL streng
SQL = \"SELECT * FROM tabel WHERE\"
SQL = SQL & \" (ankomst <=  #\" & loopdato & \" # AND afgang >=  #\" & loopdato & \"#)\"
SQL = SQL & \" And (felt1 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" or (felt2 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" OR (felt3 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" OR (felt4 LIKE \'%\" & strKeyword & \"%\')\"


Avatar billede r-bj Nybegynder
04. november 2000 - 19:03 #7
Stigc >> Det giver rimmelig meget mening, mit problem er jeg ikke har kunne få det til at virker.... kan du lave en sådan løkke, husk det må kun være ud fra 2 datoer som bege angives i en form
Avatar billede stigc Nybegynder
04. november 2000 - 19:11 #8
Koden er ikke testet! Formatet på datofra og datotil kender jeg jo ikke!


\' finder dage mellem de to datoer
antal_dage = DateDiff(\"d\", datofra, datotil)

dag = 0

DO WHILE dag<= antal_dage

loopdato = DateAdd(\"d\", dag, datofra)

SQL = \"SELECT * FROM tabel WHERE\"
SQL = SQL & \" (ankomst <=  #\" & loopdato & \" # AND afgang >=  #\" & loopdato & \"#)\"
SQL = SQL & \" And (felt1 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" or (felt2 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" OR (felt3 LIKE \'%\" & strKeyword & \"%\')\"
SQL = SQL & \" OR (felt4 LIKE \'%\" & strKeyword & \"%\')\"
dag=dag +1


loop

Avatar billede r-bj Nybegynder
04. november 2000 - 19:28 #9
Det er jo næsten perfekt, men så vidt jeg kan se regner den kun difference ud mellem de 2 datoer, hvordan får jeg den til at inkludere de 2 datoer også, jeg forsøgte med:

datofra = Request.form(\"datofra\") - 1
datotil = Request.form(\"datofra\") + 1

men den virker ikke rigtig, hvis det kan lade sig gøre vil det være perfekt, ellers så finder jeg nok ud af at klare den mindre detalje.....
Avatar billede stigc Nybegynder
04. november 2000 - 19:33 #10
loopet inkluderer de to dage! du behøver ikke ændre noget!
Avatar billede r-bj Nybegynder
04. november 2000 - 19:36 #11
ok, det lyder fint

jeg takker mange gange så kan det da være jeg kan få sovet i aften :-))
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