07. januar 2005 - 17:21Der er
54 kommentarer og 1 løsning
Fejl: Subscript out of range: 'nummer'
Hey Eksperter, jeg har nogle problemer med denne kode, som automatisk skal vælge/vises "Dagens spil"... (Altså vise spillet med i dags dato, og hvis det ikke eksistere, så tildele et nyt i dags dato!)
Jeg har nu denne kode: _______________________________
<% Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/database.mdb")
strSQL = "SELECT * FROM elements WHERE dagens = date()" set rs = myConn.Execute(strSQL)
If (rs.BOF Or rs.EOF) Then
'angiv størrelse på array dim id(50)
'vælg alle poster i databasen set rs=myConn.execute("select * from elements order by id")
' Udskriv alle id til et array do while not rs.bof or rs.eof nummer = nummer + 1 id(nummer) = rs("id") rs.moveNext loop
'find et tilfældigt tal mellem 1 og antallet af poster i databasen randomize tal = int(rnd*nummer)+1
Else
strSQL = "UPDATE elements SET dagens = date() WHERE id = '"&id(tal)&"'" set rs = myConn.Execute(strSQL)
'udskriv en tilfældig post ( her er id ikke et nummer men en streng ) set rs=myConn.execute("select * from elements where id = '"&id(tal)&"'")
Og før var det linje 38, som svarede til denne linje: "nummer = nummer + 1", men til gengæld er der kommet to nye linjer på... Så det er altså linjen før "nummer = nummer + 1", tror jeg...
Der er intet som Notesblok =) Ellers tak. Men jeg fik også koden her fra eksperten.dk... Så ved ikke hvorfor den er sat til 50... Den skulle jo netop have været dynamisk, så den selv fandt ud af at vælge tilfældige poster... Kan du hjælpe, da jeg er helt lost lige nu!? Ville gerne forhøje pointene, men har ikke flere... :-(
Alternativet er at tilføje alle værdier, separaret af f.eks. "," og til sidst, splitte den ved f.eks. "," Så har du også en array.. det er det jeg plejer at gøre..
Hvad sker der, hvis du erstatter "tal" med "58", med "myid(tal)"? Det burde stadig virke.. hvis det gør, prøv med "59" som burde melde (nogenlunde) samme fejl..
fejl... nu er det bare linje 38 i stedet for 39. Ergo er det "myid(nummer) = rs("myid")" (som for resten er forkert og rettet til "myid(nummer) = rs("id")")der er forkert!
<% Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/database.mdb")
strSQL = "SELECT * FROM [elements] WHERE dagens = date()" set rs = myConn.Execute(strSQL)
If (rs.BOF Or rs.EOF) Then
'angiv størrelse på array dim myid() dim nummer
'vælg alle poster i databasen set rs=myConn.execute("select * from [elements] order by [id]")
' Udskriv alle id til et array do while not rs.bof or rs.eof myid(nummer) = rs("id") nummer = nummer -1 rs.moveNext loop
'find et tilfældigt tal mellem 1 og antallet af poster i databasen randomize tal = int(rnd * nummer -1) +1
Else
strSQL = "UPDATE [elements] SET dagens = date() where [id] = " & CInt(myid(59)) & "" set rs = myConn.Execute(strSQL)
'udskriv en tilfældig post ( her er id ikke et nummer men en streng ) set rs=myConn.execute("select * from [elements] where [id] = " & CInt(myid(59)) & "")
do while not rs.bof or rs.eof nummer = nummer + 1 myid(nummer) = rs("id") rs.moveNext loop
Personligt fortrækker jeg:
if not (rs.bof or rs.eof) then ' undersøg om der er nogen poster do while not rs.eof ' kør loopen, sålænge at der er poster ... loop ' hop tilbage til "do" else ' der er ikke fundet nogen poster: response.write "der er ikke fundet nogen poster" end if
Okidoki... Men kan de oprindelige data ikke bare blive der? Jeg laver det for en ven... Som du nok har gættet er det er det en spilhjemmeside. Men sletter lige de andre tabeller...
1) hent de records, hvor dagens = dags dato 2) hvis der ikke er match 2a) opret array 2b) fyld array'en op med ALLE records 2c) sæt "tal" til et tilfældig tal, der passer i arrayen 3) ellers = der er fundet records med dags dato -- fejl her da myid ikke er oprettet!
Hvad skal der ske, hvis den finder records? Skal den bare udskrive dem?
Ja, men har rettet fejlen efter at jeg skrev den herinde...
Og ja, systemet skal bare gøre sådan, at ejeren af hjemmesiden ikke selv skal vælge et spil. Så når en bruger besøger siden tjekker den, om der er valgt et spil, hvor "dagens" er sat til i dags dato... Hvis der ikke er, skal den vælge et tilfældigt og sætte dens dagens til i dags dato... Og derefter udskrive!
Altså: - Findes spil med dags dato? - Ja = Udskriv! - Nej = Vælg nyt spil, giv dags dato og udskriv!
- Findes spil med dags dato? - Ja = udskriv en tilfældig record, af dem med dags dato - Nej = udskriv en tilfældig record, af ALLE dem der er i databasen
<% Option Explicit Response.Buffer = False dim myConn, sql, rs, conn, strSQL, tal
Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/database.mdb")
strSQL = "SELECT * FROM [elements] WHERE dagens = #" & date() & "#" '#01-07-2001#" set rs = myConn.Execute(strSQL)
'angiv størrelse på array dim myid() dim nummer nummer = -1
If (rs.BOF Or rs.EOF) Then
'vælg alle poster i databasen set rs = myConn.execute("select * from elements order by id")
' Udskriv alle id til et array do while not rs.eof ' response.write "nummer: " & nummer & "<br>" nummer = CInt(nummer) + 1 myid(nummer) = rs("id") rs.moveNext loop
'find et tilfældigt tal mellem 1 og antallet af poster i databasen randomize tal = int(rnd * nummer -1) +1
response.write "Der er ikke fundet nogen spil med dags dato.<br>" response.write "Ny dato indsat til spillet med id'en: " & myid(tal) & "<br><br>"
strSQL = "UPDATE elements SET dagens = #" & date() & "# where id = " & CInt(myid(tal)) set rs = myConn.Execute(strSQL)
'udskriv en tilfældig post ( her er id ikke et nummer men en streng ) set rs = myConn.execute("select * from elements where id = " & CInt(myid(tal)))
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.