15. august 2003 - 15:31Der er
13 kommentarer og 1 løsning
Random tal som IKKE er i database
Hey folk, Jeg sidder og skal lave et system, som vælger et tal mellem 1 og 90 som IKKE allerede er trukket... tallet gemmes i en database, så den skal altså undersøge om tallet eksisterer i databasen... hvis ikke, ja så er tallet gyldig...... Men HVORDAN???
Hvis det er tilfældet så ville jeg ikke gemme i en database, men blot i en tekstfil med 1 linie. Hver gang der blve trukket et tal, blev det tilføjet til linien,og linien blev gemt.'Hvad skal der ske, når alle 90 tal er udtrukket?
Programmet kunne se nogenlunde således ud (jeg skriver ikke koden til hent en linie, da jeg ikke kanhusek den lige her. Hvis du er interesseret kan jeg skrive den iaften):
<%Option Explicit dim udtrukne, tmp, gentag, tal udtrukne=hent linie..... tmp="," & udtrukne & "," gentag=true Randomize while gentag tal=round(Rnd*100) if tal <>100 gentag=(Instr(udtrukne,"," & tal & ",")>0) end if wend udtrukne=udtrukne & "," & tal gem udtrukne.... %> <html> <body> <%response.write(tal)%> </body> </html>
Det er ret vigtigt at det bliver gemt i en database, da resten af systemet allerede er baseret på det.... og ja, det er heltal...
Der skal ikke ske noget når der er trukket 90 tal... det vil aldrig ske...
Det er til et banko-system til et diskotek... Det viser tallene på storskærm... og sletter alle tal i databasen når der trykkes på en "start nyt spil" knap.....
på den måde kan du ha unikke "Random nummer" mellem 1 og 90, du kan selv bestemme hvor mange tal hver gang skal vises, du kan forbinde det til din DB:
<% Maks_nummer = 90 tot_unikke = 1 'antal tal som skal vises dim random_nummer, counter, check, unikke_nummers redim random_nummer(tot_unikke) randomize For counter = 1 to tot_unikke random_nummer(counter) = Int(Rnd * Maks_nummer)+1 for check=1 to counter-1 if random_nummer(check)= random_nummer(counter) then counter=counter-1 end if next next %> <p> <% For counter = 1 to tot_unikke response.write "<li>" & random_nummer(counter) & "</li>" next %>
Ok. Men ville det så være OK, hvis databasen blot havde et felt, hvor linien med de udtrukne tal var gemt? Det skulle altså blot være et tekstfelt, der kan rumme en streng af længde 300. Så vil ovennævnte lille programstump fungere. udtrukne=hentlinie.. og gem udtrukne er så blot at hente og gemme denne tekststreng i databasen.
Er det af hensyn til at kunne dokumentere, at alt går rigtigt til, at det skal gemmes i en database. Du kunne jo også på forhånd have genereret en række spil i databasen. At spille ville så blot være at tage et række fra databasen, og så lade den blive vist et nummer adgangen i browseren. (det er
Ok, men det er lige så let at lave. Det er det lille program igen, men første gang er det så at læse alt det gemte. Så vælges et nyt tal, og der gemmes i databasen med tal, timestamp etc.
Ja, det er simpelthen for at kunne dokumentere det hele.... Alle tidligere spil skal nemlig kunne hentes frem igen.... også derfor alle poster er udstyret med et felt der hedder SPIL..... det er et id for det spil der er igang!
På denne måde kan jeg jo også udskrive alle de tal der er udtrukket i dette spil... sortere dem som jeg vil og sådan
Princippet et sådan her. Den hedter alle de valgte tal, laver en komme liste og findet et nyt tilfældig tal som ikke er i den liste. Gemmer det i databasen. Du må lige tilføje SPIL ID til de to SQL sætninger så:
<% SQL = "SELECT tal FROM tabelnavn" Set rs = Conn.Execute(SQL) tal = "," do while not rs.EOF tal = tal & rs("tal") & "," rs.Movenext loop 'Så har man en lsite med de tal som er udtrukket. randomize do nytTal = Int(rnd()*90)+1 loop while inStr(1,tal, ","&nytTal&",")>0
SQL = "INSERT INTO tabelnavn (tal) VALUES (" & nytTal & ")" Conn.Execute(SQL) Response.write "Det nye tal er : " & nytTal %>
SQL = "SELECT tal FROM tabelnavn WHERE spil = " & SPIL Set rs = Conn.Execute(SQL) tal = "," do while not rs.EOF tal = tal & rs("tal") & "," rs.Movenext loop 'Så har man en lsite med de tal som er udtrukket. randomize do nytTal = Int(rnd()*90)+1 loop while inStr(1,tal, ","&nytTal&",")>0
SQL = "INSERT INTO tabelnavn (tal, timestamp, spil) VALUES (" & nytTal & ", Now(), " & SPIL & ")" Conn.Execute(SQL) Response.write "Det nye tal er : " & nytTal %>
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.