Avatar billede jens Nybegynder
22. oktober 2000 - 23:15 Der er 19 kommentarer og
1 løsning

Hvordan laver jeg et par vilkårlige udtræk fra en DB ?

Hej

Jeg skal lave 2 - 3 vilkårlige udtræk fra en DB - jeg har været en del svar igennem, men kunne kun finde eksempler på hvordan det gøres med ét udtræk :-(

Nogen forslag ?

Hilsen
Jens
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 23:27 #1
Function Show()
    Randomize
    RandNum = Int(Rnd * Ialt) + 1
    Record.MoveFirst
    For i = 1 to RandNum - 1
      Record.MoveNext
    next
    Response.Write Record(\"ID\") \' HER VISES EN TILFÆLDIG POST :)
end function
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 23:28 #2
Og den calles med : Show()

Avatar billede jens Nybegynder
22. oktober 2000 - 23:33 #3
hej phylox2 - viser den flere udtræk ?
Avatar billede tigerdyr Nybegynder
23. oktober 2000 - 01:54 #4
du kan ikke hente 3 vilkårlige poster med en sætning...
Du kan derimod hente hele recordsettet og så lave noget med random 3 værdier og hente posten med det mindre random nr. posten med det midterste random og post med det største...
Avatar billede keysersoze Ekspert
23. oktober 2000 - 07:26 #5
du kan sådan set godt hente 3 vilkårlige poster... hvis du bare bruger det som phylox2 skrev 3 gange... (forbind til db, tag random, luk forbindelse og forfra og forfra) du risikere dog hermed, at det er den samme post der bliver trukket alle 3 gange....
Avatar billede tigerdyr Nybegynder
23. oktober 2000 - 12:38 #6
>> keysersoze, se det er rigtigt nok, men kommentaren oven over tolker jeg som om den henter flere random på en gang...
Avatar billede janus007 Nybegynder
23. oktober 2000 - 13:19 #7
Det var da totalt besværligt at gøre sådan, se nu her :O)
åben din db og:
Function RandomRec(a)
arrRecords = rs.Getrows
rs.Close
if not rs.eof
Randomize()
intMaxarr = ubound(arrRecords, 2)
for n = 0 to a
ranRec = Int((intMaxarr+1) * Rnd)
RandomRec = RandomRec & \", \"& arrRecords(2, ranRec)
next
end if
end function

Kald funktionen med RandomRec(a), hvor a er antallet af randomrecords!!
Funktionen returnerer en kommasepareret string, som du nemt kan manipulere med Split-funktionen :O)

Janus
Avatar billede phylox2 Nybegynder
23. oktober 2000 - 13:22 #8
Ja, men man kan jo med det jeg har skrevet, skrive

Show() Show() Show()

Det vil sige, at man ikke SKAL bruge de 3 udtræk lige efter hinanden og det vil så sige, at hvis man nu skal bruge 4 udtræk skriver man bare

Show()

en gang til! :)
Avatar billede janus007 Nybegynder
23. oktober 2000 - 14:29 #9
Jamen det er da fint, men sandsynligheden for at man rammer den samme record eksisterer jo på den måde :O)
Man skal da heller ikke bruge mine udtræk lige efter hinanden, der er da frit valg når man får en variabel ik\' :O)

Jens tilføj lige denne her i min kode, så der bliver chekket for ens udtræk:
lige efter ranRec = Int((intMaxarr+1) * Rnd)...
ranRec = ranRec2
if ranRec = ranRec

Janus
Avatar billede janus007 Nybegynder
23. oktober 2000 - 14:29 #10
Jamen det er da fint, men sandsynligheden for at man rammer den samme record eksisterer jo på den måde :O)
Man skal da heller ikke bruge mine udtræk lige efter hinanden, der er da frit valg når man får en variabel ik\' :O)


Janus
Avatar billede janus007 Nybegynder
23. oktober 2000 - 14:31 #11
sikke dog en åndsvag response-tid *GG*
Avatar billede jens Nybegynder
23. oktober 2000 - 15:20 #12
ja, i må sgu undskylde, men jeg fatter minus af det - har prøvet dit phylox2, siden står bare og trækker vand ind, og CPU\'en kommer i løbetid....100%

kan i/du ikke prøve og smide et helt eksempel ind - hvis der ska flere point til, så siger i bare til...

- Jens
Avatar billede janus007 Nybegynder
23. oktober 2000 - 15:26 #13
Hej Jens!
For at undgå gentagelse af samme record, så brug det her:

Function RandomRec(a)
arrRecords = rs.Getrows
rs.Close
if not rs.eof
Randomize()
intMaxarr = ubound(arrRecords, 2)
for n = 0 to a
ranRec = ranRec2
ranRec = Int((intMaxarr+1) * Rnd)
if ranRec <> ranRec2 then
    RandomRec = RandomRec & \", \"& arrRecords(2, ranRec)
else
n = n - 1
end if
next
end if
end function
Avatar billede janus007 Nybegynder
23. oktober 2000 - 15:28 #14
Jens kan du lave udtræk fra din db??, hvis du kan det så virker mit script 100% :O) . Det er testet nu *S*

Janus
Avatar billede jens Nybegynder
23. oktober 2000 - 16:46 #15
Janus, sorry, jeg kan ikke få det til at virke - kan du ikke prøve at smide hele koden ud...hvor det er sat ind osv.

Jens
Avatar billede runesoft Nybegynder
23. oktober 2000 - 17:51 #16
Janus -> Hvor sætter du ranRec2??????  Og hvordan undgår du at der er 2 ens, hvis der er mere end 3 records?
Avatar billede janus007 Nybegynder
23. oktober 2000 - 23:45 #17
Hej Jens!
Kan du lave et udtræk fra din db?, post din åbningsreplik så *S*

Nu har jeg lavet endnu en function, der chekker for duplikater :O)
En modificeret en af min tidligere:
Function RandomRec(a)
arrRecords = rs.Getrows
rs.Close
if not rs.eof
Randomize()
intMaxarr = ubound(arrRecords, 2)
if intMaxarr*0,75 < a then
    RandomRec = \"To high number for that amount records\"
end if
exit function

for n = 0 to a
    bArr = false
    ranRec = Int((intMaxarr+1) * Rnd)
    Redim Preserve arrRandom(n)
    if Len(RanRec) = 1 then
        ranRec = \"0\" & ranrec
    end if
   
    for q = 0 to ubound(arrRandom) - 1
        if arrRandom(q) = ranRec then
            n = n - 1
            bArr = true
        end if
    next   
    if bArr = false then
        arrRandom(n) = ranRec
    end if
RandomRec = RandomRec & \"|\" & arrRecords(2, arrRandom(n))
next
end function
-------------------------------
Og den kalder du eks.vis med:
response.write RandomRec(4)
Lad os nu sige at den returnere:
Den|gang|jeg|drog|afsted

Så anvender du det på følgende facon:
arrRecord = Split(RandomRec(4) \"|\", -1, 1)
arrRecord(0) contains \"Den\"
arrRecord(1) contains \"gang\"
arrRecord(2) contains \"jeg\"
arrRecord(3) contains \"drog\"
arrRecord(4) contains \"afsted\"
----------------------------------------
Det er også gennemtestet og ikke bare et skud i tågen *GG*

Men vend tilbage hvis du ikke kan skabe conn. til db :o|

PS: runesoft - ranRec2 bliver jo sat ved første gennemkørsel til ranRec. ranRec er første gang tom, lidt tricky :O). Men ellers godt set med med 2 ens *GG*

Regardz
Janus

PSS: den fortjener snart mere end 60point. Fjeren blev til 10 høns :O)
Avatar billede jens Nybegynder
28. oktober 2000 - 00:20 #18
hej Janus

jeg kan ikke finde ud af det. Der er lagt 100 point i puljen og dem får du - så må jeg forsøge at rode vidre med sagen

Hilsen
Jens
Avatar billede janus007 Nybegynder
29. oktober 2000 - 16:38 #19
OKidoki, men ellers hjælper jeg da bare videre :O)

Avatar billede jens Nybegynder
29. oktober 2000 - 16:53 #20
mit problem er at jeg ikke ved hvordan det skal sættes samme det hele :-(

altså åbner DB\'en trækker ud osv. osv.

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

IT-JOB

RackPeople

Teknisk Lead

BEC Financial Technologies

Business Continuity Manager - Technical

Everllence

R&D Data Scientist

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger sektionschef til Systemafdelingen i Hvidovre

BEC Financial Technologies

Development Manager for Core Banking