23. juli 2002 - 21:28Der er
18 kommentarer og 1 løsning
find pulje ud fra alder
Har en db med nogle forskellige puljer. Alle puljerne har 2 felter med alder. en minimum alder (min_alder) og en maximum alder (max_alder) Ideén er så, at man i en form indtaster sin egen alder og så skal der laves et opslag i databasen, hvor den finder frem til den pulje som passer til ens alder. Det vil altså sige at man skal ligge i mellem min og max alder, eller have samme værdi som enten min eller max
Eksempel:
Pulje 1: Min: 2 Max: 5
Pulje 2: Min: 6 Max: 10
Hvis jeg så indtaster 3 skal jeg have se "pulje 1". Hvis jeg indtaster 10, skal jeg have "Pulje 2"
Det skal også være sådan, så man får en meddelse, hvis der ikke er noger der passer. Det vil altså sige at hvis jeg indtaster 1, skal man have en meddelse om at man ikke er gammel nok.
Indtaster man så 11, skla man så have en meddelse om at man er for gammel!
Du kan lave det med SQL opslag. Jeg antager du har en from hvor man angiver sig alder:
'Her laves connection til din database Conn.Open "bla bla... det skal du selv lige paste ind" alder = Requst.Form("alder") if Int(alder) >= 11 then Response.write "Du er for gammel" else strSQL = "SELECT * FROM tabel WHERE min >= " & alder & " AND max <= " & alder Set rs = Conn.Execute(strSQL) if rs.EOF then Respinse.Write "Fandt inden pulje til dig men ven" else Do while not Rs.EOF Response.write "Du passer i pulje " & rs("pulje") & "<br>" rs.MoveNext loop end if end if
Det ser godt ud... Kan man lave det sådan, så maxalderen findes, ved at den gennemsøger databasen og finder den største værdi...
Jeg har nok ikke lige udtrykt mig klart nok med det andet, men den skulle gerne udskrive en slags liste - lidt ala et søge resultat... Grunden til dette, er at de forskellige puljer skifter på samme tid som folkeskolen gør (altså efter sommerferien!) Derfor kan man altså godt som f.eks. 12 årig være 2 forskellige steder (f.eks. i maj i pulje 1, men fra august er man så i pulje 2)
Den udskriver også en liste... En pulje på hver linie i dette loop: Do while not Rs.EOF Response.write "Du passer i pulje " & rs("pulje") & "<br>" rs.MoveNext loop
Du han hendte max fra databasen sådan her:
strSQL = "SELECT MAX(max) as maxAlder FROM tabel" set rs = Conn.execute (strSQL) maxAlder = rs("maxAlder")
Som du så også kan se er min og max reserverede ord i SQL så der skal [] omkring kolonnenavne [max]:
strSQL = "SELECT MAX([max]) as maxAlder FROM tabel" set rs = Conn.execute (strSQL) maxAlder = rs("maxAlder") strSQL = "SELECT MIN([min]) as minAlder FROM tabel" set rs = Conn.execute (strSQL) minAlder = rs("minAlder")
alder = Requst.Form("alder")
if CInt(alder) > CInt(maxAlder) then Response.write "Du er for gammel." elseif CInt(alder) < CInt(minAlder) then Response.write "Du er ikke gammel nok." else strSQL = "SELECT * FROM tabel WHERE [min] >= " & alder & " AND [max] <= " & alder Set rs = Conn.Execute(strSQL) if rs.EOF then Respinse.Write "Fandt inden pulje til dig men ven" else Do while not Rs.EOF Response.write "Du passer i pulje " & rs("pulje") & "<br>" rs.MoveNext loop end if end if
Jeg forstår ikke helt din kommentar (24/07-2002 00:00:07), vil du havde alle puljer udskrevet??
Jeg kan ikke helt få det til at virke... Har været ved at indsætte noget connection til databasen, men der går et eller andet galt... Gider du lave dette?
Jeg tror du har forstået min kommentar, Det ser i hvertfald ganske rigtig ud, det du har lavet!
Man kan faktisk god havde min og max i samme SQL så behøves man ikke lave to:
Eks kunne være:
Set Conn = Server.CreateObject("ADODB.Connection") Set Rs = Server.CreateObject("ADODB.RecordSet") Conn.Open= "DBQ=c:\inetpub\wwwroot\db\XXXX.mdb;Driver={Microsoft Access Driver (*.mdb)};"
strSQL = "SELECT MAX([max]) as maxAlder, MIN([min]) as minAlder FROM tabel" set rs = Conn.execute (strSQL) maxAlder = rs("maxAlder") minAlder = rs("minAlder")
alder = Requst.Form("alder")
if CInt(alder) > CInt(maxAlder) then Response.write "Du er for gammel." elseif CInt(alder) < CInt(minAlder) then Response.write "Du er ikke gammel nok." else strSQL = "SELECT * FROM tabel WHERE [min] >= " & alder & " AND [max] <= " & alder Set rs = Conn.Execute(strSQL) if rs.EOF then Respinse.Write "Fandt inden pulje til dig men ven" else Do while not Rs.EOF Response.write "Du passer i pulje " & rs("pulje") & "<br>" rs.MoveNext loop end if end if
'Oprydning Conn.Close Set rs = Nothing Set Conn = Nothing
Får følgende fejl: Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x96c Thread 0x448 DBC 0xb7ca3b4 Jet'.
/adm/puljer/grenene/funktion.asp, line 3
Min line 3 ser sådan ud: Conn.Open= "DBQ=inc/db/puljer.mdb;Driver={Microsoft Access Driver (*.mdb)};"
Beklager den lange svar tid, men har været på ferie og så havde jeg fuldstændig glemt det...
Filen som alt denne kode ligger i, ligger i mappen "puljer" et niveau højrer oppe, ligger mappen "inc" inde i den ligger mappen "db" hvor så databasen "puljer.mdb" ligger!
strSQL = "SELECT MAX([max]) as alder_max, MIN([min]) as alder_min FROM grenene" set rs = Conn.execute (strSQL) maxAlder = rs("alder_max") minAlder = rs("alder_min")
alder = Requst.Form("alder")
if CInt(alder) > CInt(maxAlder) then Response.write "Du er for gammel." elseif CInt(alder) < CInt(minAlder) then Response.write "Du er ikke gammel nok." else strSQL = "SELECT * FROM grenene WHERE [min] >= " & alder & " AND [max] <= " & alder Set rs = Conn.Execute(strSQL) if rs.EOF then Respinse.Write "Fandt inden pulje til dig men ven" else Do while not Rs.EOF Response.write "Du passer i pulje " & rs("titel") & "<br>" rs.MoveNext loop end if end if
'Oprydning Conn.Close Set rs = Nothing Set Conn = Nothing end if %>
Beklager ingen den lange svar tid, er lige kommet hjem fra studietur...
Fejltype: Microsoft OLE DB Provider for ODBC Drivers (0x80040E10) [Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 2. /sejs_gruppe/grenene/funktion.asp, line 13
strSQL = "SELECT MAX([max]) as alder_max, MIN([min]) as alder_min FROM grenene" set rs = Conn.execute (strSQL) maxAlder = rs("alder_max") minAlder = rs("alder_min")
alder = Request.Form("alder")
if CInt(alder) > CInt(maxAlder) then Response.write "Du er for gammel." elseif CInt(alder) < CInt(minAlder) then Response.write "Du er ikke gammel nok." else strSQL = "SELECT * FROM grenene WHERE [max] >= " & alder & " AND [min] <= " & alder Set rs = Conn.Execute(strSQL) if rs.EOF then Response.Write "Fandt inden pulje til dig men ven" else Do while not Rs.EOF Response.write "Du passer i pulje " & rs("titel") & "<br>" rs.MoveNext loop end if end if
'Oprydning Conn.Close Set rs = Nothing Set Conn = Nothing end if %>
Det virker perfekt nu... Aner ikke hvad der var galt, men tak :-)
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.