[MS Access] Random record

Pagina: 1
Acties:

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
Is het mogelijk om met een query een random record op te halen uit een MS Access database.

Er staan 3000 records, records zijn automatisch genummerd, maar er ontbreken wel een aantal nummers omdat er records gedelete zijn.

De voorbeelden die ik heb gevonden halen alle records op en selecteren door middel van scripting een random nummer, dit lukt mij ook, maar ik zou liever zien dat ik niet alle records op hoef te halen.

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Vergeef mij dat ik 0,0 van Access weet maareuh

- neem een random nummer
- haal dat record op
- record bestaat niet? terug naar begin

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waarom genereer je niet eerst een random nummer en probeert daarna dat record op te halen?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

BtM909 schreef op woensdag 19 januari 2005 @ 14:46:
Waarom genereer je niet eerst een random nummer en probeert daarna dat record op te halen?
Dat lukt alleen als je eerst het max van het auto_id bepaald, en dan randomiseert binnen die grenzen. Echter, er missen een aantal id's door verwijdering. Je zou het zo kunnen maken dat wanneer je een lege recordset terugkrijgt, je opnieuw een random id kiest en voor de herkansing gaat. Dit net zolang totdat je een record terugkrijgt.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op woensdag 19 januari 2005 @ 14:48:
[...]

Dat lukt alleen als je eerst het max van het auto_id bepaald, en dan randomiseert binnen die grenzen. Echter, er missen een aantal id's door verwijdering. Je zou het zo kunnen maken dat wanneer je een lege recordset terugkrijgt, je opnieuw een random id kiest en voor de herkansing gaat. Dit net zolang totdat je een record terugkrijgt.
Da's blijkbaar sneller dan alle records ophalen ;)

Of bijhouden welke record-id's bestaan :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

BtM909 schreef op woensdag 19 januari 2005 @ 17:45:
[...]


Of bijhouden welke record-id's bestaan :)
Dan moet je die lijst toch ook weer ophalen? Wordt het allemaal ook niet overzichtelijker van :/.

@ts, wat is het probleem als je enkel de auto_id's ophaalt en daar random het index nummer van bepaalt, en dan het hele record ophaalt?

Voor zover ik weet kan Access geen records benaderen op basis van de 'positie' in de tabel (dat is maar goed ook, positie mag niets betekenen).

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op woensdag 19 januari 2005 @ 17:48:
[...]


Dan moet je die lijst toch ook weer ophalen? Wordt het allemaal ook niet overzichtelijker van :/.

Voor zover ik weet kan Access geen records benaderen op basis van de 'positie' in de tabel (dat is maar goed ook, positie mag niets betekenen).
Blijkbaar is het te langzaam om alle records op te halen... Ben alleen aan 't meedenken. Betwijfel trouwens of 't db ontwerp goed in mekaar zit. 3000 records is niet veel voor Access (met juiste indexen ;))

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

BtM909 schreef op woensdag 19 januari 2005 @ 17:49:
[...]

Blijkbaar is het te langzaam om alle records op te halen... Ben alleen aan 't meedenken. Betwijfel trouwens of 't db ontwerp goed in mekaar zit. 3000 records is niet veel voor Access (met juiste indexen ;))
Of de database staat gescheiden van het frontend op een andere lokatie. Dan vindt Access het niet leuk om zulke bewerkingen uit te voeren (ivm netwerksnelheid).

Volgens mij zet Access automatisch een index op het autonummeringsveld. Daarnaast lees ik nergens dat er WHERE's of sorteringen plaatsvinden, dus een index zou zelfs niet zo heel veel uit moeten mogen maken...

(ter illustratie, ik beheer een Access database met een tabel met meer dan 80.000 records, wat vlekkeloos en razendsnel gaat, zelfs met gescheiden formulieren en data)

[ Voor 13% gewijzigd door Verwijderd op 19-01-2005 17:53 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Dat kan, maar dan haalt Access wel alle records op. Het was juist de bedoeling van de ts om een random getal te genereren en enkel dat record op te vissen.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 19 januari 2005 @ 18:08:
Dat kan, maar dan haalt Access wel alle records op. Het was juist de bedoeling van de ts om een random getal te genereren en enkel dat record op te vissen.
To get <n> records at random, set the query's TopValues property to the number of records that you want.
Hoewel ik niet weet of 'ie dan nog steeds een complete recordset gaat ophalen...

[ Voor 15% gewijzigd door RobIII op 19-01-2005 18:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

RobIII schreef op woensdag 19 januari 2005 @ 18:09:
Hoewel ik niet weet of 'ie dan nog steeds een complete recordset gaat ophalen...
Om de resultset te prepareren wordt voor alle records een random waarde berekend. De totale hoeveelheid records wordt vervolgens gesorteerd. De bovenste <n> worden in de resultset geplaatst. Dit is niet efficient, maar wel random ;).

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

code:
1
2
3
SELECT TOP 1 *
FROM tabel
ORDER BY RAND()

Dat is de enige manier die ik kan bedenken om een random record op te halen, zonder dat er scripting aan te pas komt. En dan weet ik niet eens zeker of de RAND functie in Access-SQL wel beschikbaar is. Je kan het wellicht proberen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
-NMe- schreef op donderdag 20 januari 2005 @ 05:30:
code:
1
2
3
SELECT TOP 1 *
FROM tabel
ORDER BY RAND()

Dat is de enige manier die ik kan bedenken om een random record op te halen, zonder dat er scripting aan te pas komt. En dan weet ik niet eens zeker of de RAND functie in Access-SQL wel beschikbaar is. Je kan het wellicht proberen. :)
Rand is wel beschikbaar onder ACC, maar dan heet 'ie RND. En jouw methode gaat niet werken, ook niet onder MSSQL of MySQL voor zover ik weet. Waarom? Omdat op jouw manier 1x een random number wordt gegenereerd, en alle records hetzelfde nummer krijgen. Als je er echter een calculated field van maakt, dus bijv. (RND * tbl_Klanten.kl_id) kan deze methode wel werken, omdat nu voor ieder record een nieuw random number word geforceerd (omdat het een calculated field is, en ieder record dus opnieuw geevalueerd zal worden). Maar dat had je ook kunnen lezen in RobIII in "[MS Access] Random record" ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op woensdag 19 januari 2005 @ 17:52:
Of de database staat gescheiden van het frontend op een andere lokatie. Dan vindt Access het niet leuk om zulke bewerkingen uit te voeren (ivm netwerksnelheid).
[...]
(ter illustratie, ik beheer een Access database met een tabel met meer dan 80.000 records, wat vlekkeloos en razendsnel gaat, zelfs met gescheiden formulieren en data)
Je bent het met me eens dat je eerste en laatste alinea lijnrecht tegenover elkaar staan :? Da's nl precies hetzelfde wat ik probeerde te zeggen ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1