webForumDet fria alternativet

Hur fungerar RecSet?

ASP

19 svar · 571 visningar · startad av Jiggr

Medlem sedan juni 200518 inlägg
Frågan#1

Om man skapar ett RecSet... typ:

Set RS = Connection.Execute("SELECT * FROM table")

Sen kör man följande kommandon på den

RS.MoveNext
RS.MoveNext
RS.MoveNext

Sen tar man bort nästa rad som RS kommer till, tex:

Connection.Execute("DELETE FROM table WHERE id = x")

Vad kommer då hända om man efter denna kör

RS.MoveNext
Response.write(RS("id") & RS("textmeddelande"))

Vi får anta att kolumnerna som finns i tabellen table är id och textmeddelande.

Kommer ett felmeddelande returneras eller hoppas den över denna helt enkelt? Eller har jag missuppfattat något?

Kan inte testa själv då jag inget har att testa på för tillfället.

Medlem sedan nov. 20021 222 inlägg
#2

Välkommen till Webforum!

Jag fattar inte riktigt vad du menar. Varför skriva så här

RS.MoveNext
RS.MoveNext
RS.MoveNext

Tre gånger? Då kommer du få ett felmeddelande

Så här ska det vara om du ska göra det rätt.

set rs = connect.execute("select * from table")

do until rs.eof

Response.write(RS("id") & RS("textmeddelande"))

rs.movenext
loop
Medlem sedan juni 200518 inlägg
#3

Skrev så bara för att visa att jag bläddrar mig frammåt tre gånger i "RecSettet". Sen tar jag bort där "RecSettet" pekar och försöker skriva ut denna, jag undrar... vad händer då?

Medlem sedan juni 200518 inlägg
#4

Inte blir det väl ett felmeddelande bara för att jag har tre RS.MoveNext i rad föressten?

Medlem sedan jan. 2003438 inlägg
#5

Välkommen!

Nope inget felmeddelande, det funkar att skriva som du gjorde. RS.moveNext gör att du flyttar fram en post i tabellen. Vilket gör att du kommer att skriva ut post nummer 4 i tabellen, som då tidigare var post nummer 5. Det vill säga om då id:et på raden som du tar bort med delet ligger innan post 6. för annars kommer du ta bort posten efter dina moveNext och kommer då inte att synas i utskriften.

/r

Dock skall tilläggas att den blir aningen rörigt att göra så här, bättre att skriva ut i lopp och sätta x=3 för att skriva ut just post 3 eller liknande.

Medlem sedan nov. 20021 222 inlägg
#6

nej du har rätt, det blir inga felmeddelanden om du har rs.movenext i rad. Förhastade mig där.

Du kommer där i mot få detta felmeddelande om du skriver ut ett recordset efter rs.movenext.

Felmeddelande skrev:

ADODB.Field (0x80020009)
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.

Medlem sedan jan. 2003438 inlägg
#7

Felmeddelande skrev:

ADODB.Field (0x80020009)
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.

Detta beror ju på att det inte finns fler poster i databasen.

Medlem sedan juni 200518 inlägg
#8

Det felmeddelandet får man väl bara om man har gått så långt bland posterna att man kommit utanför posterna som finns i databasen eller vad det nu är...

Medlem sedan nov. 20021 222 inlägg
#9

japp, fast jag ska tillläga en sak som jag glömde. Detta inträffar bara om man Loopar ut innehållet i tabellerna. Gör man inte det då får man inte detta felmeddelade.

Såg nu att du inte loopade ut innehållet.

Medlem sedan jan. 2003438 inlägg
#10

joel_joel88 skrev:

japp, fast jag ska tillläga en sak som jag glömde. Detta inträffar bara om man Loopar ut innehållet i tabellerna. Gör man inte det då får man inte detta felmeddelade.

Det kan jag tyvärr inte hålla med om. Testa att skriv ut efter dina MoveNext så skall du se vad som händer.

Medlem sedan nov. 20021 222 inlägg
#11

Har testat det, händer inget förutom att det skriver ut post 2.

Medlem sedan jan. 2003438 inlägg
#12

Då får du banne mig visa lite kod, för då vet jag inte vad som händer. Hur många poster har du i databasen förresten?

Medlem sedan juni 200032 967 inlägg
#13

Har testat det, händer inget förutom att det skriver ut post 2.

Om recordsetet har hamnat EOF när du gjort din movenext så lär du väl få ett felmeddelande oberoende av om du loopat eller icke.

Medlem sedan nov. 20021 222 inlägg
#14

Jo då får du ett felmeddelande. Men om man t.ex gör så
här får man inget felmeddelande så länge det är mer än 1 post.

<%
set connect = server.createobject("adodb.connection")
connect.open "Driver={Microsoft Access driver (*.mdb)};dbq=" & server.mappath("test.mdb")

set rs = connect.execute("select * from test")

rs.movenext

Response.write(rs("test"))

%>
Medlem sedan juni 200032 967 inlägg
#15

Nej, det är klart att om recordsetet inte är end of file, så får man inte ett felmeddelande som säger det.

Men är recordsetet end of file, så får man ett felmeddelande om det, oberoende av om du loopat ut datat eller inte.

Medlem sedan nov. 20021 222 inlägg
#16

@nders skrev:

Nej, det är klart att om recordsetet inte är end of file, så får man inte ett felmeddelande som säger det.

Men är recordsetet end of file, så får man ett felmeddelande om det, oberoende av om du loopat ut datat eller inte.

Ja du har rätt. Jag skulle ha skrivit om recordsetet är end of file. Det är jag som har vimsat i så fall.

Medlem sedan jan. 2003438 inlägg
#17

Nu tappade jag den röda tråden lite, men om du är nöjd med svaret/en Jiggr så glöm inte acceptera som slutgiltigt svar uppe till höger.

Medlem sedan juni 200518 inlägg
#18

"men om du är nöjd med svaret/en Jiggr så glöm inte acceptera som slutgiltigt svar uppe till höger."
SannaW

Jasså, ska man göra sånt också? Nåväl, för mig var den knappen längst ner till höger, och nu ska jag klicka på den! =)

Medlem sedan juni 200032 967 inlägg
#19

Längst ner till höger i varje inlägg ja, men det borde vara något inlägg där uppe som är det svar du blev nöjd med. ;)

Välkommen!

Medlem sedan dec. 200012 464 inlägg
#20

Vad som händer beror på vilken
cursortyp som specificerats för recordsetet.

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)