Avatar billede theprint Nybegynder
04. maj 2003 - 14:53 Der er 6 kommentarer

En tilfældig post fra en tabel i databasen (Access)

Hej folkens,

Jeg er relativt grøn, når det kommer til VB. Og jeg har et problem. Følgende spørgsmål er også stillet på netcoders.dk, men fordi jeg er lidt presset for tid, kommer det også op her.

Jeg vil lave en funktion som returnerer værdien af en tilfældig record, i en tabel i databasen (Access 2000). Min oprindelige tanke var at bruge ID feltet, men eftersom man også kan slette records, kan der opstå "huller" i talrækken.

Funktionen skal fungere således: Man kalder den med en parameter, der angiver hvilken tabel man vil hente fra. Funktionen checker så, og returnerer den tilfældigt udvalgte record som en streng.

Indtil videre har jeg forsøgt mig med Randomize, efterfulgt af følgende SQL statement:

Select Top 1 * from tabel order by rnd()

Men dette returnerer alligevel det samme tal, hver gang funktionen kaldes.

Kan nogen hjælpe mig med dette?

Venlig hilsen,
Rasmus
Avatar billede madd Nybegynder
04. maj 2003 - 15:09 #1
SELECT * FROM tabel ORDER BY RAND() LIMIT 1
Avatar billede theprint Nybegynder
04. maj 2003 - 15:24 #2
Virker ikke. Jeg får en syntax error (missing operator missing in query RAND() LIMIT 1) ...

Jeg synes at have læst et sted, at RAND ikke virker i ACCESS, og at man skal bruge Rnd i stedet?
Avatar billede mikker Nybegynder
04. maj 2003 - 16:07 #3
Prøv med:

Rnd(-1)
Randomize

Eller

randomize timer

Altså udbygge Randomize lidt...

- Mikker
Avatar billede terry Ekspert
04. maj 2003 - 17:17 #4
I can give you an idea as how it could be done, I'll let you wok out the code.

You make a function where you can give one paramater (the table name)
Now you open a recordset using
SELECT * from YourTable

Now you should have a recordset with one or more records. Lets call th erecordset Rs.

Rs.movelast
Rs.MoveFirst
Rs.RecordCount 'Now you know how many records you have

Now you can use the rand function to give you a number beteen 1 and the number of records

Now

For i = 1 to WhatEverNumberYouGot
rs.movenext
Next i

and here you have your record
Avatar billede theprint Nybegynder
04. maj 2003 - 17:25 #5
terry: I almost understand what you're saying, but I'm afraid my level of "newbie" programmer makes me need a bit more detail.

I have already set up the function, so that you send the table name along with calling it, but I'm not sure how this movefirst/last thing works. And how I'll get a hold of the record in the table, once I have a random number.
Avatar billede terry Ekspert
04. maj 2003 - 19:10 #6
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SomeNumber As Integer
Dim pos As Integer
   
   
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=V:\ADO Example\ado ORG.mdb"
   
    Randomize    ' Initialize random-number generator.

   
   
    With rs
       
        .Open "tbl1", cn, adOpenKeyset, adLockOptimistic, adCmdTable
       
        .MoveLast
        .MoveFirst
       
       
        SomeNumber = Int((rs.RecordCount * Rnd) + 1)

        pos = 1
        Do Until .EOF Or pos = SomeNumber
    '
            .MoveNext
            pos = pos + 1
        Loop
       
    End With
   
    Debug.Print "At record " & pos
    rs.Close
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