webForumDet fria alternativet

Slumpa ut 1000 datum

ASP

17 svar · 656 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Frågan#1

Programmeraren Hanns är inte här idag och de har satt mig på att göra ett statistik system. Hanns mailade mig lite tips.

Lägg upp en tabell med endast ett fält av typen datetime, skriv sedan ett program som skapar ett 1000-tal poster i denna tabell på slumpvisa dagar.

Någon som kan hjälpa mig?

Bra avslut på mailet också. :e

P.S. This message will self-destruct in T-5 seconds. Should you be captured by enemy forces, Incordia will deny all knowledge of you.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

[Redigerat av Erik Juhlin den 26 apr 2001]

Medlem sedan juni 200032 967 inlägg
#2

vad vill du lite mer specifikt ha hjälp med?

sen vet jag inte om jag skulle lita helt och fullt på statistik som är framslumpad... ;)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan maj 200010 687 inlägg
#3

Hur man slumpar fram 1000 datum. Vill ha in olika datum under år 2001 i StatisticDate i tabellen tblStatistic.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan juni 200032 967 inlägg
#4

jag ska se om jag kan hitta någon liten kodsnutt i mina gömmor (eller i min hjärna), men jag hoppas att du inte tänkte dig 1000 olika datum under 2001? ;)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan maj 200010 687 inlägg
#5

Nej, det behöver inte vara under 2001. Fast det skulle kunna vara det. Är bara bra om vissa datum dyker upp flera gånger. :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan juni 200032 967 inlägg
#6

ok, för det kan vara lite klurigt att få in tusen olika datum under ett år nämligen. :)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan maj 200010 687 inlägg
#7

Okej, men det ska i alla fall inte vara 1000 lika datum. :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan juni 200032 967 inlägg
#8

här får du en liten kärra som plockar fram 1000 slumpiga datum under 2001.

insertarna till databasen fixar du själv väl?

for i = 1 to 1000
	
	randomize
	slump = Int((365 - 1 + 1) * Rnd + 1)
	slumpdatum = dateadd("d",slump,"2000-12-31")
	Response.Write i & " : " & slumpdatum & "<br>"

next

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan maj 200010 687 inlägg
#9

Borde inte det här funka?

rs.AddNew
For i = 1 to 1000

Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
rs("VisitDate") = slumpdatum
Next
rs.Update
rs.Close

rs("VisitDate") = Now funkade i alla fall.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan juni 200032 967 inlägg
#10

ggahh! :x

använd riktiga, sql-satser, dvs insert into för att stoppa till data.

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
strSQL = "insert into tblStatistic(StatisticDate) values ('" & slumpdatum & "')"
Conn.execute (strSQL)
Next

blanda inte in recordset i det här för då blir jag lessen i ögat! ;)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan maj 200010 687 inlägg
#11

Varför funkar det inte nu då? :(

<%
Set StatisticCon = Server.CreateObject("ADODB.Connection")
StatisticCon.Open "Provider=SQLOLEDB; Data Source=192.168.0.8; Initial Catalog=IABStatistic; User ID=sa;"

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
strSQL = "insert into tblStatistic(VisitDate) values ('" & slumpdatum & "')"
StatisticCon.execute (strSQL)
Next
%>

Microsoft OLE DB Provider for SQL Server error '80040e14'

Violation of PRIMARY KEY constraint 'PK_tblStatistic'. Cannot insert duplicate key in object 'tblStatistic'.

/erik/IABStatistic/Default.asp, line 10

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

[Redigerat av Erik Juhlin den 26 apr 2001]

Medlem sedan juni 200032 967 inlägg
#12

aha! du har satt datumkolumnen som primärnyckel, då kan du inte stoppa in värden (datum) som redan finns där. släng in en räknare (int, identity) i tabellen som primärnyckel istället, så kan du ha flera datum som är likadana.

du måste då tömma tabellen först, för du har ett gäng datum där nu...

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan feb. 20001 590 inlägg
#13

Troligtvis är fältet indexerat, och kopior tillåts inte, mao. samma datum

Sen finns ju slumpfunktion i MSSQL, så du kan faktiskt skapa slumpdatumen direkt i sql satsen.

/T

------------------
This is what the KLF is about

Medlem sedan juni 200032 967 inlägg
#14

toonster, berätta gärna mer om slumpfuktionen i sql server!

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

[Redigerat av @nders den 26 apr 2001]

Medlem sedan maj 200010 687 inlägg
#15

Schysst @nders!
Men går det att få samma datumformat som Now?

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan juni 200032 967 inlägg
#16

jag tar mig friheten att citera LarsG från en nylig tråd i forumet SQL.

Formatet i databasen går inte att ändra på. Internt så lagras datum som ett numeriskt värde som anger antal sekunder från en viss tidpunkt.) Du får använda convert när du hämtar data i stället.

besvarade det din fråga?

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan maj 200010 687 inlägg
#17

Nej, jag förstår inte. Fick detta svaret av Hanns.

rs("VisitDate") = DateAdd("s", (31536000*RND) Mod 31536000 "2001-01-01")

Men det förstår jag inte riktigt heller. :l

Nu ser det ut så här:

<%
Set StatisticCon = Server.CreateObject("ADODB.Connection")
StatisticCon.Open "Provider=SQLOLEDB; Data Source=192.168.0.8; Initial Catalog=IABStatistic; User ID=sa;"

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
strSQL = "insert into tblStatistic(VisitDate) values ('" & slumpdatum & "')"
StatisticCon.execute(strSQL)
Next
Set StatisticCon = Nothing
%>

Och då lagras datumen i formatet 2001-04-26. Jag vill att de ska lagras i formatet 2001-04-26 11:58:51.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan dec. 200012 464 inlägg
#18

Då får du väl lägga till en slumpmässigt antal sekunder också.

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
slump = int(24*60*60*Rnd)
slumpdatum = dateadd("s",slump,slumpdatum)
strSQL = "insert into tblStatistic(VisitDate) values ('" & slumpdatum & "')"
StatisticCon.execute(strSQL)
Next

och sen när man plockar ut datum så använder man

FormatDateTime(rs("datum"),vbLongDate)
FormatDateTime(rs("datum"),vbLongTime)

t.ex. för att bestämma presentationsformatet. Det format man får bestäms av vilken locale inställning man har.

session.lcid = 1053

passar bra för att få svenskt utseende.

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 26 apr 2001]

270 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)