Avatar billede pallifo Nybegynder
26. august 2005 - 11:50 Der er 68 kommentarer og
1 løsning

Random alt det udtrukne

Jeg har et spørgsmål vedrørende udtræk af en Access Database.

Jeg har eg søgemaskine på min side, hvor man kan søge på handværkere.

Det jeg ikke finder ud af er, hvordan jeg kan vise disse udtræk i en tilfældig rækkefølge - således at den samme håndværker ikke vises øverst hver gang forespørgselen sendes.
Avatar billede busschou Praktikant
26. august 2005 - 11:59 #1
Hmm det er der vist ikke en nem måde at gøre på
Men du kan evt hive dine rækker ud med GetRows()
http://www.w3schools.com/ado/met_rs_getrows.asp
Hvis du bare sætter "myArr = rs.GetRows()"
Så vil du få et todimensionalt array indeholdende rækker og kollonner fra din tabel
Du kan så benytte ubound til at finde størrelsen, altså antallet af rækker i dit udtræk
Herefter må du på en og anden måde kunne lave et loop som går fra 0 til din ubound værdi og som for hvert loop trækker en tilfældig værdi ud af arrayet ved brug af
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsstmrandomize.asp
og
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctrnd.asp
-
Men helt præcist hvordan, hmm er lidt tricky ;o)
Avatar billede softspot Forsker
26. august 2005 - 12:19 #2
Hvad med at gøre det i databasen:

SELECT *
FROM tabel
ORDER BY Rnd(ID)
Avatar billede busschou Praktikant
26. august 2005 - 12:22 #3
kan man også det i access ?, smart så er det det nemmeste
Avatar billede softspot Forsker
26. august 2005 - 12:25 #4
Det er klart at foretrække rent performancemæssigt :)
Avatar billede busschou Praktikant
26. august 2005 - 12:28 #5
jeg har kun set det brugt i mysql, så tænkte slet ikke på at man kunne i access, men det er klart, hvorfor skulle man ikke kunne det :o)
Jeg må endnu engang se mig slået hehe
Avatar billede softspot Forsker
26. august 2005 - 12:30 #6
Hvis det ikke slår os ihjel gør det os stærkere... ;)
Avatar billede pallifo Nybegynder
26. august 2005 - 14:06 #7
Først, undskyld jeg har været så længe væk...

SELECT *
FROM tabel
ORDER BY Rnd(ID)

fungerer godt nokk, men resultatet bliver altid det samme. Er det muligt at lave det sådan at udtrækket altid viser en ny record øverst?
Avatar billede busschou Praktikant
26. august 2005 - 14:12 #8
hver gang du kalder den skal du vel benytte randomize først, se evt tidligere link
Så "bøtten bliver rystet"
Avatar billede nielle Nybegynder
26. august 2005 - 14:18 #9
En randomize i ASP-koden har vist ingen indflydelse på Rnd() i SQL-koden.
Avatar billede nielle Nybegynder
26. august 2005 - 14:21 #10
SELECT * FROM dinTabel ORDER BY NewID()
Avatar billede nielle Nybegynder
26. august 2005 - 14:29 #11
... næe det er da vist MySQL :^(
Avatar billede busschou Praktikant
26. august 2005 - 14:29 #12
nielle >> hmm hvis man kan benytte Rnd i sql så burde man vel også kunne fortælle den at den skulle give den et nyt seed
Avatar billede pallifo Nybegynder
26. august 2005 - 14:47 #13
Som I kan se, så er jeg ret 'grøn' i ASP... Hvad er seed for noget?
Avatar billede nielle Nybegynder
26. august 2005 - 14:48 #14
Det kan vi kun være enige i. Min pointe var bare at Randomize i ASP ikke vil forplandte sig over i Access-databasen.

Så vidt jeg han se, så giver man rnd en seed ved at inkludere det i Rnd:

SELECT * FROM tabel ORDER BY Rnd(Seed)

- f.eks.:

SELECT * FROM tabel ORDER BY Rnd(42)

- og rækkefølgen vil blive den samme for hvert ssed.
Avatar billede nielle Nybegynder
26. august 2005 - 14:49 #15
Man kan altså bruge ASP's random funktion til at lave et seed til Access's random-funktion.
Avatar billede nielle Nybegynder
26. august 2005 - 14:51 #16
pallifo> De random-funktioner som er indbygget i diverse programmeringssprog og databaser er på ingen måde "tilfældige" - de simulere det bare rigtigt godt. Et seed - et frø - er en måde at starte en given random-generator der hvor man ønsker det.
Avatar billede busschou Praktikant
26. august 2005 - 14:51 #17
pallifo >> asp eller ej, så er sådan noget random halløj lidt mere "universielt", et seed eller på dansk et frø, det er det man giver en random funktion at starte på. Det er jo sådan at i programmering er intet tilfældig, alt er planlagt, og derfor kan man ikke sige "giv mig et tal mellem 0-10" og regne med at få et tilfældig. Den funktion som regner det "tilfældig" ud skal have noget at starte på, nemlig et seed,
Avatar billede busschou Praktikant
26. august 2005 - 14:53 #18
nielle >> men du kan vel ikke bare gøre som du skriver 14:48:23
for det svarer så til
SELECT * FROM tabel ORDER BY 1
SELECT * FROM tabel ORDER BY 2
SELECT * FROM tabel ORDER BY 3
osv osv
Den skal jo lave en order by rnd(id) altså et tilfældig id eller lignende
Avatar billede pallifo Nybegynder
26. august 2005 - 15:42 #19
Kan man kalde en function i SQL sætningen?

- f.eks.:
SELECT * FROM tabel ORDER BY Rnd(function)
Avatar billede pallifo Nybegynder
26. august 2005 - 17:08 #20
Jeg takker for jeres hjælp, men desværre er mit problem ikke helt løst, så jeg lader tråden stå åben lidt endnu...
Avatar billede nielle Nybegynder
26. august 2005 - 18:40 #21
busschou> Du har muligvis ret, men jeg har desværre ingen måde at efterprøve det på lige i øjeblikket. Imidlertid er Rnd(id) jo allerede afprøvet og det gav alligevel den samme rækkefølge hver gang (26/08-2005 14:06:37).

pallifo> Har du prøvet om f.eks.:

SELECT * FROM tabel ORDER BY Rnd(42)

- og:

SELECT * FROM tabel ORDER BY Rnd(64)

- giver den samme rækkefølge begge to?
Avatar billede kjulius Novice
27. august 2005 - 03:32 #22
Prøv evt. at sende en "Randomize" kommando til databasen mellem hver open af recordsættet. Mon ikke det er noget ala.

Dim objCmd
Set objCmd = Server.CreateObject("ADODB.Command")

ObjCmd.ActiveConnection = "Provider=????????????"
ObjCmd.CommandType = 4    'Stored Procedures
ObjCmd.CommandText = "Randomize"

ObjCmd.Execute()

Set objCmd = Nothing

Jeg har ikke mulighed for at teste det, da jeg ikke har adgang til en server for øjeblikket.
Avatar billede pallifo Nybegynder
29. august 2005 - 09:31 #23
nielle>> Nu har jeg prøvet:

SELECT * FROM tabel ORDER BY Rnd(42)
-og:
SELEVT * FROM tabel ORDER BY Rnd(64)
...og det giver det samme resultat hver gang.
Avatar billede softspot Forsker
29. august 2005 - 09:41 #24
Har du prøvet det som kjulius foreslog?

Da jeg testede mit forslag, var det i Access med querybuilder og der fungerede det fint nok med skift i rækkefølgen. Det tilskriver jeg (efter at have fulgt med i denne tråd) det faktum at Access holder styr på "hvorlangt" man er kommet i rækkefølgen af tilfældige tal. Jeg ville tro at du på en eller anden måde skal sparke motoren igang med tilfældighedsgenerering hver gang, da konteksten som Access GUI har jo ikke eksisterer når man forespørger på den måde som du gør her...
Avatar billede nielle Nybegynder
29. august 2005 - 09:54 #25
29/08-2005 09:31:47> Det jeg spurgte om var om de - hvis du stillede dem op side om side - var ens i det tal de trækker?
Avatar billede softspot Forsker
29. august 2005 - 09:58 #26
nielle > Det var min oplevelse da jeg testede det i Access. Jeg tror det er fordi den samme værdi bliver brugt til at ordne efter. Det var derfor jeg forsøgte mig med ID'et for den aktuelle række...
Avatar billede pallifo Nybegynder
29. august 2005 - 10:19 #27
softspot>> Jeg er ikke så erfaren i asp, så jeg forstår ikke det, som kjulius laver. Hvad skal der f.eks. stå efter Provider?

ObjCmd.ActiveConnection = "Provider=????????????"
Avatar billede softspot Forsker
29. august 2005 - 10:39 #28
Det er egentlag bare det som ligger i din nuværende connectionstring...
Avatar billede pallifo Nybegynder
29. august 2005 - 10:50 #29
softspot>> Jeg får denne fejlmelding når jeg prøver det, som kjulius anbefaler:

ADODB.Command error '800a0e7a'
Provider cannot be found. It may not be properly installed.
/leita1.asp, line 38

Vil det sige, at min server ikke understøtter denne metode?
Avatar billede softspot Forsker
29. august 2005 - 11:23 #30
hmm... hvad skrev du (kan du vise koden for hele passagen)?
Avatar billede pallifo Nybegynder
29. august 2005 - 11:33 #31
Min kode er følgende:

<%    Dim objCmd
    Set objCmd = Server.CreateObject("ADODB.Command")

    ObjCmd.ActiveConnection = "Provider={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("/Database/Handverkaralisti.mdb")
    ObjCmd.CommandType = 4    'Stored Procedures
    ObjCmd.CommandText = "Randomize"

    ObjCmd.Execute()
   
    SQL = "SELECT * FROM Handverkaralistin, Postnr, Bygd WHERE PostnummarID=PostnrID AND PostnummarID=BygdID AND Øki like '%"& District &"%' AND (Fyritøka like '%" & titel & "%' OR Lyklaorð like '%" & titel & "%') ORDER BY Rnd(HandverkaralistinId)"
   
    Set RS = Conn.Execute()

    count = 0
   
    if RS.EOF then
    response.write "<b>Einki varð funnið!</b>"
    end if
    Do While Not RS.EOF
   
    count = count + 1

%>
    <p><b><%=RS("Fyritøka")%></b><br>
    <%=RS("Bústaður")%></p>
    <p><% RS.MoveNext
    loop

    RS.close
    Set RS = Nothing
    objCmd.close
    Set objCmd = Nothing%>
Avatar billede softspot Forsker
29. august 2005 - 11:55 #32
Jeg tror du skal bruge samme connection-objekt for at det skal have en chance for at fungere. Følgenden kode er tilrettet (under antagelse af at du allerede har en connection etableret i objektet conn):

<%
    Dim objCmd
    Set objCmd = Server.CreateObject("ADODB.Command")

    ObjCmd.ActiveConnection = Conn
    ObjCmd.CommandType = 4    'Stored Procedures
    ObjCmd.CommandText = "Randomize"

    ObjCmd.Execute()
   
    SQL = "SELECT * FROM Handverkaralistin, Postnr, Bygd WHERE PostnummarID=PostnrID AND PostnummarID=BygdID AND Øki like '%"& District &"%' AND (Fyritøka like '%" & titel & "%' OR Lyklaorð like '%" & titel & "%') ORDER BY Rnd(HandverkaralistinId)"
   
    ObjCmd.CommandText = SQL

    Set RS = ObjCmd.Execute()

    count = 0
   
    if RS.EOF then
      response.write "<b>Einki varð funnið!</b>"
    end if

    Do While Not RS.EOF
   
      count = count + 1

%>
    <p><b><%=RS("Fyritøka")%></b><br>
    <%=RS("Bústaður")%></p>
    <p><%
      RS.MoveNext
    loop

    RS.close
    Set RS = Nothing
    objCmd.close
    Set objCmd = Nothing
%>
Avatar billede softspot Forsker
29. august 2005 - 11:57 #33
Kan godt være du lige skal rette forrige kodestump i flg. linie:

    ObjCmd.ActiveConnection = Conn

det skal nok rettes til

    set ObjCmd.ActiveConnection = Conn

da conn jo er et objekt (er ikke helt sikker på om conn's default-property er connectionstring, men man kunne jo være heldig). Prøv evt. begge dele :)
Avatar billede pallifo Nybegynder
29. august 2005 - 13:31 #34
Det fungerer altså ikke for mig. Nu får jeg denne fejlmelding:

  Microsoft OLE DB Provider for ODBC Drivers error '80040e37'

  [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot find the input table or query 'Randomize'. Make sure it exists and that its name is spelled correctly.

  /leita1.asp, line 44

Koden ser nu således ud:

<%    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("/Database/Handverkaralisti.mdb")

    Dim objCmd
    Set objCmd = Server.CreateObject("ADODB.Command")

    ObjCmd.ActiveConnection = Conn
    ObjCmd.CommandType = 4    'Stored Procedures
    ObjCmd.CommandText = "Randomize"

    ObjCmd.Execute()
   
    SQL = "SELECT * FROM Handverkaralistin, Postnr, Bygd WHERE PostnummarID=PostnrID AND PostnummarID=BygdID AND Øki like '%"& District &"%' AND (Fyritøka like '%" & titel & "%' OR Lyklaorð like '%" & titel & "%') ORDER BY Rnd(HandverkaralistinId)"
   
    ObjCmd.CommandText = SQL

    Set RS = ObjCmd.Execute()

    count = 0
   
    if RS.EOF then
      response.write "<b>Einki varð funnið!</b>"
    end if

    Do While Not RS.EOF
   
      count = count + 1

%>
    <p><b><%=RS("Fyritøka")%></b><br>
    <%=RS("Bústaður")%></p>
    <p><%
      RS.MoveNext
    loop

    RS.close
    Set RS = Nothing
    objCmd.close
    Set objCmd = Nothing%>
Avatar billede softspot Forsker
29. august 2005 - 13:49 #35
Hmm... Hvad nu hvis du kunne få en variabel værdi ind i dit SQL-statement, altså noget der aldrig var det samme, f.eks. en timer der kunne hjælpe med at give lidt varians i grundlaget for din tilfældighed...?

Så kunne det se således ud:

SELECT *
FROM tabel
ORDER BY Rnd(Rnd(ID) * Timer())

Hvad siger den til det???
Avatar billede softspot Forsker
29. august 2005 - 13:50 #36
Så skal du lige "rulle" tilbage til det du startede med at have og glemme de der tiltag omkring command-objektet og randomize :)
Avatar billede pallifo Nybegynder
29. august 2005 - 14:02 #37
Nu er rækkefølgen ændret, men dog ikke for hver gang jeg sender en forespørgsel :(
Avatar billede softspot Forsker
29. august 2005 - 14:08 #38
Skifter det engang imellem, eller er det bare anden ens rækkefølge...? Hvormange gange tester du for at konstatere at det ikke skifter?

Det er spøjst at det ikke fungerer, nu da der er kommet en variabel værdi med ind i ligningen???
Avatar billede pallifo Nybegynder
29. august 2005 - 14:21 #39
Dette var mærkeligt - hver gang jeg søger på 'norð' får jeg:

1. Jógvan Norðbø Poulsen
2. Norðleif Holm
3. Norðhús Sp/f
4. Norðbygg P/F
5. Allan Norðgerð

Jeg har testet det mindst 10 gange...

Hvis jeg derimod søger på 'nor' (dvs et bogstav mindre) får jeg:

1. Norðleif Holm
2. Norðbygg P/F
3. Snorri Niclasen Fa.
4. Allan Norðgerð
5. Nordhaus P/F
6. Jógvan Norðbø Poulsen
7. Norðhús Sp/f

Der er godt nok kommet 2 records til, men det mærkelige er, at nu står de samme som jeg fandt i den forrige søgning i en anden rækkefølge...
Avatar billede softspot Forsker
29. august 2005 - 14:27 #40
Mon det har noget med caching af resultater at gøre...?
Avatar billede pallifo Nybegynder
29. august 2005 - 14:34 #41
Hvad vil det sige?
Avatar billede softspot Forsker
29. august 2005 - 14:45 #42
Jeg ved ikke helt hvor det kan være, men jeg kan komme i tanke om caching på

* klienten
* på serveren
* i connectionobjektet (lukker du connection hver gang?)

Jeg synes ikke selve der er nogen af de ovenstående eksempler der lyder sandsynlige, men man må jo skyde er det man kunne forestille sig var et problem... når nu man ikke har andet at gå efter :)
Avatar billede softspot Forsker
29. august 2005 - 14:46 #43
Caching: at gemme resultatet i en eller anden buffer for at forøge performance og spare resurser på serveren.
Avatar billede pallifo Nybegynder
29. august 2005 - 15:00 #44
Hvad laver den timer, som vi satte ind i SQLsætningen tidligere?

Kan man måske uddybe den funktion lidt mere, og få timeren at starte fra forskellige steder for hver gang man sender en forespørgsel? Eller var det netop det, som timeren skulle gøre?
Avatar billede softspot Forsker
29. august 2005 - 15:06 #45
Timer skulle iflg. mine forventninger finde antallet af ticks siden kl. 12:00, så derfor forventede jeg at dem ville skifte mellem hver forspørgsel, hvilket burde være fint nok, da Rnd-funktionen så ville blive kørt med et nyt "seed" hver gang...

Det kan være du er nød til at sammensætte strengen med VBScripts Timer-funktion i stedet for at SQL-strengen ændrer sig imellem hver forspørgsel (man kunne forstille sig at der er connectionpooling som også kan have indvirkning på caching):

SQL = "SELECT * FROM tabel ORDER BY Rnd(Rnd(ID) * " & Timer & ")"
Avatar billede softspot Forsker
29. august 2005 - 15:08 #46
Timer (iflg. MSDN): antallet af sekunder siden midnat og altså ikke 12:00 (hvilket nok vil bliver opfattet som middag)... :)
Avatar billede pallifo Nybegynder
29. august 2005 - 15:33 #47
Nu har jeg følgende SQLsætning:

SQL = "SELECT * FROM tabel ORDER BY Rnd(ID) AND " & Timer & ""

Nogle gange får jeg en liste med en tilfældig rækkefølge (sådan som jeg ønsker at den skal fungere), mens jeg andre gange får denne fejlmelding:

1 - Microsoft OLE DB Provider for ODBC Drivers error '80004005'
2 - [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine
3 - does not recognize '66' as a valid field name or expression.
4 - /leita1.asp, line 39

Tallet i linje 3 ('66') skifter dog i fejlmeldingen. Det hænger nok sammen med timeren, eller hvad???
Avatar billede softspot Forsker
29. august 2005 - 15:37 #48
Hmm... det var da en variant, men tanken var at den skulle se således ud:

SQL = "SELECT * FROM tabel ORDER BY Rnd(Rnd(ID) * " & Timer & ")"

altså at den skulle tage random af random med id som "seed" gange antal sekunder siden midnat.

Du har måske prøvet dette og er gået videre...?
Avatar billede pallifo Nybegynder
29. august 2005 - 15:39 #49
Ja, det så ikke ud til at fungere så jeg gik videre.
Avatar billede softspot Forsker
29. august 2005 - 15:51 #50
Når du ændrede søgekriterierne virkede det alligevel lidt. Det giver mig et håb om at det kunne komme til at fungere med den metode jeg har lagt op til... Udfordringen bliver at finde ud af hvad det er der stimulerer en ny sekvens i tilfældighedsgeneratoren.
Avatar billede pallifo Nybegynder
29. august 2005 - 16:39 #51
Timeren kommer med et 5 cifret tal hver gang, og min db (dvs min ID) har kun ca. 600 rækker. Kan det være grunden til, at den ikke fungerer hver gang?
Avatar billede softspot Forsker
29. august 2005 - 16:56 #52
Hmmm, jeg opfatter egentlig bare "seed" som det tal der danner grundlag for tilfældighedsgeneratoren (Rnd-funktionen) og ikke som en max eller noget andet.

Du kan da prøve at udskifte

Timer

med

Timer MOD 200

så vil den bare tages resten af heltalsdivisionen og bruge som faktor for det som Rnd-funktionen returnerer (som i øvrigt er et decimaltal mellem 0 og 1).
Avatar billede pallifo Nybegynder
29. august 2005 - 17:00 #53
Har prøvet 'Timer Mod 200', og nu bliver resultatet igen det samme hver gang...
Avatar billede softspot Forsker
29. august 2005 - 17:03 #54
Jeg kan ikke pt. komme på flere varianter til denne tilgang til problemet... jeg tror lige jeg skal hvile hovedet et par timer. Spekulerer lige over det...
Avatar billede pallifo Nybegynder
29. august 2005 - 17:09 #55
Jeg takker for interessen, og glæder mig at høre fra dig igen - derfor lader jeg stadig tråden stå åben... takk igen
Avatar billede kjulius Novice
29. august 2005 - 23:31 #56
Jeg er ked af at have sendt jer på afveje med min randomize-kode. Desværre virkede det ikke.

Til gengæld tror jeg softspot er inde på noget af det rigtige mht. cachen.

Prøv evt. at sætte siden til straks at være expired. I toppen af din ASP side indsætter du:

Response.Expires = -1

ref.: http://www.w3schools.com/asp/prop_expires.asp


Hvis det ikke virker, så prøv at kigge på din browsers indstillinger mht. hvor ofte den skal tjekke om der er sket ændringer til cachede sider. I internet explorer finder du disse indstillinger under:

Funktioner, Internetindstillinger..., fanebladet Generelt, gruppen Midlertidige internetfiler, knappen Indstillinger...

Hvis den ikke allerede står til det, så prøv at sætte den til at tjekke siden ved hvert besøg på siden.

Hvis du/vi er heldige, så klarer det problemet.
I så fald kan du jo eksperimentere lidt med indstillingerne.
Avatar billede softspot Forsker
30. august 2005 - 00:25 #57
Hvis du bliver træt af at fedte rundt med SQL-udgaven (selvom jeg personligt ville foretrække den hvis det var min løsning :)), så kan du jo prøve denne udgave som er en konkretisering af busschou's forslag:

<%@ language="vbscript" codepage="1252" %>
<%
dim arrItems

function findNextItem(idx)
  findNextItem = Empty
  counter = 0
  for num = 0 to ubound(arrItems,2)
    if idx > counter then
      if not isEmpty(arrItems(0,num)) then
        counter = counter + 1
      end if
    else
      if not isEmpty(arrItems(0, num)) then
        findNextItem = arrItems(0, num)
    arrItems(0,num) = Empty
    exit for
      end if
    end if
  next
end function

function showOutput()
  randomize
  maxItems = ubound(arrItems,2)
  for idx = 0 to maxItems
    rndIdx = CInt((maxItems - idx) * Rnd())
    Response.Write(idx & " (" & rndIdx & "): " & findNextItem(rndIdx) & "<br>")
  next
end function

dim strConn, objConn, objRs
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database.mdb")
set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
set objRs = objConn.Execute("SELECT * FROM tabel")
' Omsæt recordset'et til et 2D-array hvor 1. dimension er
' kolonnenavnene og anden dimension er rækkerne
' Her er kolonnen "Navn" trukket ud, men flere kan trækkes
' ud ved at tilføje navnene i array'et
' (eksempel: objRs.getRows(-1,0,array("Navn","Adresse","Telefon")))
arrItems = objRs.getRows(-1,0,array("Navn"))
objRs.close
objConn.Close
set objRs = nothing
set objConn = nothing
%>
<html>
<head>
  <title>Show databasecontent randomly ordered</title>
</head>
<body>
  <%=showOutput()%>
</body>
</html>
Avatar billede kjulius Novice
30. august 2005 - 00:41 #58
Ja, det er godt nok meget kode, når nu SQL'en med ORDER BY RND(ID) burde virke. Den virker i hvert fald hver gang hvis man kører forespørgslen direkte i Access.
Jeg sætter mine penge på hesten ved navn "Cache".

Men du har da fået aftenen til at gå med lidt hyggelig kodemagi, ser det ud til. :-)
Avatar billede softspot Forsker
30. august 2005 - 01:00 #59
Jeg er som nævnt enig i at SQL udgaven ville være at foretrække og jeg oplevede som du selv at det i Access fungerede, derfor postede jeg mit forslag i starten af denne tråd. Jeg er dog blevet mere og mere i tvivl om hvorvidt det rent faktisk kan lade sige gøre med Rnd. Jeg har selv lavet et lille testprojekt, hvor jeg forsøger det samme, men det ser altså ud til at forspørgslen kommer igennem (den ændrer sig i det mindste hver gang, så siden bliver opdateret på serveren), men lige lidt hjælper det.

Jeg har søgt på google og fundet en udgave hvor man har en ekstrakolonne i tabellen, som opdateres med en tilfældig værdi inden udtrækket, men det er måske lige at gå over åen efter vand...
Avatar billede softspot Forsker
30. august 2005 - 02:55 #60
HEEEEEEP HEJ! Jeg tror jeg har fundet en løsning (det holdt hårdt!). Here goes:


Randomize
rndIdx = int(1000*Rnd())+1
SQL = "SELECT Rnd(" & -1 * (rndIdx) & "*ID), * FROM tabel ORDER BY 1"


Jeg tolker det således at ORDER BY 1 sorterer efter den første kolonne i resultatet, altså det tilfældige tal.
Avatar billede kjulius Novice
30. august 2005 - 03:16 #61
Ja, det ser jo ud til at virke! Tillykke! Virkelig flot arbejde. :))

Der er da ikke meget soft over dig, du er en rigtig hård nyser!

Jeg var ligesom dig kommet frem til, at der skete noget helt andet end i Access, når man bevægede sig over til ASP (nok fordi hele forbindelsen til databasen bliver lukket ned hver gang, så nummerserien starter fra samme sted hver gang).
Modsat dig, var jeg endnu langt fra at have en løsning.

Nu må jeg hellere se at komme i seng, så jeg ikke falder i søvn på arbejdet i morgen (eller i dag er det jo)!
Avatar billede nielle Nybegynder
30. august 2005 - 07:34 #62
Det burde så være det samme som:

Randomize
rndIdx = int(1000*Rnd())+1
SQL = "SELECT * FROM tabel ORDER BY Rnd(" & -1 * (rndIdx) & " * ID)"

- hvilket betyder at tallet inden i Rnd(...) er vores seed. Den synes jeg imidlertid at vi allerede har været rundt om mange gange tidligere?

Personligt synes jeg at løsningen er så "snedig" at det ikke kan passe - der må simpelthen være noget simplere.
Avatar billede pallifo Nybegynder
30. august 2005 - 09:53 #63
Jeg siger 1000-tak for jeres interesse. Eftersom dette er første gang, at jeg har startet en tråd, så må jeg lige finde ud af hvordan man uddeler point...

Jeg vælger at give softspot alle pointene, da han har lagt utrolig megen hjerne til denne tråd :o)

Tak for det!
Avatar billede pallifo Nybegynder
30. august 2005 - 10:00 #64
HJÆLP!!! Jeg kom til at give mig selv pointene, hvordan ændrer jeg det? Meningen var at softspot skulle have dem...
Avatar billede softspot Forsker
30. august 2005 - 10:13 #65
pallifo >> don't sweat it! - du kan bare give mig noget utrolig positiv karma ;)
Avatar billede pallifo Nybegynder
30. august 2005 - 10:17 #66
softspot >> det er en aftale :o)
Avatar billede softspot Forsker
30. august 2005 - 10:20 #67
nielle >> Jeg synes selv det er spøjst at det skal gøres sådan for at det fungerer, men nogle gange (selvom jeg hader disse) erkender jeg bare at det kræver mere energi end jeg er villig til at investere, at forstå hvorfor tingene er som de er... uanset hvor ulogisk det er at det ene fungerer og det andet ikke gør.
Avatar billede softspot Forsker
30. august 2005 - 10:21 #68
Takker for god karma :)
Avatar billede nielle Nybegynder
07. september 2005 - 20:57 #69
Var der nogen sinde nogen som prøvede:

SELECT * FROM dinTabel ORDER BY NewID()

Den virker i hvert fald i SQL Server - så måske virker den også i Access.
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