Avatar billede md_craig Nybegynder
28. maj 2002 - 18:05 Der er 31 kommentarer og
1 løsning

Udvælge 5 tilfældige poster....

Hej jeg skal have udvalgt 5 forskællige poster fra en Access 2000 DB, og samme post må selvfølgelig ikke udvælges flere gange... der skal envidere være muglighed for at slette og tilføje poster.... det er altså ikke nogen koloner der indeholder en talrække fra 1 til * men det kan godt sprinde som fx:

1,2,4,5,6,8,9,15,16,19 osv...
Avatar billede md_craig Nybegynder
28. maj 2002 - 18:10 #1
der ønskes kun hjælp til selve udvælgelsen... ikke andet...
Avatar billede eagleeye Praktikant
28. maj 2002 - 18:12 #2
Jeg har dette styk kode som du kan kikke lidt på:

'connection ligges her...

antalRandom = 5
Rs.Open "SELECT * FROM Film ", Connect,1,3
inDB = rs.RecordCount
If inDB > antalRandom then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound < antalRandom
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
     
    'UDSKRIVE POST FRA RECORD HER:

  response.write rs("kolonnenavn")

  next
end if
Rs.Close
Avatar billede medions Nybegynder
28. maj 2002 - 19:11 #3
Hmmm.. jeg ved ik' helt om Access har har denne funktion, men den virker ihvert fald i MySQL..

strSQL = "SELECT * FROM tabel ORDER BY Rand()"

//>Rune
Avatar billede md_craig Nybegynder
28. maj 2002 - 20:23 #4
eagleeye >>> 1: jeg kan overhovedet ikke se op og ned på den kode... men det hjælper nok når jeg får sat lidt struktur over den...

2: i tilfælde af at den ramme et Id der ikke findes hvad gør den så... ??? jeg læste noget om det på activedeveloper, men det var ringe forklaret efter min mening... men der rundede de op eller ned.. men det så ellers noget mere enkelt ud...

:
'Conn, Rs er ADODB.Connection hhv. ADODB.Recordset

Randomize Timer

Set Rs = Conn.Execute("SELECT * FROM Tabel WHERE ID = ("&_
    "SELECT Min(ID) FROM Tabel WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM Tabel))")

men den udvælge desvære kun en så den kunne jeg ikke ummidelbart bruge...

men jeg kan evt. godt bruge dit...
Avatar billede eagleeye Praktikant
28. maj 2002 - 21:00 #5
Det jeg viser er faktisk komplet koden til at finde 5 tilfældige records, og der vil ikke være to ens.

Du skal rette denne linie:
Rs.Open "SELECT * FROM Film ", Connect,1,3

til at passe med din tabel:
Rs.Open "SELECT * FROM Tabel", Connect,1,3


Her looper den gennem de 5 valgte:

  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
     
    'UDSKRIVE POST FRA RECORD HER:

  response.write rs("kolonnenavn")

  next


Så du skal ændre:
response.write rs("kolonnenavn")

til hvordan du vil havde formateret dit output.
Avatar billede md_craig Nybegynder
29. maj 2002 - 00:46 #6
det virker ikke... den kræver et objekt... men hvilket. det er ummidelbart ikke et recordset... eller er det, for det kan godt være at jeg har lavet en stavefejl...
Avatar billede eagleeye Praktikant
29. maj 2002 - 08:43 #7
du skal havde en connection til din databasen, navnet på connectionen skal stå der hvor der står Connect
Rs.Open "SELECT * FROM Tabel", Connect,1,3

Så hvis din connection hedder conn:
Rs.Open "SELECT * FROM Tabel", Conn,1,3

Ligeledes skal du havde en linie som denne i toppen af filen:
Set rs = Server.Createobject("ADODB.Recordset")
Avatar billede md_craig Nybegynder
29. maj 2002 - 11:23 #8
min connectiona hedder cn... og så skal der vel bare stå cn der hedder cennect... og jeg har oprettet et reccordset... men jeg prøver lige igen senere i dag... som jeg sagde så kunne det være jeg havde stavet forkert.... ;o)
Avatar billede md_craig Nybegynder
29. maj 2002 - 16:51 #9
Jeg kan inte få det til at virke den kommer med objekt required...
Avatar billede eagleeye Praktikant
29. maj 2002 - 17:52 #10
Har du denne med:
Set rs = Server.Createobject("ADODB.Recordset")
Avatar billede eagleeye Praktikant
29. maj 2002 - 17:53 #11
Der hvor der åbens et recorsdset, skal det væe med cn som conenction:
Rs.Open "SELECT * FROM Tabel", cn,1,3
Avatar billede md_craig Nybegynder
29. maj 2002 - 18:29 #12
ja... og det er faktisk lige hvad jeg har på nuværende tidspunkt...

men jeg arbejder med at få lagret alle ID'er i et Array...

således at:IDinDB = ArrRec(1,2,4,5,6,8,9,15,16,19)

og hvor jeg så går ind og snupper 5 telfældige fra det array... men jeg ved ikke helt hvordan jeg skal gøre det.... jeg har fundet meget ringe dokumentation derom...
Avatar billede md_craig Nybegynder
29. maj 2002 - 18:33 #13
Dim strPath, strDSN, cn, SQL, rs

strPath = server.Mappath("Data.mdb")
strDSN = "provider = microsoft.jet.OLEDB.4.0; Data Source =" & strPath
set cn = server.createobject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")


SQL = "SELECT Array.ID, Array.TEXT FROM Array;"

rs.open SQL, strDSN,1,3


rs.close
set rs = Nothing
---------------------------------------------------------------------------
Det er i princippet det jeg har nu... for jeg kan ikke få det med array til at funge...
Avatar billede md_craig Nybegynder
29. maj 2002 - 18:35 #14
Hov
------------------------------------------
Dim strPath, strDSN, cn, SQL, rs

strPath = server.Mappath("Data.mdb")
strDSN = "provider = microsoft.jet.OLEDB.4.0; Data Source =" & strPath
set cn = server.createobject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")
cn.open strDSN

SQL = "SELECT Array.ID, Array.TEXT FROM Array;"

rs.open SQL, cn,1,3


rs.close
set rs = Nothing

cn.Close
Set cn = Nothing
Avatar billede eagleeye Praktikant
29. maj 2002 - 19:02 #15
Du kan vælge et tilfældigt tal fra et array på denne måde:

talStr = "389,195,379,1094,391,273,276,114,277"
talArr = Split(talStr,",")
Randomize
indexToNo = Int((UBound(talArr)+1)*RND())
tilTal = CStr(talArr(indexToNo))
Avatar billede md_craig Nybegynder
29. maj 2002 - 19:26 #16
jo... men jeg skal bare have talene ind i arrayet... envidere skal det udvalgte tal slettes....

Array = alle ID (Array = ID1,ID2,ID3....) But how...
--------------------------------------------------------------------------
Array: 1,2,4,5,6,8,9,15,16,19

første tal vælges: tal=2
Tal slettes eller sættes lig "": Slet 2

Array: 1,,4,5,6,8,9,15,16,19

næste tal vælges: tal=6
Tal slettes eller sættes lig "": Slet 6

Array: 1,,4,5,,8,9,15,16,19

osv....
--------------------------------------------------------------------------

men hvordan jeg gør det rent praktisk ved jeg ikke lige, det er mit problem...
Avatar billede eagleeye Praktikant
29. maj 2002 - 21:50 #17
StrendMedID = "1,2,4,5,6,8,9,15,16,19"
talArr = Split(StrendMedID,",")

antalRandom = 5
inDB = UBound(talArr)
If inDB > antalRandom then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound < antalRandom
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
end if

strIndex indeholder du en liste med 5 tilfælde tal så skal man hednt ID ud fra talArr..


myArr=split(strIndex,",",-1)
For i = Lbound(myArr) to Ubound(myArr)
ID = talArr(myArr(i))
sql = "SELECT * FROM tabel WHERE ID = " & ID
set rs = cn.execute(sql)
response.write rs("kolonnenavne") & "<br>"
next
Avatar billede md_craig Nybegynder
29. maj 2002 - 22:54 #18
<%
Dim strPath, strDSN, cn, SQL, rs, SQLrun, randSTK, TalArr
Dim inDB, indexFound, strIndex, newID, myArr, RSrun, ID

strPath = server.Mappath("Data.mdb")
strDSN = "provider = microsoft.jet.OLEDB.4.0; Data Source =" & strPath
set cn = server.createobject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")
cn.open strDSN

SQL = "SELECT Array.ID, Array.TEXT FROM Array;"

rs.open SQL, cn,1,3

TalArr = rs.RecordCount

randSTK = 5
inDB = Ubound(TalArr)
If inDB > randSTK Then
  Randomize timer
  newID = int(Rnd*inDB)
  strIndex = "," & newID & ","
  indexFound = 1
  Do While indexFound < randSTK
  Do
    newID = Int(Rnd*inDB)
  Loop While inStr(StrIndex,"," & newID & ",") > 0
  StrIndex = StrIndex & newID & ","
  indexFound = indexFound + 1
  Loop
  StrIndex = Mid(StrIndex,2,Len(StrIndex)-2)
End If

myArr = Split(StrIndex,",",-1)
For i = Lbound(myArr) to Ubound(myArr)
ID = TalArr(myArr(i))

rs.close
set rs = Nothing

SQLrun = "SELECT Array.ID, Array.TEXT FROM Array WHERE ID = " & ID & ";"
set RSrun = cn.execute(SQLrun)

  Response.write "<Table width=""100"" Border=""1"">"

Do While Not RSrun.EOF

  Response.write "<TR><TD Width=""20"" Border=""1"">" & RSrun("ID") & "</TD>"
  Response.write "<TD Width=""80"" Border=""1"">" & RSrun("TEXT") & "</TD></TR>"

RSrun.MoveNext
Loop

  Response.write "</Table>"

cn.Close
Set cn = Nothing
%>

---------------------------------------------------------------------------

så langt så godt... men hvad er forkert ??? der er garanteret noget med variablerne....
Avatar billede eagleeye Praktikant
30. maj 2002 - 09:44 #19
Ret den første SQL fra:
SQL = "SELECT Array.ID, Array.TEXT FROM Array;"
Til:
SQL = "SELECT Array.ID FROM Array;"

---
Prøv at rette denne:
TalArr = rs.RecordCount

til:
TalArr = rs.GetRows


---
Flyt disse to inier op til lige efter TalArr = rs.GetRows
rs.close
set rs = Nothing

---
Ret denne linie:
inDB = Ubound(TalArr)
Til:
inDB = Ubound(TalArr,2)+1

---
Ret denne:
ID = TalArr(myArr(i))
Til:
ID = TalArr(0,myArr(i))
Avatar billede md_craig Nybegynder
30. maj 2002 - 10:30 #20
nope... men jeg har fundet en måde at få alle ID ud...

(Og hvor var jeg du ikke at tænke på det....)

og så kan jeg ikke længere se nødvendigheden i Racordsettet....

AllRec = AllRec & RS("ID") & ","
AllRec = Left(AllRec, (Len(AllRec)-1))

og det har jeg fået til at virke... og jeg har også fået den til at hente 5 tilfældige... men da det er meget kringlet i forhold til den du har... så ville jeg gerne have den til at virke... men ellers så gør det ikke noget...

jeg bruger simpelthen denne:

talStr = "389,195,379,1094,391,273,276,114,277"
talArr = Split(talStr,",")
Randomize
indexToNo = Int((UBound(talArr)+1)*RND())
tilTal = CStr(talArr(indexToNo))

og for hver gang jeg henter et tal, så sletter jeg det fra min streng... men det skal så gøres 5 gange... ;o(

men det virker da i det mindste...

din: http://www.it-links.dk/test3/default2.asp
min (med hjælp fra dig): http://www.it-links.dk/test3/default.asp
Avatar billede md_craig Nybegynder
30. maj 2002 - 10:31 #21
ok næsten da...
Avatar billede eagleeye Praktikant
30. maj 2002 - 10:46 #22
Arh prøv atsætte en next ind efter denne linie:
Response.write "</Table>"

Sådan her:
Response.write "</Table>"
next
Avatar billede eagleeye Praktikant
30. maj 2002 - 10:54 #23
Prøv evt dette i en ny fil:

strPath = server.Mappath("Data.mdb")
strDSN = "provider = microsoft.jet.OLEDB.4.0; Data Source =" & strPath
set cn = server.createobject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")
cn.open strDSN

SQL = "SELECT Array.ID, Array.TEXT FROM Array;"

antalRandom = 5
Rs.Open SQL, cn,1,3
inDB = rs.RecordCount
If inDB > antalRandom then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound < antalRandom
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)

Response.write "<Table width=""100%"" Border=""1"">"

  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
     
  Response.write "<TR><TD Width=""20%"" Border=""1"">" & rs("ID") & "</TD>"
  Response.write "<TD Width=""80%"" Border=""1"">" & rs("TEXT") & "</TD></TR>"

  next

Response.write "</Table>"

end if
Rs.Close
Avatar billede md_craig Nybegynder
30. maj 2002 - 11:25 #24
det var faktisk en hel ny fil....

men der var den der ekstra SQL... så ner er der oxo en

http://www.it-links.dk/test3/Default3.asp

men hvad med variabler ???

der er hvertfald

Dim Rs, cn, strPath, strDSN, antalRandom

og så regner jeg med disse oxo er variabler:

Dim myArr, strIndex, indexFound, newid, inDB

er der nogen jeg her overset, eller nogen der ikke er variabler ???
Avatar billede eagleeye Praktikant
30. maj 2002 - 11:48 #25
så skal der en:

Dim i

med.
Avatar billede eagleeye Praktikant
30. maj 2002 - 16:51 #26
hmm ja alle variable skal DIM'es:

Dim i, SQL
Avatar billede md_craig Nybegynder
31. maj 2002 - 14:25 #27
ved jeg godt....... men nu virker den anden metode jeg bruger 100% (indtil videre...), jeg er endnu ikke stødt på nogen fejl... men som tidligere så var det en helvedes masse kode... i forholde...

men det med at rive talene ud at tabellen har jeg løst... på en måde hvor jeg kan sige til mig selv "HVORFOR HELVEDE TÆNKTE JEG IKKE PÅ DET ??? MIG IDIOT !!!"""

jeg har bare gået ind i en helt almindelig udskrivning uden Recordsets osv.... og så bare:

AllRec = AllRec & rsRR("ID") & ","
AllRec = Left(AllRec, (Len(AllRec)-1))

Kort og simpelt og så virker det...

og så bruger jeg en IDIOT udvælgelse...

Dim Arr, ITO, Tal, TalRem

Arr = Split(AllRec,",")
Randomize
ITO = Int((UBound(Arr)+1)*RND())
Tal = CStr(Arr(ITO))

AllRec = "," & AllRec & ","
TalRem = "," & Tal & ","
AllRec = Replace(AllRec ,"" & TalRem & "", ",",1,-1,1)
AllRec = Replace(AllRec ,",,", ",",1,-1,1)

If Left(AllRec, 1) = "," Then
  AllRec = Right(AllRec, (Len(AllRec)-1))
Else
  AllRec = AllRec
End If
  AllRec = Left(AllRec, (Len(AllRec)-1))

den køre så 5 gange.... og det er lidt meget kode kan du god se... men det virker da... så jeg ved ikke om vi skal lægge det på hylden eller prøve at få det andet til at virke...

uanset hvad så får du dine point...
Avatar billede eagleeye Praktikant
31. maj 2002 - 15:01 #28
tja ... hvis du vil prøve at få denne til at virker skal alle variable laves med DIM eller fjern option Explicit:
http://www.it-links.dk/test3/Default3.asp

Der mangler en DIM SQL, i
Avatar billede md_craig Nybegynder
31. maj 2002 - 15:33 #29
Dim Rs, cn, strPath, strDSN, antalRandom, i, SQL
Dim myArr, strIndex, indexFound, newid, inDB

er den jeg har....
Avatar billede eagleeye Praktikant
31. maj 2002 - 15:36 #30
Også denne:
Dim randSTK
Avatar billede md_craig Nybegynder
31. maj 2002 - 16:22 #31
hov ja... det var en misser...

sådan så funger det... så skal det bare implementeres i det jeg skal bruge det til når jeg får tid... takker...
Avatar billede md_craig Nybegynder
31. maj 2002 - 16:25 #32
det skal foresten bruges til at vise sponsore her:

www.it-links.dk/test

hvis du nu ville vide det... og grunden til at det skulle laves på denne måde er at vi kan uploade sponsore fra siden, så vi ikke skal opdatere vores database konstandt, vi skal bare logge ind som admin, og så vælge tilføj/slet sponsor

så skriver vi sponsorens navn, URL(hvis mugligt), og så vælge det billede der skal uploades sammen med... smart ikke
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