Avatar billede lasserasch Juniormester
22. februar 2006 - 00:21 Der er 13 kommentarer og
1 løsning

Insætte del af area i variabelnavn.

Hejsa.

Jeg har lavet et arey således :

<%
numoflanes = 20
for i = 1 to numoflanes
rs.open "(Min sql sætning)", sqlstr

      if rs.eof then
      lane(i) = 1
      else
      lane(i) = 0
      end if

next
%>


Mit arey skulle jo så køre fra numrene 1 til 20.
Hvis løkken så kører f.eks. for 3 gang, så ville jeg gerne have at den satte en variabel med navnet : lane3 = 0 eller 1.

Men hvordan gør man det? Er min syntaks ikke forkert her?
Avatar billede mjense173 Nybegynder
22. februar 2006 - 01:22 #1
Kan du prøve at forklare hvad du skal bruge det til, Jeg er nemlig ikke helt sikker på hvad du mener.
Avatar billede lasserasch Juniormester
22. februar 2006 - 01:32 #2
Ok. Jeg har 20 bowlingbaner (numoflanes = 20)! ok'?

Jeg fyrer så en SQL af, som tjekker en tabel i min DB. Hvis banen er optaget så skal der ligge en record i databasen som har et felt der hedder : lane_id. Dette felt indeholder så selvfølgelig banenummeret.

Min sql hedder alt noget ala : 'select lane_id from reservation_db where res_date = '"&dato&"' and res_time = '"&starttidspunkt&"' ", strsql

Den indeholder også noget inner join, men den skal altså finde et lane_id for et givent tidspunkt og dato.

Jeg vil så køre denne SQL for hver bane nr.

Derfor vil jeg lave et area. Altså for i = 1 to numoflanes

Hvis recordsettet er tomt, så vil jeg gerne lave en variabel der hedder : lane + det loop nr. vi har gang i, i area'et. F.eks. lane1 = 0 eller hvis det er anden gang løkken kører så : lane2 = 0.

Hvis recordsettet ikke er tomt skal jeg i stedet lave en værdi der hedder : lane1 = 1 eller lane2 = 1 osv...

Men hvordan får man det aktuelle løkkenummer i i navnet på ens variabel?

Jeg vil jo ikke sætte et variabel til at være noget tekst + en værdi. Jeg vil lave en variabel som har en konstant værdi enten 0 eller 1, men navnet på variablen skal være dynamisk.

Og det kan jeg ikke lige greje!

JEg har løst det med denne sindsygt lange og ret tåbelige kode :


-----------


for i = 1 to numoflanes
rs.open "select lane_id from lane_reserv inner join reservation_db on lane_reserv.reserv_id = reservation_db.reserv_id  where reservation_db.reserv_date = '"&dato&"' and lane_id = '"&i&"' and lane_tid or lane_totid = '1899-12-30 "&bowling_start&":00.000' ", strsqlconnect

if rs.eof then
if i = 1 then
lane1  = 0
elseif i = 2 then
lane2  = 0
elseif i = 3 then
lane3  = 0
elseif i = 4 then
lane4  = 0
elseif i = 5 then
lane5  = 0
elseif i = 6 then
lane6  = 0
elseif i = 7 then
lane7  = 0
elseif i = 8 then
lane8  = 0
elseif i = 9 then
lane9  = 0
elseif i = 10 then
lane10 = 0
elseif i = 11 then
lane11 = 0
elseif i = 12 then
lane12 = 0
elseif i = 13 then
lane13 = 0
elseif i = 14 then
lane14 = 0
elseif i = 15 then
lane15 = 0
elseif i = 16 then
lane16 = 0
elseif i = 17 then
lane17 = 0
elseif i = 18 then
lane18 = 0
elseif i = 19 then
lane19 = 0
elseif i = 20 then
lane20 = 0

end if
else

if i = 1 then
lane1  = 1
elseif i = 2 then
lane2 = 1
elseif i = 3 then
lane3 = 1
elseif i = 4 then
lane4 = 1
elseif i = 5 then
lane5 = 1
elseif i = 6 then
lane6 = 1
elseif i = 7 then
lane7 = 1
elseif i = 8 then
lane8 = 1
elseif i = 9 then
lane9 = 1
elseif i = 10 then
lane10 = 1
elseif i = 11 then
lane11 = 1
elseif i = 12 then
lane12 = 1
elseif i = 13 then
lane13 = 1
elseif i = 14 then
lane14 = 1
elseif i = 15 then
lane15 = 1
elseif i = 16 then
lane16 = 1
elseif i = 17 then
lane17 = 1
elseif i = 18 then
lane18 = 1
elseif i = 19 then
lane19 = 1
elseif i = 20 then
lane20 = 1

end if


end if
rs.close
next


-----------


Men det kan da ikke være rigtigt at man er nødt til at gøre det sådan! Eller ???


/Lasse

Hvis record settet er tom
Avatar billede mjense173 Nybegynder
22. februar 2006 - 01:43 #3
Kigger på det lige nu..
Avatar billede mjense173 Nybegynder
22. februar 2006 - 01:49 #4
Skal du bruge variabler med navne lane1, lane2, lane3 osv?
kan du ikke bruge et Array eks:

Dim lane(20)
if rs.eof then
vaerdi = 0
else
vaerdi = 1
end if

for i = 1 to numoflanes
lane(i) = vaerdi
next

Dette burde give det samme som din kode, men jeg kan stadigvæk ikke helt forstå hvad meningen med det er.. men det er måske bare mig som er lidt langsom :-)
Avatar billede mjense173 Nybegynder
22. februar 2006 - 01:54 #5
Indeholder dit recordset kun én record? eks lane_id = 17
Dette betyder så at bane 17 er optaget på det pågældende tidspunkt?
Du har derfor brug for at sætte alle andre baner i Arrayet til 1 mens nummer 17 skal være 0?
Avatar billede lasserasch Juniormester
22. februar 2006 - 01:54 #6
Måske mig der er dårlig til at forklare!

At forklare hele scriptet vil tage lang tid. Det er et kæmpe projekt efterhånden!
Det skal bruges til Internet Booking i bowlinghaller osv...

Du skriver :

for i = 1 to numoflanes
lane(i) = vaerdi
next

Her har vi jo problemet igen. Lane(i) burde jo referere til det aktuelle nummer i array'et ik?

Altså lane(i) skulle være et variabel navn der hedder : lane1 hvis det er første gang jeg kører igennem array'et ik?

Og lane2 næste gang osv....
Avatar billede lasserasch Juniormester
22. februar 2006 - 01:58 #7
Ja. SQL sætningen kører 20 gange. Hver gang hentes kun en record ud, hvis der da findes en. Som du kan se så spørger jeg på " WHERE lane_id = '"&i&"' "

i er den løkke jeg er ved at køre igennem fra 1 til 20.
Hvis der så ikke findes nogen record, så vil jeg lave en variabel der skal hedde : lane1 = 0 og hvis der findes en skal den hedde : lane1 = 1

Næste gang jeg så kører SQL sætningen, så spørger den efter en record for næste bane nr. og igen skal jeg lave en variabel med navnet : lane2 = 0 eller lane2 = 1

/Lasse
Avatar billede mjense173 Nybegynder
22. februar 2006 - 02:03 #8
Men hvorfor vil du bruge variabler ved navn lane1, lane2 osv.. Det er jo netop til dette formål at man har opfundet Arrays.

Hvis du vil have en variabel der hedder "lane" + i, hvor i er et tal, så giver det kun menning at bruge et array.

Jeg kender ikke til nogen funktion der kan evaluere en streng om til en variabel.
Avatar billede mjense173 Nybegynder
22. februar 2006 - 02:06 #9
for i = 1 to numoflanes
rs.open "select ... , lane_id = '" & i & "' .... "
if rs.eof then
  lane(i) = 0
else
  lane(i) = 1
end if
next
Avatar billede mjense173 Nybegynder
22. februar 2006 - 02:07 #10
Herefter har du et Array, hvor alle de baner som er reserveret på det pågældende tidspunkt har værdien 1, mens resten er 0.
Avatar billede mjense173 Nybegynder
22. februar 2006 - 02:09 #11
Så kan du herefter sætte disse variabler, hvis du syntes det er nemmere med lane1, lane2 osv:

lane1 = lane(1)
lane2 = lane(2)
lane3 = lane(3)
lane4 = lane(4)
lane5 = lane(5)
...
lane20 = lane(20)
Avatar billede mjense173 Nybegynder
22. februar 2006 - 02:10 #12
Men det er meget nemmere at bruge Arrayet... tænk bare på, hvis der kun var 10 baner, eller 30..
Avatar billede lasserasch Juniormester
23. februar 2006 - 23:46 #13
Ja. Jeg havde det samme, som du beskriver her! Problemet var at den gav en fejl når jeg brugte et array. Fandt dog ud af at det var fordi jeg ikke havde dim sat først! Så snart jeg satte den ekstra linie ind virkede det! Men smid lige et svar så får du points!
Avatar billede mjense173 Nybegynder
24. februar 2006 - 06:27 #14
Ok, held og lykke med resten af projektet!
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