21. februar 2006 - 23:24Der er
8 kommentarer og 1 løsning
Funktion som ikke altid gør det den burde gøre!
Jeg bruger nedenståede script til lave en tilfældig kode som ikke må være lig med en eksisterende kode i databasen.
Et par gange har den genereret den samme kode, hvorved to brugere har samme kode. Det var jo ikke meningen.
Er der en bedre løsning end nedenstående:
Function lavKode(antal) tilladtkarakter = "abcdefghijklmnopqrstuvwxyz23456789" str = "" for i = 1 to antal randomize index = Int(rnd * len(tilladtkarakter))+1 str = str & Mid(tilladtkarakter,index,1) next lavKode = str
strSQL = "Select kode from databse Where kode = '" & TRIM(lavKode) & "'" set rs = Conn.Execute(strSQL) IF rs.EOF then lavKode = str else lavKode(12) end if rs.close Set rs = nothing conn.CLose Set conn = nothing End Function
Har overvejet om det skulle lægges i en Store procedure eller om det var bedre at tælle antallet af rækker med en tilsvarende kode. Så hvis nul så er koden accepteret.
Du kan lave en lille test koden som viser det :) Dette er din funktion uden database access og den taget også kun en random karakter og det er enten a, b eller c. Hvis koden er lig med "a" skal den forsøge at finde en ny.. Prøv at koden med skiftevis en af de to linier udkommentered:
lavKode(1) 'testen giver enten a,b eller c lavKode = lavKode(1) 'testen giver enten b eller c
reload siden og se forskellen.
<% Function lavKode(antal) tilladtkarakter = "abc" str = "" randomize for i = 1 to antal index = Int(rnd * len(tilladtkarakter))+1 str = str & Mid(tilladtkarakter,index,1) next lavKode = str
IF not str = "a" then lavKode = str else 'lavKode(1) 'testen giver enten a,b eller c lavKode = lavKode(1) 'testen giver enten b eller c end if End Function response.write lavKode(1) %>
En anden ting er det bevidst du har skrevet 12 og ikke skriver variablen antal så du overføre samme antal når du kalder funktion inde fra sig selv?
Tak for hjælpen. Jeg har tjekket det med "abc.. princippet" og der fungerer det fint samt med lavkode(12) og 400 poster - ingen dubletter.
Til andre som kan bruge det, så er løsningen:
Function lavKode(antal) tilladtkarakter = "abcdefghijklmnopqrstuvwxyz23456789" str = "" for i = 1 to antal 'randomize kaldes før funktionen kaldes index = Int(rnd * len(tilladtkarakter))+1 str = str & Mid(tilladtkarakter,index,1) next lavKode = str strSQL = "Select kode from databasen Where kode = '" & TRIM(lavKode) & "'" set rs = Conn.Execute(strSQL) IF rs.EOF then lavKode = str else lavKode = lavKode(antal) end if rs.close Set rs = nothing conn.CLose Set conn = nothing End Function
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.