Avatar billede pfp Nybegynder
03. juni 2002 - 17:39 Der er 28 kommentarer og
1 løsning

Enten er BOF eller EOF sand...

Hej,

Jeg har programmeret et site, som desværre volder mig lidt problemer. Nogle gange får jeg følgende fejl:

ADODB.Field (0x80020009)
Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post.

Men hvis jeg så klikker F5 så virker det hele efter planen...Hvordan kan det være og hvad kan jeg evt. gøre for at slippe for dette?

/peter
Avatar billede azez Nybegynder
03. juni 2002 - 17:41 #1
hvordan ser koden ud ?
Avatar billede pfp Nybegynder
03. juni 2002 - 17:44 #2
Det er forskelligt. Det kan f.eks. være på SQL sætninger som dette:
<%
SQL = "Select * From Faggrupper ORDER BY Faggruppe"
Set rs = Conn.Execute(SQL)

SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True"
Set rs2 = Conn.Execute(SQL2)

Randomize
Tal = Int((rs2("Antal") * Rnd) + 1)

SQL3 = "Select ID, Kategori, Virksomhed, Email, Hjemmeside, Kortbeskrivelse From Virksomheder WHERE ID=" & Tal & "AND Aktiv = True"
Set rs3 = Conn.Execute(SQL3)
%>
Avatar billede azez Nybegynder
03. juni 2002 - 17:48 #3
dvs det er "bare" select sætninger som laver den fejl.. der er ingen update, insert eller delete statements ?
Avatar billede pfp Nybegynder
03. juni 2002 - 17:48 #4
Kan jeg evt. bruge On Error Resume Next til noget i denne sammenhæng?
Avatar billede pfp Nybegynder
03. juni 2002 - 17:49 #5
Nej der er kun SQL-sætninger og længere nede har jeg så nogle udtræk i henhold til det SQL'er
Avatar billede curriculum Nybegynder
03. juni 2002 - 17:50 #6
i denne sætning...
SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True"
skal true ikke stå mellem 'True'
Avatar billede azez Nybegynder
03. juni 2002 - 17:56 #7
jamen du bruger kun select i sql ikke ?
Avatar billede pfp Nybegynder
03. juni 2002 - 18:07 #8
curriculum -> Den vælger fint kun den som er krydset af som aktiv og det kan vel ikke have noget at gøre med at det kun virker nogen gange???
Avatar billede Slettet bruger
03. juni 2002 - 18:17 #9
Du er nødt til at tjekke om der ligger noget i rs2, når du prøver at tilgå et felt derfra:

Randomize
Tal = Int((rs2("Antal") * Rnd) + 1)

Skal være:

If Not rs2.EOF Then

    Randomize
    Tal = Int((rs2("Antal") * Rnd) + 1)

End If
Avatar billede pfp Nybegynder
03. juni 2002 - 18:24 #10
Ok tak det vil jeg lige prøve at lege med.
Avatar billede pfp Nybegynder
03. juni 2002 - 18:27 #11
Hej,

Det virker ikke selvom jeg laver et tjek. Men det kunne jeg nu heller ikke forstå for jeg ved jo, at rs2 ikke er 0. Og så kunne det vel heller ikke passe at det virkede nogen gange??
Avatar billede tmceu Praktikant
04. juni 2002 - 00:07 #12
magik >> En "SELECT COUNT...." vil altid returnere én post, med enten 0 eller det antal der blev fundet. Så derfor er checket for BOF/EOF ikke meget værd i denne sammenhæng :-)

Dine SQL statements indikerer for mig, at det er en Access database. Er dette korrekt ?

I så fald kan det skyldes at databasen periodisk er låst, et problem for databaser generelt, men Access i meget høj grad.

CursorType, CursorLocation og IsolationLevel er nogle af de parametre der kan være årsagen. Det kunne gavne at se lidt mere kode...
Avatar billede pfp Nybegynder
04. juni 2002 - 12:57 #13
tmceu -> Ja det er ganske rigtigt en Access database. Resten du fortæller om forstår jeg ikke så meget af, så jeg poster lige hele min kode. Håber det er ok.

---------------- Default.asp ----------------------
<!--#include file="Database.asp" -->
<%
SQL = "Select * From Faggrupper ORDER BY Faggruppe"
Set rs = Conn.Execute(SQL)

SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True"
Set rs2 = Conn.Execute(SQL2)

If Not rs2.EOF Then

    Randomize
    Tal = Int((rs2("Antal") * Rnd) + 1)

End If

SQL3 = "Select ID, Kategori, Virksomhed, Email, Hjemmeside, Kortbeskrivelse From Virksomheder WHERE ID=" & Tal & "AND Aktiv = True"
Set rs3 = Conn.Execute(SQL3)
%>
<html>
<head>
<title>givenet.dk</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="Style.css" type="text/css">
</head>

<body bgcolor="#D6EDFE" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="760" border="0"  style="border-collapse: collapse; border-left: 1px solid #666666; border-right: 1px solid #666666" bordercolor="#111111" cellspacing="0" cellpadding="0" align="center" height="100%">
  <tr>
    <td bgcolor="ffffff" valign="top">
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td colspan="4"><img src="Grafik/bynettop.jpg" width="760" height="75"></td>
        </tr>
        <tr>
          <td bgcolor="#E9E9E9" height="50" style="border-top: 1px solid #666666; border-bottom: 1px solid #666666" width="15">
            <div align="right">
              <p align="left">&nbsp;</p>
            </div>
          </td>
          <td bgcolor="#E9E9E9" height="50" style="border-top: 1px solid #666666; border-bottom: 1px solid #666666" width="365">V&aelig;lg
            en kategori:<br>
            <select name="go" onChange="jumppage(this);">
            <option>---Vælg en kategori---</option>
            <%
            Do While Not rs.eof
            %>
              <option value="Vis.asp?kategori=<%=rs("ID")%>"><%=rs("Faggruppe")%></option>
              <%
              rs.movenext
              Loop
              %>
                        </select>
          </td>
          <form name="search" method="post" action="Resultater.asp">
          <td bgcolor="#E9E9E9" height="50" style="border-top: 1px solid #666666; border-bottom: 1px solid #666666" width="365">
           
              <div align="right">Foretag s&oslash;gning:<br>
                <a href="java script:document.search.submit()"><img src="Grafik/soegeknap.gif" width="53" height="15" onmouseOver = "status='Start søgning';return true" onMouseOut = "status='';return true" border="0"></a>
                <input type="text" name="Keyword">             
              </div>
           
          </td>
          </form>
          <td bgcolor="#E9E9E9" height="50" style="border-top: 1px solid #666666; border-bottom: 1px solid #666666" width="15">&nbsp;</td>
        </tr>
      </table>
      <table width="100%" border="0" cellspacing="0" cellpadding="0" height="158">
        <tr>
          <td width="150" valign="top">
            <table width="100%" border="0" cellspacing="0" cellpadding="15" height="100%">
              <tr>
                <td valign="top">
                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                      <td><img src="Grafik/top.gif" width="160" height="8"></td>
                    </tr>
                    <tr>
                      <td bgcolor="eaeaea" class="menustreger" valign="top"><b>
                        </b>
                        <table width="100%" border="0" cellspacing="0" cellpadding="3">
                          <tr>
                            <td><b>.:: Menu</b><br>
                              - <a href="Default.asp" onmouseOver = "status='Velkommen';return true" onMouseOut = "status='';return true">Velkommen</a><br>
                              - <a href="Virksomheder.asp" onmouseOver = "status='Virksomheder';return true" onMouseOut = "status='';return true">Virksomheder</a><br>
                              - <a href="Soegning.asp" onmouseOver = "status='Søgning';return true" onMouseOut = "status='';return true">S&oslash;gning</a><br>
                              - <a href="Hvem.asp" onmouseOver = "status='Hvem er vi?';return true" onMouseOut = "status='';return true">Hvem er vi?</a><br>
                              - <a href="Maal.asp" onmouseOver = "status='Vores målsætning';return true" onMouseOut = "status='';return true">Vores m&aring;ls&aelig;tning</a><br>
                              - <a href="Priser.asp" onmouseOver = "status='Priser';return true" onMouseOut = "status='';return true">Priser</a><br>
                              - <a href="Tilmelding.asp" onmouseOver = "status='Tilmelding';return true" onMouseOut = "status='';return true">Tilmelding</a></td>
                          </tr>
                        </table>
                        <b> </b></td>
                    </tr>
                    <tr>
                      <td valign="top"><img src="Grafik/bund.gif" width="160" height="8"></td>
                    </tr>
                  </table>
                  <br>
                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                      <td height="7"><img src="Grafik/top.gif" width="160" height="8"></td>
                    </tr>
                    <tr>
                      <td bgcolor="eaeaea" class="menustreger">
                        <table width="100%" border="0" cellspacing="0" cellpadding="3">
                          <tr>
                            <td valign="top"><b>.:: Tjenester<br>
                              </b>- <a href="Debatforum.asp" onmouseOver = "status='Debatforum';return true" onMouseOut = "status='';return true">Debatforum</a><br>
                              - <a href="Kalender.asp" onmouseOver = "status='Aktivitetskalender';return true" onMouseOut = "status='';return true">Aktivitetskalender</a><br>
                              - <a href="Brugtbors.asp" onmouseOver = "status='Brugtbørs';return true" onMouseOut = "status='';return true">Brugtb&oslash;rs</a><br>
                              - <a href="Postkort.asp" onmouseOver = "status='Send et postkort';return true" onMouseOut = "status='';return true">Send et postkort</a><br>
                              - <a href="Nyhedsbrev.asp" onmouseOver = "status='Nyhedsbrev';return true" onMouseOut = "status='';return true">Nyhedsbrev</a></td>
                          </tr>
                        </table>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top"><img src="Grafik/bund.gif" width="160" height="8"></td>
                    </tr>
                  </table>
                  <br>
                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                      <td><img src="Grafik/top.gif" width="160" height="8"></td>
                    </tr>
                    <tr>
                      <td bgcolor="eaeaea" class="menustreger" valign="top">
                        <table width="100%" border="0" cellspacing="0" cellpadding="3">
                          <tr>
                            <td valign="top">
                             
                              <form name="login" method="post" action="Tjek.asp">
                                <p><b>.:: Administration</b> BrugerID:<br>
                                  <input type="text" name="BrugerID">
                                  <br>
                                  Adgangskode: <br>
                                  <input type="password" name="Adgangskode">
                                <p> <a href="java script:document.login.submit()"><img src="Grafik/login.gif" width="53" height="15" border="0" onmouseOver = "status='Log ind';return true" onMouseOut = "status='';return true"></a>
                                </p>
                                </form>
                           
                             
                             
                             
                                                       
                            </td>
                          </tr>
                        </table>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top"><img src="Grafik/bund.gif" width="160" height="8"></td>
                    </tr>
                  </table>
                 
                  </td>
              </tr>
            </table>
          </td>
          <td width="433" valign="top">
            <table width="100%" border="0" cellspacing="0" cellpadding="15" height="100%">
              <tr>
                <td valign="top">
                  <p><img src="Grafik/velkommen.gif" width="388" height="24"></p>
                  <p>tekst her...</p>
                  </td>
              </tr>
            </table>
          </td>
          <td width="150" valign="top">
            <table width="86%" border="0" cellspacing="0" cellpadding="15">
              <tr>
                <td valign="top">
                  <p><b>.:: Annoncer<br>
                    <br>
                    </b><b><img src="Grafik/annonce.gif" width="120" height="60"></b></p>
                  <p><b><img src="Grafik/annonce.gif" width="120" height="60"></b></p>
                </td>
              </tr>
              <tr>
                <td valign="top">
                  <p><b>.:: Tilf&aelig;ldig profil<br>
                    <%=rs3("Virksomhed")%></b><br>
                    <%=rs3("Kortbeskrivelse")%></p>
                  <%
                    Dim mail, hjemmeside
                    mail = rs3("Email")
                    hjemmeside = rs3("Hjemmeside")
                   
                    If len(mail) > 0 then
                    mailpic = "knap_e.gif"
                    else
                    mailpic = "knap_e2.gif"
                    End if
                   
                    If len(hjemmeside) > 0 then
                    hjemmesidepic = "knap_w.gif"
                    else
                    hjemmesidepic = "knap_w2.gif"
                    End if
                    %>
                  <p><a href="Profil.asp?virksomhed=<%=rs3("ID")%>"><img src="Grafik/knap_i.gif" width="16" height="15" border="0"></a>
                    <a href="mailto:<%=mail%>"><img src="Grafik/<%=mailpic%>" width="16" height="15" border="0"></a>
                    <a href="<%=hjemmeside%>" target="_blank"><img src="Grafik/<%=hjemmesidepic%>" width="16" height="15" border="0"></a>
                  </p>
                  </td>
              </tr>
              <tr>
                <td valign="top">

                </td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
</body>
</html>
<!--#include file="Luk.asp" -->

Jeg poster også lige indholdet af mine includes, hvis det har nogen betydning.

---------------- Database.asp ----------------------
<%session.LCID = 1030%>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../Databaser/fagside.mdb")
Conn.Open DSN
%>

---------------- Luk.asp ----------------------
<%
Conn.Close
Set Conn = Nothing
%>

Håber at I kan hjælpe mig.

/peter
Avatar billede Slettet bruger
04. juni 2002 - 13:37 #14
tmceu: Hehe... sorry... det overså jeg lige i farten ;)
Avatar billede pfp Nybegynder
04. juni 2002 - 17:48 #15
Jeg gætter nu på at der er omkring min random funktion det giver problemer. For hvis jeg indsættter On Error Resume Next i toppen af ASP dokumentet kommer der ingenting der hvor den skulle udskrive navnet på en random virksomhed.

Er der nogen der har en bedre ide til, hvordan jeg laver en random funktion end denne:

SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True"
Set rs2 = Conn.Execute(SQL2)

If Not rs2.EOF Then

    Randomize
    Tal = Int((rs2("Antal") * Rnd) + 1)

End If

Håber virkelig i kan hjælpe mig
Avatar billede tmceu Praktikant
05. juni 2002 - 01:43 #16
Jeg har lavet nogle ret uvidenskabelige tests efter jeg stødte på dette problem. De bekræftede min teori om, at databasen er låst i op til 2 min. efter at man sidst har brugt den, på trods af at der ryddes pænt op i forbindelser. Samtidig viskede en anden mig i øret, at ændring af driveren jvf. nedenstående løste et lignende problem hos ham.

DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../Databaser/fagside.mdb")

Ovenstående ændres til denne:

DSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("../Databaser/fagside.mdb")
Avatar billede pfp Nybegynder
05. juni 2002 - 01:55 #17
Øv, det virker desværre heller ikke :-(

Har det ikke noget med min random funktion at gøre. Jeg plejer altid at bruge den type databaseforbindelse og har aldrig haft problemet før? Jeg forstår heller ikke hvorfor det kun forekommer nogen gange.
Avatar billede kalkunen Nybegynder
06. juni 2002 - 20:25 #18
Måske er det bare dine cookies, prøv at slette dem, måske virker det ?
Avatar billede pfp Nybegynder
06. juni 2002 - 21:15 #19
Det kan jeg ikke forstå hvorfor det skulle gør da siden overhovedet ikke benytter sig af cookies. Og selvom siden gjorde ville det jo ikke være særlig fedt, at mine brugere skal slette deres cookies for at kunne anvende min side. Men ok tak for forslaget og jeg vil da også teste om det på mystisk vis skulle have nogen indflydelse.

/peter
Avatar billede pfp Nybegynder
07. juni 2002 - 12:37 #20
tmceu -> Hej. Jeg tror at jeg har fået svar på, hvorfor det hele kager. Jeg fik hjælp fra en på netcoders.dk

Hvis jeg tæller hvor mange poster der i tabelen med rs2("Antal") og derfra vælger et random tal. Hvis der nu f.eks. er 50 poster i tabellen og jeg får et random tal som f.eks. kunne være 34 er det jo ikke sikkert at der findes en post med ID = 34, da jeg jo nogle gange også sletter poster fra databasen.

Hvordan vil du mene jeg kan løse problemet? Skal jeg hente alle de gyldige ID'er ind i et array og så vælge random derefter eller hvad?

/peter
Avatar billede tmceu Praktikant
07. juni 2002 - 18:17 #21
Du kan bruge AbsolutePosition på dit recordset. Hvis du eks. har et recordset rs, og din random returnerer 34, kan du flytte til post 34, ved at bruge rs.AbsolutePosition = 34
Avatar billede kalkunen Nybegynder
07. juni 2002 - 18:21 #22
hey sorry, det var jo bare et foreslag
så tag det dog roligt...

Syge Stodder
Avatar billede pfp Nybegynder
07. juni 2002 - 18:39 #23
Hej "kalkunen",

Jeg syntes egentlig jeg er i min ret til at sige, at det er dig der bør tage det roligt. Jeg accepterede dit forslag og takkede for det, men mente dog ikke at det ville have nogen effekt.

Jeg kan ikke se du har grund til at kalde mig en syg stodder på det grundlag! Men nå, hvorfor spilde kræfter på dig....

tmceu -> Tak for dine svar i dette indlæg. Jeg tror jeg har fundet en løsning ved at anvende movenext i stedet for. Men du skal da selvfølgelig have point for din løsning er jo mindst lige så optimal. Tak for det!

/peter
Avatar billede tmceu Praktikant
07. juni 2002 - 19:09 #24
Ift. til databasen er der ikke nogen performanceforskel, da du i begge tilfælde vil hente hele recordsettet, under forudsætning af, at du anvender SELECT * FROM...

Der vil dog være en lille forskel i negativ retning med movenext, da jeg antager at du udfører den x gange, mens absoluteposition laver én flytning.

Du kunne dog lave en lille yderligere forbedring. Hvis din random returnerer 34 ud af et recordset på 50, kunne du lave en SELECT TOP 34 * FROM... og derefter lave en movelast. Dette vil spare dig for at hente de sidste poster med over. Men med de størrelser vi snakker om, er det minimalt hvad du sparer. Men det er dog et skridt i retning af at tænke "rigtigt" ift. performance :-)

Og til din tak -> det var så lidt :-)
Avatar billede pfp Nybegynder
07. juni 2002 - 21:06 #25
Hej igen tmceu,

Ja nu kommer jeg krybende igen. Det driller mig sgu' stadig lidt hvis jeg bruger movenext. Kan jeg ikke få dig til at vise mig et lille eksempel på hvordan jeg skal bruge absoluteposition. Jeg skal selvfølgelig nok afsætte flere point til dig, hvis du er interesseret.

/peter
Avatar billede tmceu Praktikant
07. juni 2002 - 21:11 #26
Skal lige tage mid lidt af datteren, men kommer igen...
Avatar billede pfp Nybegynder
07. juni 2002 - 21:51 #27
Ja selvfølgelig, der er ikke noget der haster.
Avatar billede tmceu Praktikant
07. juni 2002 - 22:20 #28
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.Recordset")
objConn.ConnectionString = "[din connectionstring]"

objConn.Open

objConn.CursorLocation = 3
objRS.CursorType = 3

Set objRS = objConn.Execute("SELECT * FROM position")

objRS.AbsolutePosition = 2

Response.Write objRS(0) ' udskriv felt 1 i record 2

objRS.Close
objConn.Close
Avatar billede pfp Nybegynder
08. juni 2002 - 11:05 #29
Hej,

Jeg fik hjælp på netcoders.dk og problemet blev løst ved at anvende følgende kode:

<%
SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True"
Set rs2 = Conn.Execute(SQL2)
Randomize
Tal = Int((rs2("Antal") * Rnd) )
rs2.Close

SQL3 = "Select ID, Kategori, Virksomhed, Email, Hjemmeside, Kortbeskrivelse From Virksomheder WHERE Aktiv = True ORDER BY ID"
Set rs3 = Conn.Execute(SQL3)

for i=1 to Tal
rs3.MoveNext
next     
Response.Write rs3("Virksomhed")
%>
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