Avatar billede jerving Nybegynder
12. marts 2003 - 17:19 Der er 7 kommentarer og
1 løsning

Tildeling af variabelnavne til væredier i array

Med følgende script trækker jeg 4 tilfældige poster ud fra min database.

-----start--------------

Sub GrabInfo

RandLoc = rs("id")&";"

End Sub

%>

<!--#include virtual='inc/connection.inc' -->

<%

Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 ' adUseClient
rs.CursorType = 3 ' adOpenStatic
rs.Open "SELECT * FROM Destinations;", Conn, , , &H0001 ' adCmdText

If Not (rs.BOF or rs.EOF) Then
  Randomize
  P1 = int(rs.RecordCount * rnd)
  rs.Move(P1)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P2 = int(rs.RecordCount * rnd)
  loop until (P1 <> P2)
  rs.Move(P2)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P3 = int(rs.RecordCount * rnd)
  loop until (P3 <> P2) and (P3 <> P1)
  rs.Move(P3)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P4 = int(RS.RecordCount * rnd)
  Loop Until (P4 <> P3) AND (P4 <> P2) AND (P4 <> P1)
  rs.Move(P4)
  GrabInfo

End If
------slut-------------

Pga. den måde jeg vil udskrive indholdet af posterne, vil jeg gerne tildele hvert element i arry'et et variabelnavn.

Er der nogen begavede hoveder, der ved hvordan laver jeg den funktion/løkke?

...Altså splitter hvert element ved ";" i arrayet og derefter tildeler hvet element et variabelnavn?

Har kæmpet med det hele dagen uden held :o(
Avatar billede Spotgun Seniormester
12. marts 2003 - 18:10 #1
Hvorfor er det du ikke bare kan nøjes med at bruge:

ditArray = split(dinstreng, ";")

og så henvise til ditArray(0) (eller 1, 2, 3 - alt efter hvilke af de fire elementer du vil ha' fat i?

Anyways, så prøv følgende (hvis det altid kun vil dreje sig om 4 elementer i arrayet):

dim var1, var2, var3, var4  '<-- skal erklæres globalt!

sub setVars(data)
  myArray = Split(data, ";")
  var1 = myArray(0)
  var2 = myArray(1)
  var3 = myArray(2)
  var4 = myArray(3)
end sub

Der er selvfølgelig ingen check for, om dit array indeholder de 4 påkrævede elementer, eller om der evt. er flere. Men det kan du jo altid bygge ind, hvis det er...
Avatar billede jerving Nybegynder
12. marts 2003 - 19:02 #2
Tak for dit svar, men det fungerer stadig ikke. Når jeg prøver at udskrive eks. var1 udskrives der ikke noget. Min kode ser nu således ud:

------Start-----

Sub GrabInfo

Dim RandLoc

RandLoc = rs("id")&";"

End Sub

%>

<!--#include virtual='inc/connection.inc' -->

<%

Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 ' adUseClient
rs.CursorType = 3 ' adOpenStatic
rs.Open "SELECT * FROM Destinations;", Conn, , , &H0001 ' adCmdText

If Not (rs.BOF or rs.EOF) Then
  Randomize
  P1 = int(rs.RecordCount * rnd)
  rs.Move(P1)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P2 = int(rs.RecordCount * rnd)
  loop until (P1 <> P2)
  rs.Move(P2)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P3 = int(rs.RecordCount * rnd)
  loop until (P3 <> P2) and (P3 <> P1)
  rs.Move(P3)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P4 = int(RS.RecordCount * rnd)
  Loop Until (P4 <> P3) AND (P4 <> P2) AND (P4 <> P1)
  rs.Move(P4)
  GrabInfo

End If

dim var1, var2, var3, var4  '<-- skal erklæres globalt!

Sub setVars(RandLoc)
  myArray = Split(RandLoc, ";")
  var1 = myArray(0)
  var2 = myArray(1)
  var3 = myArray(2)
  var4 = myArray(3)
   
End Sub

  Response.Write var1
----Slut-------------

Kan du se hvad jeg gør galt?

Kh,

Philip
Avatar billede Spotgun Seniormester
12. marts 2003 - 19:11 #3
Så vidt jeg kan se, gør du to ting forkert...

1.
Linien:
dim var1, var2, var3, var4
skal flyttes op i starten af scriptet.

2.
Din RandLoc variabel ser kun ud til at indeholde 1 ID - er det korrekt? Den skal se nogenlunde sådan ud, hvis du skriver den ud, hvis det skal virke:
id1;id2;id3;id4;

Jeg har lige prøvet at lave et simpelt eksempel, som virker fint hos mig:

<%
Dim var1, var2, var3, var4

Sub setVars(data)
    myArray = Split(data, ";")
    var1 = myArray(0)
    var2 = myArray(1)
    var3 = myArray(2)
    var4 = myArray(3)
End Sub

testArray = "13;24;53;77;"

Response.Write "Før variablernes sættes:<br>var1="& var1 &", var2="& var2 &", var3="& var3 &", var4="& var4 &"<p>"
setVars(testArray)
Response.Write "Efter variablerne er sat:<br>var1="& var1 &", var2="& var2 &", var3="& var3 &", var4="& var4 &"<p>"
%>
Avatar billede Spotgun Seniormester
12. marts 2003 - 19:12 #4
Har fundet fejlen til nr. 2:

Dim RandLoc

Sub GrabInfo
  RandLoc = RandLoc & rs("id") &";"
End Sub
Avatar billede Spotgun Seniormester
12. marts 2003 - 19:25 #5
Sæt evt. din DIM-linie øverst i scriptet, og få koblet RandLoc på den, så sparer du da en linies kode :-)
Avatar billede jerving Nybegynder
12. marts 2003 - 19:29 #6
Hmm... Du havde ret i den sidste med  RandLoc = RandLoc & rs("id") &";"
, men setVars kan jeg stadig ikke få til at fungere.

Udskriver jeg RandLoc som i nedenstående eks. udskrives der korrekt fx.: 15;3;6;14;. Men ændrer jeg den til eksempelvis Response.Write var1 vises der derimod ikke noget?

----------Start----------

Dim RandLoc

Dim var1, var2, var3, var4  '<-- skal erklæres globalt!

Sub GrabInfo

RandLoc = RandLoc &rs("id")&";"

End Sub

%>

<!--#include virtual='inc/connection.inc' -->

<%

Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 ' adUseClient
rs.CursorType = 3 ' adOpenStatic
rs.Open "SELECT * FROM Destinations;", Conn, , , &H0001 ' adCmdText

If Not (rs.BOF or rs.EOF) Then
  Randomize
  P1 = int(rs.RecordCount * rnd)
  rs.Move(P1)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P2 = int(rs.RecordCount * rnd)
  loop until (P1 <> P2)
  rs.Move(P2)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P3 = int(rs.RecordCount * rnd)
  loop until (P3 <> P2) and (P3 <> P1)
  rs.Move(P3)
  GrabInfo
  ' Next
  rs.MoveFirst
  Do
    P4 = int(RS.RecordCount * rnd)
  Loop Until (P4 <> P3) AND (P4 <> P2) AND (P4 <> P1)
  rs.Move(P4)
  GrabInfo

End If



Sub setVars(RandLoc)
  myArray = Split(RandLoc, ";")
  var1 = myArray(0)
  var2 = myArray(1)
  var3 = myArray(2)
  var4 = myArray(3)
   
End Sub

  Response.Write RandLoc

----------Slut-----------
Avatar billede Spotgun Seniormester
12. marts 2003 - 19:37 #7
Du kalder jo heller ikke setVars nogen steder...

Prøv at rette det sidste af dit script til det her:

Sub setVars(data)
  myArray = Split(data, ";")
  var1 = myArray(0)
  var2 = myArray(1)
  var3 = myArray(2)
  var4 = myArray(3)
   
End Sub

Response.Write RandLoc &"<br>"
setVars(RandLoc)
Response.Write var1 &"<br>"& var2 &"<br>"& var3 &"<br>"& var4
Avatar billede jerving Nybegynder
12. marts 2003 - 19:42 #8
Og god morgen til mig, har sovet herligt og tungt inde i hjernen hele dagen.

1000 Tak

Kh,

jerving
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