Avatar billede mskjoldp Novice
21. december 2003 - 21:43 Der er 21 kommentarer og
1 løsning

Hvad er fejlen her? (Either BOF or EOF is True)

jeg prøver at opdatere en record men jeg får denne fejl:
ADODB.Field (0x80020009)
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

Jeg har søgt flere steder for at finde fejlen og er da oxo kommet videre, men nu fortæller browseren ikke mere i hvilken linje fejlen er opstået, og så er jeg lost...

jeg bruger den samme fil til at vis brugere og opdatere records.

et uddrag fra default.asp hvor jeg arbejder med at få opdateret en brugers data:
<% if mode = "edit" then
if session("brugernavn") = "" then
Response.Redirect("default.asp?mode=login")
end if
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "select * from bruger where id=" & CInt request.querystring("id"))
rs.open sql, conn, 1, 3
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
if not rs.eof then
rs.update
rs("brugernavn") = Server.HTMLEncode(Request("navn"))
rs("brugerkode") = Server.HTMLEncode(Request("adgangskode"))
rs("brugeralder") = Server.HTMLEncode(Request("alder"))
rs("brugeremail") = Server.HTMLEncode(Request("email"))
rs("brugerHjemmeside") = Server.HTMLEncode(Request("hjemmeside"))
rs("BrugerICQ") = Server.HTMLEncode(Request("icq"))
rs("brugerTekst") = Server.HTMLEncode(Request("fri_tekst"))
rs("admin") = Server.HTMLEncode(Request("admin"))
rs("visnick") = Server.HTMLEncode(Request("showname"))
rs("nick") = Server.HTMLEncode(Request("nick"))
rs("bane") = Server.HTMLEncode(Request("bane"))
rs("weapon") = Server.HTMLEncode(Request("weapon"))
rs.update
end if
end if
%>
<table width="100%">
<tr>
<td>
<table width="100%"><tr><td width="100%" class="form">&nbsp;Rediger <%=rs("brugernavn")%>'s profil:
</td></tr></table>
<form method="post" action="default.asp?mode=edit" id="form2" name="form2">
<table border="0" width="100%" >
<tr>
<td width="200px"><font class="main-menu"><b>Brugernavn:</b></font></td>
<td><input class="form" type="text" name="navn" value="<%=rs("brugernavn")%>" size="30"></td>
</tr>
bla bla bla og så resten af formen
.....
Formen poster til mode=edit hvilket skulle virker ok og det er oxo brugt flere steder med succes.

/ Skjold
Avatar billede mskjoldp Novice
21. december 2003 - 21:47 #1
formen slutter og rs lukkes

                    </form>
                        </td>
                    </tr>
                </table>
                <%
                rs.close
                set rs = nothing
                end if %>
Avatar billede Slettet bruger
21. december 2003 - 21:49 #2
Du er nødt til at lave en rs.edit for at du kan lægge nye værdier ind.
Avatar billede erikjacobsen Ekspert
21. december 2003 - 21:50 #3
Du har nok en rs.update for meget - den første er overflødig.
Og så mangler der vist en ( i linien
  sql = "select * from bruger where id=" & CInt request.querystring("id"))
Avatar billede dna Nybegynder
21. december 2003 - 21:50 #4
Denne sql ser da lidt sjov ud:
sql = "select * from bruger where id=" & CInt request.querystring("id"))

Ved ikke om det er en copy/paste fejl eller noget.. eller skal der ikke være: CInt(request.querystring("id")) - for mig ser det ud til at der mangler en parantes.

Ved godt det ikke var det din fejl gik på, men det var lige hvad jeg faldt over! :-)
Avatar billede erikjacobsen Ekspert
21. december 2003 - 21:52 #5
desuden kan det være i linien
<td><input class="form" type="text" name="navn" value="<%=rs("brugernavn")%>"
fordi der måske ikke er en bruger
Avatar billede mskjoldp Novice
21. december 2003 - 22:07 #6
->dna
det var en copy /paste fejl fra min side - men:
jeg fik denne fejl (Syntax error (missing operator) in query expression 'id=')
da jeg bruget:
sql = "select * from bruger where id=" & request.querystring("id")
så derfor bruger jeg:
sql = "select * from bruger where id=" & CInt request.querystring("id"))
...indtil nu... da den ikke giver sådan en fejl...

->erikjacobsen
under formen ved <input class="form" type="text" name="navn" value="<%=rs("brugernavn")%>" size="30"> så vises formen før der sendes (post) til asp koden og i formen vises et brugernavn....
jeg har fjernet den første rs.update ....

->bertie
mener du at rs.update ikke er en valid måde?
Avatar billede mskjoldp Novice
21. december 2003 - 22:08 #7
det er hvad jeg har nu: det er ikke så forskelligt fra før

            <% if mode = "edit" then
                            if session("brugernavn") = "" then
                            Response.Redirect("default.asp?mode=login")
                        end if
                        Set rs = Server.CreateObject("ADODB.Recordset")
                        sql = "select * from bruger where id=" & Cint(request.querystring("id"))
                        rs.open sql, conn, 1, 3
                            if Request.ServerVariables("REQUEST_METHOD") = "POST" then
                                    rs("brugernavn") = Server.HTMLEncode(Request("navn"))
                                    rs("brugerkode") = Server.HTMLEncode(Request("adgangskode"))
                                    rs("brugeralder") = Server.HTMLEncode(Request("alder"))
                                    rs("brugeremail") = Server.HTMLEncode(Request("email"))
                                    rs("brugerHjemmeside") = Server.HTMLEncode(Request("hjemmeside"))
                                    rs("BrugerICQ") = Server.HTMLEncode(Request("icq"))
                                    rs("brugerTekst") = Server.HTMLEncode(Request("fri_tekst"))
                                    rs("admin") = Server.HTMLEncode(Request("admin"))
                                    rs("visnick") = Server.HTMLEncode(Request("showname"))
                                    rs("nick") = Server.HTMLEncode(Request("nick"))
                                    rs("bane") = Server.HTMLEncode(Request("bane"))
                                    rs("weapon") = Server.HTMLEncode(Request("weapon"))
                                    rs.update
                            end if
                        %>

/skjold
Avatar billede erikjacobsen Ekspert
21. december 2003 - 22:08 #8
Hvis du får
Syntax error (missing operator) in query expression 'id=')
er det fordi din request.querystring("id") er tom. Cint laver den så til et 0
Det er der sikkert ingen bruger der hedder, derfor ingenting i dit rs
Avatar billede Slettet bruger
21. december 2003 - 22:08 #9
Nej, jeg mener bare at man skal lave
rs.edit
rs("felt")= noget
rs.update.
Avatar billede mskjoldp Novice
21. december 2003 - 22:09 #10
men nu får jeg fejlen:
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/deltavings/default.asp, line 1034

linje 1034:
rs("brugerkode") = Server.HTMLEncode(Request("adgangskode")

hvilket ikke giver nogen mening for mig da der er en linje før denne som jeg mener fejlen skulle reagere på...

/Skjold
Avatar billede mskjoldp Novice
21. december 2003 - 22:10 #11
hmmm
Avatar billede mskjoldp Novice
21. december 2003 - 22:11 #12
kan det være at hvis et felt i db'en er tomt at jeg så modtager:

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/deltavings/default.asp, line 1034

tjaaa, jeg prøver lige at ligge noget ind i feltet...'

/Skjold
Avatar billede erikjacobsen Ekspert
21. december 2003 - 22:11 #13
hvorfor har du fjernet testet på rs.eof ?
Avatar billede mskjoldp Novice
21. december 2003 - 22:12 #14
nae.. der var oxo noget deri i forvejen...
Avatar billede mskjoldp Novice
21. december 2003 - 22:13 #15
mente ikke det hjalp, men kan da sætte det ind igen...
Avatar billede erikjacobsen Ekspert
21. december 2003 - 22:15 #16
Prøv at nærlæse fejlbeskeden - den har et formål (og fejlbeskeden er
for en gangs skyld informativ)
Avatar billede mskjoldp Novice
21. december 2003 - 22:17 #17
der er 2 records i min db.

de er begge 2 fyldt ud i alle felterne.
Avatar billede erikjacobsen Ekspert
21. december 2003 - 22:20 #18
men når request.querystring("id") er tom og derfor via cint søger efter 0
er der jo ingen!
Avatar billede mskjoldp Novice
21. december 2003 - 22:21 #19
forståelig nok
Avatar billede mskjoldp Novice
21. december 2003 - 22:30 #20
-> erikjacobsen thx
det siger jo sig selv når du nu skære tingene ud i pap for mig, problemet er løst ved:

<form method="post" action="default.asp?mode=edit&amp;id=<%=rs("id")%>" id="form2" name="form2">

ændringen var at der skulle tilføjes: &amp;id=<%=rs("id")%>

svar fra erikjacobsen?

/Skjold
Avatar billede erikjacobsen Ekspert
21. december 2003 - 22:36 #21
Ookay, selv om fejlen li'som kom et helt andet sted fra...

Men du slipper ikke for at par opdragende bemærkninger fra mig. Du havde
en struktur, der lignede:

  if not rs.eof then
    ....noget med rs - fint nok
  end if

  ...noget andet med rs - dumt

Du har nemlig spurgt på rs et sted hvor du ikke vidste den var gyldig.
Du kunne have gjort det sikkert
  brugerid=""
  if not rs.eof then
    ....noget med rs - fint nok
    brugerid=rs("...")
  end if

  ...noget andet med brugerid - fint

Ovenstående var egentlig det eneste jeg så.
Avatar billede mskjoldp Novice
21. december 2003 - 22:43 #22
mm forstået, ved brugen af brugerid istedet for id ville have struktureret koden bedre for mig. thx
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester