webForumDet fria alternativet

Hur fungerar RecSet?

19 svar · 570 visningar · startad av Jiggr

JiggrMedlem sedan juni 200518 inlägg
#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.

joel_joel88Medlem 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
JiggrMedlem 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å?

JiggrMedlem 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?

SannyWMedlem 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.

joel_joel88Medlem 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.

SannyWMedlem 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.

JiggrMedlem 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...

joel_joel88Medlem 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.

SannyWMedlem 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.

joel_joel88Medlem sedan nov. 20021 222 inlägg
#11

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

SannyWMedlem 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?

@ndersMedlem sedan juni 200032 969 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.

joel_joel88Medlem 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"))

%>
@ndersMedlem sedan juni 200032 969 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.

joel_joel88Medlem 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.

SannyWMedlem 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.

JiggrMedlem 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! =)

@ndersMedlem sedan juni 200032 969 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!

LarsGMedlem sedan dec. 200012 464 inlägg
#20

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

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