Avatar billede sorenmt84 Juniormester
23. juli 2002 - 21:28 Der 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!
Avatar billede eagleeye Praktikant
23. juli 2002 - 22:24 #1
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
Avatar billede sorenmt84 Juniormester
24. juli 2002 - 00:00 #2
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)
Avatar billede eagleeye Praktikant
24. juli 2002 - 00:17 #3
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")
Avatar billede eagleeye Praktikant
24. juli 2002 - 00:34 #4
den skal også finde min værdi det er samme måde.

strSQL = "SELECT MIN(min) as minAlder FROM tabel"
set rs = Conn.execute (strSQL)
minAlder = rs("minAlder")
Avatar billede eagleeye Praktikant
24. juli 2002 - 00:40 #5
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??
Avatar billede sorenmt84 Juniormester
24. juli 2002 - 12:05 #6
>> eagleeye

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!
Avatar billede eagleeye Praktikant
24. juli 2002 - 13:48 #7
connection, hvilken database bruger du??
Avatar billede eagleeye Praktikant
24. juli 2002 - 13:54 #8
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
Avatar billede sorenmt84 Juniormester
24. juli 2002 - 16:19 #9
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)};"
Avatar billede eagleeye Praktikant
26. juli 2002 - 23:17 #10
Fejlen betyder at den ikke kan finde database filen i den sti du har angivet...
Hvor ligger databasen i forhold til asp filen?
Avatar billede sorenmt84 Juniormester
27. august 2002 - 17:39 #11
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!

Noget i denne stil:
"rod"
- puljer
- inc
  - db
Avatar billede eagleeye Praktikant
27. august 2002 - 17:46 #12
Så prøv med denne Conn.Open linie, den vil havde en fysik sti:

Conn.Open= "DBQ=" & Server.MapPath("../inc/db/puljer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

Eller:

Conn.Open= "DBQ=" & Server.MapPath("/inc/db/puljer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
Avatar billede sorenmt84 Juniormester
17. september 2002 - 15:36 #13
Jeg beklager igen den lange svar tid, man har haft travlt i skolen...

Har pt. følgende og har prøvet begge dine forslag, men kan ikke få det til at virke:

<% mode = request("mode")
if mode = "" then %>
<FORM ACTION="funktion.asp?mode=find" METHOD="POST"><INPUT TYPE="text" NAME="alder"><INPUT TYPE="submit" VALUE="Find"></FORM>
<% end if %>

<% if mode = "find" then
Set Conn = Server.CreateObject("ADODB.Connection")
Set Rs = Server.CreateObject("ADODB.RecordSet")

Conn.Open= "DBQ=" & Server.MapPath("../inc/db/spejder.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

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 %>
Avatar billede eagleeye Praktikant
22. september 2002 - 21:38 #14
Hvad er det som ikke virker?? Får du en fejlkode eller en tom side...
Avatar billede sorenmt84 Juniormester
28. september 2002 - 17:38 #15
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
Avatar billede eagleeye Praktikant
29. september 2002 - 13:47 #16
Hvad står i linie 13 ??

Er det denne:
strSQL = "SELECT MAX([max]) as alder_max, MIN([min]) as alder_min FROM grenene"

Så prøv at tjekke at kolonne og tabel navne er stavet rigtigt.
Avatar billede sorenmt84 Juniormester
12. oktober 2002 - 11:47 #17
Min linie 13 er:
set rs = Conn.execute (strSQL)

Jeg har tjekket alle felterne igennem og alle sammen er stavet rigtigt osv osv
Avatar billede eagleeye Praktikant
12. oktober 2002 - 12:54 #18
Jeg har prøvet denne kode med en database tabel som denne:

Tabelnavn: grenene
ID : Autonummer
max : tal
min : tal
titel : tekst

--- koden ---


<HTML>
<HEAD><TITLE></TITLE></HEAD>
<BODY>
<% mode = request("mode")
if mode = "" then %>
<FORM ACTION="funktion.asp?mode=find" METHOD="POST">
<INPUT TYPE="text" NAME="alder">
<INPUT TYPE="submit" VALUE="Find">
</FORM>
<% end if %>

<% if mode = "find" then
Set Conn = Server.CreateObject("ADODB.Connection")
Set Rs = Server.CreateObject("ADODB.RecordSet")

Conn.Open= "DBQ=" & Server.MapPath("../inc/db/spejder.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

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 %>

</BODY>
</HTML>
Avatar billede sorenmt84 Juniormester
12. oktober 2002 - 15:41 #19
Det virker perfekt nu... Aner ikke hvad der var galt, men tak :-)
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