webForumDet fria alternativet
Logga in / Bli medlem

Recordsetstrul

ASP

13 svar · 216 visningar · startad av Gein

Medlem sedan sep. 20005 700 inlägg
Trådstart#1
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("knivbas.mdb")&";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Set rs = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT bt.namn, bt.id as tid, bg.id, bg.titel FROM bilder_typ bt, bilder_grupp bg WHERE bt.id = bg.sektion ORDER BY bg.sektion ASC"
RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic
lasttyp = ""
Do until RecSet.EOF
    if not lasttyp = RecSet("tid") then
        lasttyp = RecSet("tid")
        %>
        <br/><b><%=RecSet("namn")%></b><br/>
        <%
    end if
    SQL2 = "SELECT count(*) as totalt FROM bilder WHERE gid='"&RecSet("id")&"'"
    *rs.Open SQL2, Connect, adOpenStatic, adLockOptimistic
    'Response.Write SQL2
    %>
    <a href="pics_more.asp?gid=<%=RecSet("id")%>"><%=RecSet("titel")%></a> - (<%'=rs("totalt")%> bilder)<br/>
<%
    RecSet.MoveNext
Loop

RecSet.Close
rs.Close
Connect.Close
Set Connect = Nothing

Felmeddelande på den rad som jag har markerat med en *.

Feltyp:
ADODB.Recordset (0x800A0E79)
Åtgärden är inte tillåten när objektet är öppet.
/pics.asp, line 73

vad är felet?

Medlem sedan mars 2001309 inlägg
#2

Här försöker du öppna recordsetet varje varv i loopen ......

*rs.Open SQL2, Connect, adOpenStatic, adLockOptimistic

då måste du ju stänga det efter varje varv också !!!!!!

Fattar du vad jag menar !

Medlem sedan sep. 20005 700 inlägg
#3

ahaaa, ja just ja!
va dum jag är, jag provar!

Medlem sedan nov. 20017 144 inlägg
#4

Jag tror att du inte skall lägga detta i loopen:


    SQL2 = "SELECT count(*) as totalt FROM bilder WHERE gid='"&RecSet("id")&"'"
    *rs.Open SQL2, Connect, adOpenStatic, adLockOptimistic
    'Response.Write SQL2

MVH Jesper

Medlem sedan sep. 20005 700 inlägg
#5

funkade såklart utmärkt!
Tackar!

Medlem sedan sep. 20005 700 inlägg
#6

Jesper T skrev:

Jag tror att du inte skall lägga detta i loopen:


    SQL2 = "SELECT count(*) as totalt FROM bilder WHERE gid='"&RecSet("id")&"'"
    *rs.Open SQL2, Connect, adOpenStatic, adLockOptimistic
    'Response.Write SQL2

MVH Jesper

jo, det ska vara innanför loopen

Medlem sedan nov. 20017 144 inlägg
#7

Ja, ha.

Förlåt då! :r

Medlem sedan sep. 20005 700 inlägg
#8

Jesper T skrev:

Ja, ha.

Förlåt då! :r

;) :f

Medlem sedan mars 20015 287 inlägg
#9

Fast hur som helst vore det väl onekligen bäst med en join mellan databaserna och hämta allt i en öppning, om det är möjligt, i stället för att öppna o stänga som en liten tok.
Fråga dock inte mig hur den joinen skall se ut...

Medlem sedan sep. 20005 700 inlägg
#10

Jag vet inte exakt hur join funkar, men det är väl att man kopplar ihop tabeller, och det har jag ju redan gjort.
Jag tror jag är tvungen att öppna o stänga "som en tok" precis som jag gör just nu faktiskt :)

Medlem sedan mars 20015 287 inlägg
#11

Ja, men se det har du ju! :)
Njo, det jag tänkt var att kan man inte få reda på antalet bilder (din count) i den första frågan direkt?
Men som sagt, det kanske inte går och hur som helst vet inte jag hur det skulle gå till. Bara en tanke.

Medlem sedan nov. 20017 144 inlägg
#12

funkar det inte med recset.recordcount i loopen?

Medlem sedan dec. 200012 464 inlägg
#13

Gör en skalär subselect, vetja.

SQL = "SELECT bt.namn, bt.id as tid, bg.id, bg.titel, " & _
" (SELECT count(*) FROM bilder WHERE gid=bg.id ) as totalt " & _
" FROM bilder_typ bt, bilder_grupp bg " & _
" WHERE bt.id = bg.sektion " & _
" ORDER BY bg.sektion ASC"

Borde gå bra om du inte har soppat till det med datatyperna ;)

Har dessa två, gid och bg.id, samma datatyp?

Medlem sedan nov. 20017 144 inlägg
#14

skalär subselect
Visste inte äns att ordet existerade... :)

265 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)