Avatar billede zetn Nybegynder
03. august 2005 - 09:44 Der er 22 kommentarer

Tilfældigt tal

Hej, hvordan laver jeg en funktion der laver et tilfældigt tal på 10 cifre, og som ikke er i en db tabel i forvejen?
Avatar billede busschou Praktikant
03. august 2005 - 09:49 #1
du kan bruge random funktionen
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctrnd.asp
taget fra siden
---
To produce random integers in a given range, use this formula:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
---
dvs
---
Int(9999999999 - 1000000000 + 1) * Rnd + 1000000000)
Avatar billede busschou Praktikant
03. august 2005 - 09:49 #2
og det var et svar :o)
Avatar billede zetn Nybegynder
03. august 2005 - 09:53 #3
Hvordan kan det være den ikke kommer med et nyt tal hver gang man reloader?
Avatar billede busschou Praktikant
03. august 2005 - 09:57 #4
prøv skrive "Randomize" før du laver linjen og se om det hjælper
Avatar billede nielle Nybegynder
03. august 2005 - 09:58 #5
... og skal vi så ikke også lige tage det med databasen med:

Randomize
Do
    RandTal = Int(9999999999 - 1000000000 + 1) * Rnd + 1000000000)
    SQL = "SELECT count(*) AS antal FROM dinTabel WHERE ditTalFelt = " & RandTal
    rs = Conn.Execute(SQL)
While rs("antal") > 0
Avatar billede busschou Praktikant
03. august 2005 - 10:02 #6
hmm tænkte ikke over det med databasen
du siger at tallet ikke må være i databasen i forvejen
Hvorfor benytter du ikke bare et autoincrement number så?
Det giver jo netop et unikt nummer hver gang :o)
Avatar billede zetn Nybegynder
03. august 2005 - 10:22 #7
Den plejer bare at ligge tallet 1 til, men det skal simpelthen være så forskelligt som muligt.

Den kommer med expected loop, og så når det bliver indsat skriver den

Unexpected 'Loop' without 'do'


Randomize
Do
    RandTal = Int((9999999999 - 1000000000 + 1) * Rnd + 1000000000)
    SQL = "SELECT * FROM ps_attachnr WHERE file_name = " & RandTal
    rs = Conn.Execute(SQL)
While rs.eof

Response.Write RandTal

Loop
Avatar billede busschou Praktikant
03. august 2005 - 10:28 #8
Hvis du ønsker den finder et tal som ikke allerede eksisterer så må du lave en funktion af en slags som kører indtil den finder et ledigt tal
ala
---
Function getTal()
  RandTal = Int((9999999999 - 1000000000 + 1) * Rnd + 1000000000)
  SQL = "SELECT Count(*) FROM ps_attachnr WHERE file_name = " & RandTal
  rs = Conn.Execute(SQL)
  if rs(0) > 0 then
    getTal = getTal()
  else
    getTal = RandTal
  end if
End Function
response.write getTal()
Avatar billede zetn Nybegynder
03. august 2005 - 10:29 #9
Class does not support automation
Avatar billede busschou Praktikant
03. august 2005 - 10:29 #10
huh?
Avatar billede zetn Nybegynder
03. august 2005 - 10:30 #11
Når jeg prøver den funktion du har skrevet, melder den fejlen

Class does not support automation
Avatar billede busschou Praktikant
03. august 2005 - 10:35 #12
den fejl har jeg aldrig set før
Der skulle i øvrigt også stå randomize øverst i funktionen, for at de bliver forskellige
Men det ændrer nok ikke på fejlen
Avatar billede softspot Forsker
03. august 2005 - 10:36 #13
Du kunne også brugen en helt anden tilgang til det med ID'er, nemlig GUIDs hvilket giver dig nogle (statsgaranterede - næsten) entydige kombinationer af hexadecimale tal, ja, faktisk 32 af slagsen. Disse er oplagte til ID, fordi de kan genereres udenfor databasen og de er svære at gætte sig frem til :)

Sig til hvis denne fremgangsmåde er interessant.
Avatar billede zetn Nybegynder
03. august 2005 - 10:37 #14
ahh fandt vist fejlen. rs skal først defineres med Set rs = Conn.Execute(SQL)
Avatar billede softspot Forsker
03. august 2005 - 10:37 #15
Nej, for at finde årsagen til den fejl, skal vi nok se HELE koden - og det er måske endda ikke nok :)
Avatar billede softspot Forsker
03. august 2005 - 10:37 #16
OK, en anelse for sent på det :D
Avatar billede busschou Praktikant
03. august 2005 - 10:39 #17
nå ja klart, my bad, taste fejl :o)
Avatar billede zetn Nybegynder
03. august 2005 - 10:43 #18
Hey igen :)

Når jeg så indsætter functionen i min kode får jeg følgende fejl:

Sun ONE ASP VBScript compilation (0x800A03F2)
Expected identifier
FilePost.asp, line 228, column 1

Ved linien hvor funktionen starter. Det er til et upload script.
Avatar billede nielle Nybegynder
03. august 2005 - 11:15 #19
03/08-2005 10:35:52> Man må endelig ikke sætte Randomize øverst i funktionen! Det er temmeligt ødelæggende for random-effekten. :^(

Kun et eneste kald til Randomize pr. side!
Avatar billede nielle Nybegynder
03. august 2005 - 11:18 #20
Avatar billede busschou Praktikant
03. august 2005 - 11:21 #21
nå ja klart, men den skal så stå uden for funktionen, ellers sker der det samme som før at det er samme tal den genereerer
Avatar billede nielle Nybegynder
08. august 2005 - 19:25 #22
Lukketid?
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