Toon posts:

Recordset Probleem ASP 3.0

Pagina: 1
Acties:

Verwijderd

Topicstarter
<mega verhaal>

Ik heb een online fotoboek gemaakt wat op zich al lange tijd prima draait. Een bezoeker kan een onderwerp kiezen en krijgt dan in één scherm alle foto's behorend bij dat onderwerp in preview(verkleind formaat)te zien. Als er op een foto wordt geklikt krijg je een vergrote versie van de foto te zien. Om het gebruiksgemak te verhogen kan je ook direct bij de grote foto naar de volgende of vorige grote foto klikken. Zie voor voorbeeld www.piepers.tk

Omdit voor elkaar te krijgen heb ik alle foto's in een tabel geplaatst. Zo ziet de tabel er uit:

-id (autonummer)
- fotoGroot( link van de grote foto)
- fotoKlein(link van de kleine foto)
- omschrijving
- categorie(het onderwerp van de foto, met nu 4 keuze mogelijkheden)

In het scherm van de grote foto is de link van de vorige foto gewoon de huidige id -1, voor de volgende foto de huidige id +1, met een if constructie om BOF en EOF op te vangen. De gebruiker ziet dus niet de foto per onderwerp 1 voor 1 langskomen, maar scrolt als het ware door de tabel. Dit wil ik nu veranderen, de gebruiker kiest een grote foto en kan van daaruit de volgende en vorige foto kiezen, maar ziet alleen de foto's van het geselecteerde onderwerp, zonder foto's van een ander onderwerp.

In de tabel lopen de id's behorend bij de verschillende onderwerpen niet regelmatig op, dus bijv. foto 1 heeft als onderwerp A, foto 2 heeft onderwerp B en foto 3 heeft weer onderwerp A.

Op zich goed te doen zou je zeggen, dus daarom heb ik de volgende code geschreven:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<%

intHuidigeId= CInt(Request.QueryString("id"))

rsfoto.Open "SELECT * FROM foto WHERE id LIKE '"& IntHuidigeId &"'", dbConnection, 3, 3 

'Geen resultaat
if rsfoto.eof then
    response.write "Geen foto gevonden." 
else

'Sla het onderwerp op voor hergebruik
OpgevraagdeOnderwerp = rsfoto("categorie")

'Schrijf de foto naar de browser
%>
= rsfoto( bla bla) 
<%

rsfoto.close

rsfoto.open "SELECT id FROM foto WHERE categorie LIKE '"& OpgevraagdeOnderwerp &"'", dbConnection, 3, 3
rsfoto.movefirst
IntEersteRecord = rsfoto("id")
rsfoto.moveLast
IntLaatsteRecord = rsfoto("id")
rsfoto.absoluteposition = IntHuidigeId

if IntHuidigeId = IntEersteRecord then
    rsfoto.move 1
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
    >Volgende foto</A>
    <%

elseif IntHuidigeId = IntLaatsteRecord then
    rsfoto.move -1
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
     >Vorige foto</A>
    </TD>
    <%
else
    rsfoto.move -1
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
     >Vorige foto</A>
    </TD>
    <%

    rsfoto.move 2
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
    >Volgende foto</A>
<%

end if


Het eerste onderwerp heeft foto's met id 1-14, en gaat daarna verder met id 73-115. De bovenstaande code laat prima de eerste foto's zien, inclusief de goede vorige en volgende foto link, maar zodra foto 73 of hoger wordt opgevraagd krijg ik deze melding:
code:
1
BOF of EOF is Waar, of de huidige record is verwijderd. Voor de gewenste bewerking moet er een huidige record zijn.

Terwijl er dus wel records in de tabel staan. 8)7 Om het nog gekker te maken krijg ik de records als ik ze één voor één opvraag (while lus) wel te zien( na de tweede query dus ook)!

Als work around heb ik met de functie getRows() alle records en een array geplaatst, maar dan is het resultaat precies hetzelfde...

Ik snap er echt niks meer van en vermoed een BUG in asp...

HELP

edit> code aangepast.

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Ik snap je probleem wel maar heb geen zin om door zo'n lap code heel te moeten bladeren. Kun je de niet relevante dingen misschien weglaten en dan alleen de relevante code posten? Is makkelijker om dan problemen te achterhalen.

  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Wat als je .movenext en .moveprevious gebruikt ipv .move 1 en .move -1?

Verwijderd

Topicstarter
devv05 schreef op 03 oktober 2002 @ 15:12:
Wat als je .movenext en .moveprevious gebruikt ipv .move 1 en .move -1?
dat is precies hetzelfde en heeft ook geen ander resultaat.

Verwijderd

rsfoto.absoluteposition = IntHuidigeId

absoluteposition is toch een index op de recordset ?

Verwijderd

Topicstarter
Verwijderd schreef op 03 oktober 2002 @ 15:33:
rsfoto.absoluteposition = IntHuidigeId

absoluteposition is toch een index op de recordset ?
Ik dacht het niet, volgens mij stuur je daarmee de cursor naar een bepaalde record.

Verwijderd

Maareh... ik bedoel:
stel je intHuidigeId = 20 maar d'r zitten maar 10 foto's in de categorie,
waarna je met asboluteposition de cursor op 20 probeert te zetten... dan heb je dus eof

Verwijderd

Topicstarter
Verwijderd schreef op 03 oktober 2002 @ 16:05:
Maareh... ik bedoel:
stel je intHuidigeId = 20 maar d'r zitten maar 10 foto's in de categorie,
waarna je met asboluteposition de cursor op 20 probeert te zetten... dan heb je dus eof
nee, als de foto niet bestaat stop hij al eerder. En de foto bestaat zeker weten. Ik heb nu de code aangepast zodat ik met boomarks werk maar het probleem blijft bestaan....

Verwijderd

Sorry als ik niet duidelijk ben,
ik bedoel:
je zet je foto-id in de variabele intHuidigId
je opent een andere recordset
je probeert de cursor binnen de nieuwe recordset te plaatsten op recordnr. [intHuidigId]
volgens mij moet je even het id van de eerst gevonden foto opslaan, en nadat je het eerste en laatste id uit de 'categorie-recordset' gevonden hebt, nogmaals door de recordset loopen om het originele id weer op te zoeken.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

i_m_eddy bedoelt dat Absoluteposition een index is en niet een id.

Als jij alle records met id 100t/m110 selecteert is de index 1t/m10

oogjes open, snaveltjes dicht


Verwijderd

Jij bent beter met woorden dan ik ... hehehe :)

edit:

Moet helaas gaan... mzl

Verwijderd

Topicstarter
ok ik snap hem. Omdat ik absoluteposition al niet vertrouwde heb ik het zo gedaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
rsfoto.Open "SELECT * FROM foto WHERE id LIKE '"& IntHuidigeId &"'", dbConnection, 3, 3 

'Geen resultaat
if rsfoto.eof then
    response.write "Geen foto gevonden." 
else

strBookmark = rsfoto.Bookmark

'Sla het onderwerp op voor hergebruik
OpgevraagdeOnderwerp = rsfoto("categorie")

'Schrijf de foto naar de browser
%>
        
<%

'Sluit huidige recordset
rsfoto.close

'Open een nieuwe recordset met alle foto's behorend bij het onderwerp
rsfoto.open "SELECT id FROM foto WHERE categorie LIKE '"& OpgevraagdeOnderwerp &"'", dbConnection, 3, 3
rsfoto.moveLast
IntLaatsteRecord = rsfoto("id")
rsfoto.movefirst
IntEersteRecord = rsfoto("id")

if intHuidigeId = intEersteRecord then
    rsfoto.Bookmark = strBookmark
    rsfoto.moveNext
    %>
        <A HREF <%

elseif intHuidigeId = intLaatsteRecord then
    rsfoto.Bookmark = strBookmark
    rsfoto.movePrevious
    %>
    <A HREF<%
else
    rsfoto.Bookmark = strBookmark
    rsfoto.movePrevious
    %>
    <A HREF<%
    
                rsfoto.Bookmark = strBookmark
    rsfoto.moveNext
    %>
    <A HREF <%
end if


zoals je ziet is de record aanwijzing nu met bookmarks ipv absoluteposition, maar het probleem blijft hetzelfde... Zodra er een "gat" tussen de id's valt krijg ik dezelfde error. Ook in een nieuwe test db.

Verwijderd

Maar nu probeer je de 2e recordset terug te zetten op een bookmark van de eerste recordset.....

Ik moet helaas gaan... mzl

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Wat wil je nu eigenlijk doen, per categorie of per foto browsen?

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Verwijderd schreef op 03 oktober 2002 @ 16:38:
Maar nu probeer je de 2e recordset terug te zetten op een bookmark van de eerste recordset.....
Kan dat niet? De waarde blijt toch in de variabele staan.. ?

Ik scroll nu per foto, maar ik wil dus per foto IN een categorie. Alsof de foto's in een aparte tabel zouden staan en je er dan per foto doorheen zou scrollen

Ik heb nu alles in 1 recordset geplaatst, maar nogsteeds geen suc6:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
rsfoto.Open "SELECT * FROM foto WHERE categorie LIKE '"& OpgevraagdeOnderwerp &"'", dbConnection, 3, 3 

'Geen resultaat
if rsfoto.eof then
    response.write "Geen foto gevonden." 
else

rsfoto.moveLast
IntLaatsteRecord = rsfoto("id")
rsfoto.movefirst
IntEersteRecord = rsfoto("id")
rsfoto.move intHuidigeId - 1
strBookmark = rsfoto.Bookmark

'Schrijf de foto naar de browser
%>
<%

if intHuidigeId = intEersteRecord then
    rsfoto.Bookmark = strBookmark
    rsfoto.moveNext
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
    <%

elseif intHuidigeId = intLaatsteRecord then
    rsfoto.Bookmark = strBookmark
    rsfoto.movePrevious
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
    <%

else
    rsfoto.Bookmark = strBookmark
    rsfoto.movePrevious
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
<%

    rsfoto.Bookmark = strBookmark
    rsfoto.moveNext
    %>
    <A HREF="fotogroot.asp?id=<%= rsfoto("id")%>&onderwerp=<% = OpgevraagdeOnderwerp %>" 
        <%

end if


Ik denk dat ADO niet kan werken met een id dat overgeslagen wordt... Anders kan ik het niet meer bedenken

[ Voor 0% gewijzigd door Verwijderd op 03-10-2002 17:03 . Reden: code toevoegen ]


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Verwijderd schreef op 03 oktober 2002 @ 15:25:
[...]


dat is precies hetzelfde en heeft ook geen ander resultaat.
Maar heb je dan niet kans dat ie id's krijgt die niet bestaan en hierdoor niet goed functioneerd?

Verwijderd

Topicstarter
devv05 schreef op 03 oktober 2002 @ 17:07:
[...]


Maar heb je dan niet kans dat ie id's krijgt die niet bestaan en hierdoor niet goed functioneerd?
nee

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Je moet je bedenken dat een recordset in feite er zo uit ziet:
indexid
011
023
038
0411


MoveNext ed hebben betrekking op je index. Id is een veld uit je tabel, die het record unique maakt. Jij kunt bv SQL vertellen dat je dat record moet hebben. ASP doet er verder niks mee. Het is voor asp gewoon een veld uit de db.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Don Facundo schreef op 03 oktober 2002 @ 18:50:
Je moet je bedenken dat een recordset in feite er zo uit ziet:
indexid
011
023
038
0411


MoveNext ed hebben betrekking op je index. Id is een veld uit je tabel, die het record unique maakt. Jij kunt bv SQL vertellen dat je dat record moet hebben. ASP doet er verder niks mee. Het is voor asp gewoon een veld uit de db.
Maar waarom kan ik op deze manier dan niet door de recordset scrollen??

Verwijderd

rsfoto.move intHuidigeId - 1

intHuidigeId is nog niet bekend (?)

edit:
typo

Verwijderd

Topicstarter
Verwijderd schreef op 04 oktober 2002 @ 12:54:
rsfoto.move intHuidigeId - 1

intHuidigeId is nog niet bekend (?)

edit:
typo
in de laatste versie code heb ik het aamaken van IntHuidigeId weg gelaten ivm leesbaarheid, maar deze variabele wordt uit de querystring gehaald en bestaat dus.

Verwijderd

Maar in de querystring is intHuidigeId het id van de foto, en dus niet gelijk aan de index van de recordset (zie berichtje Don F.) Je kunt alleen een move doen op index, niet op waarden van velden.

Verwijderd

Topicstarter
Ik snap wat je bedoelt, maar hoe krijg dan de cursor op de plaats in de recordset waar het id = intHuidigeId? Zoiets als dit: rsfoto.move "WHERE id = intHuidigeId", hoewel dat natuurlijk niet werkt... Is er een manier om de index op te vragen of zoiets?

Verwijderd

Topicstarter
GELUKT!

het is inderdaad een probleem met het sturen van de cursor:

ik heb het nu zo gedaan (dus met een rsfoto.find erin) en hij werkt perfect.!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
rsfoto.Open "SELECT * FROM foto WHERE categorie LIKE '"& OpgevraagdeOnderwerp &"'", dbConnection, 3, 3 

'Geen resultaat
if rsfoto.eof then
    response.write "Geen foto gevonden." 
else

rsfoto.moveLast
IntLaatsteRecord = rsfoto("id")
rsfoto.movefirst
IntEersteRecord = rsfoto("id")
rsfoto.find "id = "& intHuidigeID & "" 
strBookmark = rsfoto.Bookmark

'Schrijf de foto naar de browser
%>
<%

if intHuidigeId = intEersteRecord then
    rsfoto.Bookmark = strBookmark
    rsfoto.moveNext
    %>
    
    <%

elseif intHuidigeId = intLaatsteRecord then
    rsfoto.Bookmark = strBookmark
    rsfoto.movePrevious
    %>
        <%

else
    rsfoto.Bookmark = strBookmark
    rsfoto.movePrevious
    %>
    
    <%

    rsfoto.Bookmark = strBookmark
    rsfoto.moveNext
    %>
    
    <%

end if


i_m_eddy bedankt voor het laten zien van "het licht"!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Als je in je recordset wilt zoeken kun je volgens mij Seek of Find(First?) gebruiken.

EDIT: aha. ;)

oogjes open, snaveltjes dicht


Verwijderd

Geen dank, ben blij dat 't nu werkt :)
Pagina: 1