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...
17 svar · 683 visningar · startad av Erik Juhlin
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å.
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.
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...
Hur man slumpar fram 1000 datum. Vill ha in olika datum under år 2001 i StatisticDate i tabellen tblStatistic.
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?
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.
ok, för det kan vara lite klurigt att få in tusen olika datum under ett år nämligen.
Okej, men det ska i alla fall inte vara 1000 lika datum.
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,
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.
ggahh!
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!
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
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...
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
toonster, berätta gärna mer om slumpfuktionen i sql server!
Schysst @nders!
Men går det att få samma datumformat som Now?
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,
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.
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.
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.