Avatar billede mite Nybegynder
05. september 2000 - 12:15 Der er 21 kommentarer og
3 løsninger

4 tilfældige link fra database

Jeg har et problem med hensyn til udtræk af 4 tilfældige og forskellige link fra database.
Jeg ved jeg skal bruge array, men her ligger tilfældigvis ikke min største viden. Så det jeg behøver er selve koden til udtrækket. Håber der er en venlig sjæl der har en løsning.
Hilsen mite
Avatar billede bacardil Nybegynder
05. september 2000 - 12:18 #1
Skal du bruge både kode og database?
Avatar billede mite Nybegynder
05. september 2000 - 12:20 #2
Nej...database har jeg, så det er kun selve koden til udtrækket jeg har brug og den giver mig kvaler.
Avatar billede bacardil Nybegynder
05. september 2000 - 12:24 #3
Hvad hedder db og feltnavnene.
Avatar billede mite Nybegynder
05. september 2000 - 12:30 #4
Databasen hedder: link.mdb
Felterne hedder: webID, Webnavn, url
Avatar billede bacardil Nybegynder
05. september 2000 - 12:47 #5
<%
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath(\"link.mdb\")

for i = 1 to 4

INPUT = \"SELECT Count(webid) AS Count FROM link\"
Set counter = Conn.Execute(INPUT)

INPUT = \"SELECT * FROM link\"
Set rs = Conn.Execute(INPUT)

If counter(\"Count\") > 0 Then
  Randomize()
  Move = Int((counter(\"Count\") - 1 + 1) * Rnd + 1) - 1
   
  rs.Move Move
End If
if rs.eof Then
response.write \"Der blev ik fundet noget\" & \"<br>\"
else
Response.Write rs(\"url\") & \"<br>\"
end if

rs.Close
Set rs = Nothing
counter.close
set counter = nothing
next

Conn.Close
Set Conn = Nothing
%>
Avatar billede mite Nybegynder
05. september 2000 - 13:17 #6
Jeg er ked af at sige det, men koden laver ikke 4 tilfældige link. Der er nogen gange dobbelt af samme link. Har du en anden løsning?
Avatar billede tpiil Nybegynder
05. september 2000 - 13:56 #7
jeg er lige med på en lytter!
Avatar billede mite Nybegynder
05. september 2000 - 14:00 #8
Det kom vist til at gå lidt stærkt dajeg kom med en kommentar til bacardil.
Koden laver selvfølgelig 4 tilfældige link, men ikke 4 forskellige link.
Avatar billede sjensen Nybegynder
05. september 2000 - 14:43 #9
mite, hvis du kun skal bruge 4 så prøv følgende,
som er baseret på bacardils forslag:

<%
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath(\"link.mdb\")

L1 = 0
L2 = 0
L3 = 0
L4 = 0

INPUT = \"SELECT Count(webid) AS Count FROM link\"
Set counter = Conn.Execute(INPUT)

INPUT = \"SELECT * FROM link\"
Set rs = Conn.Execute(INPUT)

If counter(\"Count\") > 4 Then
  Randomize()
  L1 = Int((counter(\"Count\") - 1 + 1) * Rnd + 1) - 1
  L0 = 0
  while L0 <> L1 do
  L0 = Int((counter(\"Count\") - 1 + 1) * Rnd + 1) - 1
  wend
  L2 = L0
  L0 = 0
  while (L0 <> L1) and (L0 <> L2) do
  L0 = Int((counter(\"Count\") - 1 + 1) * Rnd + 1) - 1
  wend
  L3 = L0
  L0 = 0
  while (L0 <> L1) and (L0 <> L2) and (L0 <> L3) do
  L0 = Int((counter(\"Count\") - 1 + 1) * Rnd + 1) - 1
  wend
  L4 = L0
End If
if rs.eof Then
response.write \"Der blev ik fundet noget\" & \"<br>\"
else
rs.move L1
Response.Write rs(\"url\") & \"<br>\"
rs.move L2
Response.Write rs(\"url\") & \"<br>\"
rs.move L3
Response.Write rs(\"url\") & \"<br>\"
rs.move L4
Response.Write rs(\"url\") & \"<br>\"
end if

rs.Close
Set rs = Nothing
counter.close
set counter = nothing

Conn.Close
Set Conn = Nothing
%>

Avatar billede mite Nybegynder
05. september 2000 - 14:56 #10
Jeg har kopieret koden direkte over. Følgende fejl kommer:
Microsoft VBScript compilation error \'800a0400\'

Expected statement

wend

Det er den første wend der er probs ved.

Avatar billede sjensen Nybegynder
05. september 2000 - 15:12 #11
prøv at udskifte wend med loop
Avatar billede bacardil Nybegynder
05. september 2000 - 22:18 #12
hva har du brug for mere hjælp eller?
Avatar billede mite Nybegynder
06. september 2000 - 07:49 #13
Ja jeg har brug for hjælp, for problemmet er ikke løst endnu. Jeg har udskriftet wend med loop og nu får jeg følgende fejl:

Microsoft VBScript compilation error \'800a0400\'
Expected statement
End If

  L4 = L0
End If  \'det denne end if der skaber probs
if rs.eof Then

Avatar billede sjensen Nybegynder
06. september 2000 - 09:10 #14
egentligt skal end if vel også være et sammensat ord \"endif\"

Prøv det engang.
Avatar billede mite Nybegynder
06. september 2000 - 09:15 #15
Der kommer samme fejl.
Avatar billede sjensen Nybegynder
06. september 2000 - 09:29 #16
Jeg skal lige sikre mig at du har brugt L0 (L + nul) og ikke LO (L + et o som i ohm) ?

LO er sikker et beskyttet ord, hvorimod L0 blot er en variabel.
Avatar billede mite Nybegynder
06. september 2000 - 09:33 #17
Jeg har brugt tallet 0 (nul) - den er kopieret direkte her fra siden.
Virker den ved dig???
Avatar billede sjensen Nybegynder
06. september 2000 - 09:38 #18
Jeg har ikke prøvet den fordi jeg ikke lige ahr en db som dig. Kunne du ikke vise den kode du har fået sat sammen. Du har muligvis lavet en fejl i koden et eller andet sted.
Avatar billede mite Nybegynder
06. september 2000 - 09:45 #19
Koden er sat ind i en anden aspfil med include file. Koden ser således ud:

<%
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=\" & Server.MapPath(\"db/link.mdb\")

L1 = 0
L2 = 0
L3 = 0
L4 = 0

INPUT = \"SELECT Count(webid) AS Antal FROM link\"
Set counter = Conn.Execute(INPUT)

INPUT = \"SELECT * FROM link\"
Set rs = Conn.Execute(INPUT)

If counter(\"Antal\") > 4 Then
  Randomize()
  L1 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1
  L0 = 0
  while L0 <> L1 do
  L0 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1
  loop
  L2 = L0
  L0 = 0
  while (L0 <> L1) and (L0 <> L2) do
  L0 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1
  loop
  L3 = L0
  L0 = 0
  while (L0 <> L1) and (L0 <> L2) and (L0 <> L3) do
  L0 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1
  loop
  L4 = L0
EndIf
if rs.eof Then
response.write \"Der blev ik fundet noget\" & \"<br>\"
else
rs.move L1
Response.Write rs(\"url\") & \"<br>\"
rs.move L2
Response.Write rs(\"url\") & \"<br>\"
rs.move L3
Response.Write rs(\"url\") & \"<br>\"
rs.move L4
Response.Write rs(\"url\") & \"<br>\"
endif

rs.Close
Set rs = Nothing
counter.close
set counter = nothing
next

Conn.Close
Set Conn = Nothing

%>
Avatar billede sjensen Nybegynder
06. september 2000 - 11:10 #20
Jeg er bange for  at vi har rodet for meget i det. Prøv denne opstilling istedet:

<%
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=\" & Server.MapPath(\"db/link.mdb\")
%>

L1 = 0
L2 = 0
L3 = 0
L4 = 0

<%
INPUT = \"SELECT Count(webid) AS Antal FROM link\"
Set counter = Conn.Execute(INPUT)

INPUT = \"SELECT * FROM link\"
Set rs = Conn.Execute(INPUT)

If counter(\"Antal\") > 4 Then
%>
  Randomize()
<% L1 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1 %>

  L0 = 0

<% while L0 <> L1 do
  L0 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1
  wend %>

  L2 = L0
  L0 = 0

<% while (L0 <> L1) and (L0 <> L2) do
  L0 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1
  wend %>

  L3 = L0
  L0 = 0

<% while (L0 <> L1) and (L0 <> L2) and (L0 <> L3) do
  L0 = Int((counter(\"Antal\") - 1 + 1) * Rnd + 1) - 1
  wend %>

  L4 = L0

<%
EndIf
if rs.eof Then
response.write \"Der blev ik fundet noget\" & \"<br>\"
else
rs.move L1
Response.Write rs(\"url\") & \"<br>\"
rs.move L2
Response.Write rs(\"url\") & \"<br>\"
rs.move L3
Response.Write rs(\"url\") & \"<br>\"
rs.move L4
Response.Write rs(\"url\") & \"<br>\"
endif
rs.Close
Set rs = Nothing
counter.close
set counter = nothing
next

Conn.Close
Set Conn = Nothing
%> 

Som du kan se er det wend der bruges til while...do og loop bruges sammen med \"do while..\"

Og så har vi glemt hhv. <% og %> rundt om de statements der har med db at gøre. Det er muligt der stadig er kage i den del, men du kan jo prøve dig frem.
Avatar billede mite Nybegynder
06. september 2000 - 11:21 #21
Jeg roder lidt med det.
Avatar billede meelby Nybegynder
06. september 2000 - 20:51 #22
Jeg har på et andet tidspunkt fået hjælp til samme problem, og fik løsning via denne koden, Hvor du selv kan sætte antal du vil udvælge. Jeg har brugt et tal på 500 forskellige numre, uden gentagelser;


Function Random(MaxTal,i)
  Randomize
  DIM NytTal, EnsTemp
  EnsTemp = 1
  NytTal = Int(Rnd * MaxTal) + 1
  DO WHILE EnsTemp>0
    EnsTemp = 0
    FOR j=1 TO i-1
      IF Randnum(j) = NytTal THEN
        EnsTemp=EnsTemp+1
        NytTal = Int(Rnd * MaxTal) + 1
        EXIT FOR
      END IF
    NEXT
  LOOP
  Random = NytTal
END FUNCTION


\'///// Find et tilfældigt tal
dim Randnum(4)
for i=1 to 4
Randnum(i) = Random(100,i)
  Response.Write(Randnum(i) & \", \")
next
Avatar billede meelby Nybegynder
10. september 2000 - 07:40 #23
Donk, donk er der nogen hjemme.
Avatar billede mite Nybegynder
10. september 2000 - 12:49 #24
Rolig nu meelby...jeg har ikke været hjemme de sidste par dage såååå. Dit svar virkede - tak for det.
Point...ja dem må i dele. Bacardil og Sjensen kom med forslag til løsningen, så de skal selvfølgelig har noget for deres ulejlighed.
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