Avatar billede starf Nybegynder
01. maj 2006 - 10:20 Der er 28 kommentarer og
1 løsning

Operation is not allowed when the object is open.

Hej Jeg forsøger at lave et simpelt news script, men får bare denne her fejl: Operation is not allowed when the object is open.

her er min kode:

<!--#include file="conn-inc.asp"-->

</style>
<div class="txt3"><center>
</center></div><br>


 
<%


intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

SQL = "SELECT * FROM news_novatech"
set rs = Conn.execute(SQL)

rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 10
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  %>
  <div class="txt3">
  <%
  Response.Write "<p><b>Page" & intPage & " of " & intPageCount & "</b></p>"
  %>
  </div><%
  Do While Not rs.EOF And intRecCount > 0
  %>

        </table>
        <table width="88" border="1" cellspacing="2" cellpadding="0">
            <tr>
                <td>Date</td>
                <td><%Response.Write rs("Date")%></td>
            </tr>
            <tr>
                <td>Name</td>
                <td><%Response.Write rs("Name")%></td>
            </tr>
            <tr>
                <td colspan="2">headline</td>
            </tr>
            <tr>
                <td colspan="2">Entry</td>
            </tr>
        </table>
<br>
<%
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing
%><div class="txt3">
<%
Response.Write "<p>Go to page "
For intNum = 1 To intPageCount
  Response.Write "<a href=paging.asp?page=" & intNum & ">>" & intNum & "</a> "
Next

Response.Write "<p>"
If Clng(intPage) > 1 Then
  Response.Write "<a href=paging.asp?page=" & intPage - 1 & ">&lt;&lt;</a>"
Else
  Response.Write "&lt;&lt;"
End If

Response.Write "&nbsp;"

If Clng(intPage) < Clng(intPageCount) Then
  Response.Write "<a href=paging.asp?page=" & intPage + 1 & ">&gt;&gt;</a> "
Else
  Response.Write "&gt;&gt;"
End If
%>

nogle der kan se hva jeg gør galt?
Avatar billede erikjacobsen Ekspert
01. maj 2006 - 10:21 #1
Måske du bare skal slette linien med rs.Open strSQL, strDSN, 1
Avatar billede softspot Forsker
01. maj 2006 - 10:25 #2
Prøv lige at fjerne denne linie:

set rs = Conn.execute(SQL)
Avatar billede softspot Forsker
01. maj 2006 - 10:35 #3
well, rent faktisk skal du også lige huske at oprette et recordset-objekt, så du skal udskifte linien

set rs = Conn.execute(SQL)

med

set rs = Server.CreateObject("ADODB.Recordset")
Avatar billede fennec Nybegynder
01. maj 2006 - 10:45 #4
Og med rigtig SQL-variabel og connection :o)

SQL = "SELECT * FROM news_novatech"
set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, conn, 1
If Not (rs.BOF Or rs.EOF) Then
...

Og lidt forklaring...
Ved at lave et ADODB.Recordset får du mulighed for at bruge flere funktioner, men de funktioner skal være understøttet af Databasen. Der findes altså 2 metoder til at lave et recordset.

Den simple:
set rs = Conn.execute(SQL)

Den udvidet:
set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, conn, 1
Avatar billede fennec Nybegynder
01. maj 2006 - 10:50 #5
MySQL understøtter f.eks ikke de ekstra funktioner med ADODB.Recordset, så kommer du til at bruge den DB, er der ingen grund til at bruger den udvidet metode. Det er også derfor at et MySQL paging script ser anderledes ud, end det du du har her :o)
Avatar billede softspot Forsker
01. maj 2006 - 10:54 #6
fennec >> jeg mener ikke paging fungerer hvis du opretter recordsettet med conn.execute (det har vist noget med cursortypen eller locktypen at gøre). At MySQL ikke understøtter paging på samme måde som f.eks. access og SQL Server har du nok ret i (det har jeg ikke nogen erfaring med).
Avatar billede starf Nybegynder
01. maj 2006 - 11:00 #7
Fennec> ok hvordan laver man så et paging script med mysql?

det kode du postede gav:

"ADODB.Recordset error '800a0cb3'

Object or provider is not capable of performing requested operation.

/news.asp, line 22
"

linie 22 er:

rs.AbsolutePage = intPage
Avatar billede fennec Nybegynder
01. maj 2006 - 11:04 #8
Paging med MySQL skal laves med LIMIT funktionen. Du kan finde et script her:
http://activedeveloper.dk/artikler/default.asp?articleid=279
Avatar billede starf Nybegynder
01. maj 2006 - 11:05 #9
tak for hjælpen fennec..! smid et svar og få point!
Avatar billede starf Nybegynder
01. maj 2006 - 11:10 #10
med det du linker til får jeg dog:

Microsoft VBScript runtime error '800a01ca'

Variable uses an Automation type not supported in VBScript

/news.asp, line 6


ved:

intRecords = int(objRs("records"))
Avatar billede fennec Nybegynder
01. maj 2006 - 11:21 #11
Kan være fordi du får et tomt resultat:
Set objRs = Conn.Execute("SELECT COUNT(*) AS records FROM tabel;")
if isNumeric(objRs("records")) then
  intRecords = cInt(objRs("records"))
else
  intRecords = 0
end if
Avatar billede eagleeye Praktikant
01. maj 2006 - 11:26 #12
Avatar billede starf Nybegynder
01. maj 2006 - 11:42 #13
ok et sidste problem kan ik rigtig få frem og tilbage til at virke.

testen kommer bare frem men det bliver ik lavet til et link, har brugt koden som er postet i kommentar der inde:

'Tilbage
IF intPage > 1 THEN
Response.Write "<a href='index.asp?section=ShowSubCategories&page=" & intpage - 1 & "'>Forige</a>"
ELSE
Response.Write "Forige"
END IF

'Frem
IF intPage < intPageCount THEN
Response.Write "<a href='index.asp?section=ShowSubCategories&page=" & intpage + 1 & "'>Næste</a>"
ELSE
Response.Write "Næste"
END IF
Avatar billede fennec Nybegynder
01. maj 2006 - 12:03 #14
Jeg ville ikke bruge den sidste del af koden i hver if:

'Tilbage
IF intPage > 1 THEN
Response.Write "<a href='index.asp?section=ShowSubCategories&page=" & intpage - 1 & "'>Forige</a>"
END IF

'Frem
IF intPage < intPageCount THEN
Response.Write "<a href='index.asp?section=ShowSubCategories&page=" & intpage + 1 & "'>Næste</a>"
END IF
Avatar billede starf Nybegynder
01. maj 2006 - 12:14 #15
http://intranet.novatech.dk/news.asp

så kommer der intet...


dere r også en funktion der skrier en side list:

'Udskriver en "sideliste"
For i = 1 to intPages - 1
  if i = intPage then
    Response.Write "<b>" & i & "</b> "
  else
    Response.Write "<a href=""paging.asp?page=" & i & """>"
    Response.Write i
    Response.Write "</a> "
  end if
next

den kommer heller ikke...
Avatar billede fennec Nybegynder
01. maj 2006 - 12:46 #16
Hvor mange rækker har du i databasen??
Avatar billede fennec Nybegynder
01. maj 2006 - 12:47 #17
Og kan du smide din kode herind så vi kan se den. Husk at sløre dit DB login...
Avatar billede starf Nybegynder
01. maj 2006 - 12:54 #18
jeg har 7
id-name-email-date-entry-headline-ip

<!--#include file="conn-inc.asp"-->
<%

'Først skal vi have antallet af poster
Set objRs = Conn.Execute("SELECT COUNT(*) AS records FROM news_novatech;")

if isNumeric(objRs("records")) then
  intRecords = cInt(objRs("records"))
else
  intRecords = 0
end if
objRs.Close
Set objRs = Nothing

'Variabler til query´et
intPage = Request.QueryString("page")
if intPage = "" OR not isNumeric(intPage) then
  intPage = int(1)
else
  intPage = int(intPage)
end if
intPageSize = int(5)
intStart = intPage*intPageSize
intStart = intStart-intPageSize
intPages = int(intRecords/intPageSize)+1

Set objRs = Conn.Execute("SELECT * FROM news_novatech LIMIT " & intStart & ", " & intPageSize & ";")
 
  if objRs.EOF or objRs.BOF then
    Response.Write "no posts"
  else
    Response.Write "<table border=""1"" cellpadding=""3"">"
      Response.Write "<tr>"
        Response.Write "<td><b>id</b></td>"
        Response.Write "<td><b>Site</b></td>"
      Response.Write "</tr>"
       
      Do until objRs.EOF
        Response.Write "<tr>"
          Response.Write "<td>" & objRs("id") & "</td>"
          Response.Write "<td>" & objRs("Name") & "</a></td>"
        Response.Write "</tr>"
      objRs.MoveNext
      Loop
    Response.Write "</table>"
  end if

objRs.Close
Set objRs = Nothing


'Tilbage
IF intPage > 1 THEN
Response.Write "<a href='index.asp?section=ShowSubCategories&page=" & intpage - 1 & "'>Forige</a>"
END IF

'Frem
IF intPage < intPageCount THEN
Response.Write "<a href='index.asp?section=ShowSubCategories&page=" & intpage + 1 & "'>Næste</a>"
END IF

'Udskriver en "sideliste"
For i = 1 to intPages
  if i = intPage then
    Response.Write "<b>" & i & "</b> "
  else
    Response.Write "<a href=""paging.asp?page=" & i & """>"
    Response.Write i
    Response.Write "</a> "
  end if
next




Conn.Close
Set Conn = Nothing
%>

min kode :)
Avatar billede fennec Nybegynder
01. maj 2006 - 13:02 #19
Det ser ikke ud til at du har en variabel der hedder intPageCount. Ser ud til at det skal være intPages i stedet:

IF intPage < intPages THEN
Response.Write "<a href='index.asp?section=ShowSubCategories&page=" & intpage + 1 & "'>Næste</a>"
END IF
Avatar billede starf Nybegynder
01. maj 2006 - 13:05 #20
gjorde ingen forskeld?
Avatar billede fennec Nybegynder
01. maj 2006 - 13:09 #21
Prøv lige at udskrive intPages og se hvilken værdi den indeholder...
Avatar billede starf Nybegynder
01. maj 2006 - 13:15 #22
det indeholder bare "1"
Avatar billede starf Nybegynder
01. maj 2006 - 13:16 #23
det indeholder også kun 1 hvis man sætter den op til kun at vise 2 udtag så der kommer flere sider i det..
Avatar billede fennec Nybegynder
01. maj 2006 - 13:24 #24
Kunne se ud som om problemet opstår oppe ved count(). Prøv at ændre koden til:

Set objRs = Conn.Execute("SELECT COUNT(*) AS antal FROM news_novatech;")
if isNumeric(objRs("antal")&"") then
  intRecords = cInt(objRs("antal")&"")
  response.write "1. Her"
else
  intRecords = 0
  response.write "2. Her"
end if

Den skulle helst udskrive "1. Her". Altså komme ind i førstedel af if'en :o)
Avatar billede starf Nybegynder
01. maj 2006 - 13:30 #25
nu ser det ud til at virke!
Avatar billede fennec Nybegynder
01. maj 2006 - 13:38 #26
Problemet hang sammen med eagleeye's kommentar 11:26:36 angående "Automation type", som gjorde at isNumeric() returnerede false. Det problem har vi løst ved at typcaste resultatet til tekst.

Du vil opdage at &"" koden kan blive din ven i mange situationer :o)
Avatar billede fennec Nybegynder
01. maj 2006 - 13:40 #27
Vi behøver nok ikke if-sætningen længere, så du kan nøjes med:

Set objRs = Conn.Execute("SELECT COUNT(*) AS antal FROM news_novatech;")
intRecords = cInt(objRs("antal")&"")
Avatar billede starf Nybegynder
01. maj 2006 - 13:53 #28
jeg takker endnu engang en million gange for hjælpen!
Avatar billede fennec Nybegynder
01. maj 2006 - 13:58 #29
no prob, og tak for point.
.o) <-- One Eyed Jack
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