webForumDet fria alternativet

do until / "do 3 times"

9 svar · 708 visningar · startad av brorsan

brorsanMedlem sedan nov. 2001402 inlägg
#1

En nybörjarfråga.

man kan ju skriva t.ex.

 do until rs.eof 

bla bla

loop

och ange hur många poster som ska hämtas i databasen för att reglera hur många som skrivs ut, men vad är den enklaste motsvarigheten om man vill hämta t.ex. 7 poster i databasen och bara skriva ut tre av dem (så man kan skriva ut återstående fyra poster längre ned på annat ställe).

Jag skulle kunna skippa loop såklart och skriva hela koden tre ggr i följd, men om jag vill göra det med loop, hur blir det då?

LedelMedlem sedan dec. 2004736 inlägg
#2

Dim i
For i = 0 To 3
Response.Write(rs("myField"))
rs.MoveNext
Next

brorsanMedlem sedan nov. 2001402 inlägg
#3

Tackar!

EclipseMedlem sedan juli 20003 825 inlägg
#4

Alternativ lösning 1

Dim i
For i = [b]1[/b] To 3
  Response.Write(rs("myField"))
  rs.MoveNext
Next

Alternativ lösning 2

Dim i
For i = 0 To [b]2[/b]
  Response.Write(rs("myField"))
  rs.MoveNext
Next
voigtann1Medlem sedan juni 20019 519 inlägg
#5

Glöm inte även att se att det faktist finns x antal poster.
Jag kör på Eclipses alt.1:

Dim i, NumberOfLoops
NumberOfLoops = 3
If rs.RecordCount < NumberOfLoops Then NumberOfLoops = rs.RecordCount
If NumberOfLoops > 0 Then
	For i = 1 To NumberOfLoops
		Response.Write(rs("myField"))
		rs.MoveNext()
	Next
End If
EclipseMedlem sedan juli 20003 825 inlägg
#6

Själv skulle jag köra alternativ 2. Om NumberOfLoops = 3 betyder det för min hjärna att det finns FYRA poster, då första är på plats (0), eller möjligen (0,0).

Men det beror kanske lite på vad man har som referens...! :-)

Eller hur skadad man är på en skala.

TRE är alltid 3, det är ett faktum som är svårt att bortse från! Utom då möjligen i arrayer...

voigtann1Medlem sedan juni 20019 519 inlägg
#7

Eftersom ett Recordset inte kör som en Array så blir det lite "fel" med det tänket, men självklart om det är en array så är alt. 2 att rekommendera.

brorsanMedlem sedan nov. 2001402 inlägg
#8

Tack för svaren!

Jag förstod inte voigtann1s svar till 100% eller ens 90% men här är en följdfråga i alla fall. Kan man inte nollställa "i" och sen köra en till for next med i längre ned på sidan.

Vill göra så här på ett ungefär:


SQL = "SELECT blablabla ORDER BY RAND() limit 0,25"
Set rs7 = Server.CreateObject("ADODB.Recordset")
rs7.Open SQL, Connect, 1, 2

Dim i
For i = 1 To 11
  Response.Write(rs7("myField"))
  rs7.MoveNext
Next
i = ""

diverse annan kod här 

Dim i
For i = 1 To 5
  Response.Write(rs7("myField"))
  rs7.MoveNext
Next
i = ""

diverse annan kod här 

Dim i
For i = 1 To 4
  Response.Write(rs7("myField"))
  rs7.MoveNext
Next
i = ""

rs7.Close
set rs7 = nothing

Ska lägga till att på vissa sidor kommer de här tre olika for next vara med och på andra sidor kommer bara den översta vara med osv.

voigtann1Medlem sedan juni 20019 519 inlägg
#9

Du kan bara dimar i en gång
for i = 1 to 4 där sätter du ju om i till 1 så visst kan du ändra värdet på i efter loopar.

brorsanMedlem sedan nov. 2001402 inlägg
#10

ah, ok, tack, ja det fungerade ju fint när man tog ort de andra dim i.

sweet!

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)