Avatar billede k-asp-er Nybegynder
06. august 2001 - 13:49 Der er 6 kommentarer og
3 løsninger

forespørgsel

set rs = session(\"db\").execute(\"select TOP 10 * from news\" )

Man kan hente de første 10 records på denne måde. kan man hente de næste 10 i en lignende forespørgsel??
Avatar billede prof2 Nybegynder
06. august 2001 - 14:03 #1
<%
set rs = session(\"db\").execute(\"select * from news\")

rs.move 10

for i = 1 to 10
if not rs.eof then
  response.write(rs(\"id\") & \"<br>\")
end if
next
%>

Sådan kan det laves.
Avatar billede tmceu Praktikant
06. august 2001 - 14:12 #2
Du kan bruge det der kaldes recordset paging, et øjeblik så skal jeg finde et eksempel...
Avatar billede hirtshals Nybegynder
06. august 2001 - 14:16 #3
Paging af recordset  http://www.viewsource.dk/aspcat.asp?ident=2&page=2

eller

i = 1

set rs = session(\"db\").execute(\"select TOP 20* from news\")

i = i + 1

if i < 11 then
rs.movenext

else

response.write dine oplysninger ud
Avatar billede tmceu Praktikant
06. august 2001 - 14:19 #4
<%@ LANGUAGE=\"VBSCRIPT\" %>
<% \' Listing 17.1 Paging through a Recordset Part 1: Declaration
Option Explicit
Response.Expires = 0
%>
<!--#include file=\"adovbs.inc\"-->
<%
Const intPageSize = 10
Dim intCurrentPage, objConn, objRS, strQ
Dim intTotalPages, intI

\' Listing 17.2 Paging Part 2: Setting the Current Page Number
If Request.ServerVariables(\"CONTENT_LENGTH\") = 0 Then
  intCurrentPage = 1
Else
  intCurrentPage = CInt(Request.Form(\"CurrentPage\"))
  Select Case Request.Form(\"Submit\")
      Case \"Previous\"
        intCurrentPage = intCurrentPage - 1
      Case \"Next\"
        intCurrentPage = intCurrentPage + 1
  End Select
End If

\' Listing 17.3[em]Paging[md]Part 3: Preparing the Recordset for Paging
Set objConn = Server.CreateObject(\"ADODB.Connection\")
objConn.Open \"Data Source=Northwind;User ID=sa;Password=;\"

Set objRS = Server.CreateObject(\"ADODB.Recordset\")
objRS.CursorLocation = adUseClient
objRS.CursorType = adOpenStatic
objRS.CacheSize = intPageSize

\' Listing 17.4[em]Paging[md]Part 4: Opening the Recordset
strQ = \"SELECT Customers.CompanyName, Orders.OrderDate \"
strQ = strQ & \"FROM Orders INNER JOIN Customers ON \"
strQ = strQ & \"Orders.CustomerID = Customers.CustomerID \"
strQ = strQ & \"ORDER BY Orders.OrderDate, \"
strQ = strQ & \"Customers.CompanyName\"
objRS.Open strQ, objConn, , , adCmdText

\' Listing 17.5 Paging Part 5: Setting the Recordset cursor
objRS.PageSize = intPageSize
If Not(objRS.EOF) Then objRS.AbsolutePage = intCurrentPage

\' Listing 17.6 Paging Part 6: Sending Database Data
intTotalPages = objRS.PageCount
%>
<HTML><BODY>
<B>Customer: OrderDate</B><P>
<%
For intI = 1 to objRS.PageSize
  Response.Write Server.HTMLEncode(objRS(\"CompanyName\") & \":\" & objRS(\"OrderDate\")) & \"<BR>\"
  objRS.MoveNext
  If objRS.EOF Then Exit For
Next

objRS.Close : objConn.Close
Set objRS = Nothing : Set objConn = Nothing
%>

<BR>
Page <%= intCurrentPage %> of <%= intTotalPages %><P>

<% \' Listing 17.7 Paging Part 7: Providing Web Form for Paging %>
<FORM ACTION=\"<%= Request.ServerVariables(\"SCRIPT_NAME\") %>\" METHOD=\"POST\">
<INPUT TYPE=\"Hidden\" NAME=\"CurrentPage\"
VALUE=\"<%= intCurrentPage%>\">
<%
If intCurrentPage > 1 Then %>
<INPUT TYPE=\"Submit\" NAME=\"Submit\" VALUE=\"Previous\">
<% End If
If intCurrentPage <> intTotalPages Then %>
<INPUT TYPE=\"Submit\" NAME=\"Submit\" VALUE=\"Next\">
<% End If %>
</FORM>
</BODY></HTML>

Det du gør i ovenstående, er at hente x poster ad gangen og derefter vise links til at bladre frem/tilbage med. Det giver bedre performance på serveren end blot at hente alle poster (måske flere tusinde) poster, for kun at vise eks. 10 ad gangen.

Forestil dig eks. 10 brugere, der samtidig henter 100000 poster fra en database, for derefter måske kun at se de første par sider igennem - dette vil være spild af vigtige ressourcer på serveren.
Avatar billede k-asp-er Nybegynder
06. august 2001 - 17:29 #5
tmceu>>
AbsolutePage er åbenbart ikke en kendt størrelse for windows Advanced Server 2000.

Får fejlmelding:
ADODB.Recordset error \'800a0cb3\'
Object or provider is not capable of performing requested operation.

Vi snakker tabeller med maksimalt 100 poster.

Henrik>>
Jeg studerer lige dit paging script fra viewsource.dk  -  kunne ikke logge på i nat!

Prof2>>
Ser dejlig simpelt ud... Prøver det...

Alle>>
vender tilbage i morgen med nyt..

Mvh.
K-asp-er
Avatar billede k-asp-er Nybegynder
07. august 2001 - 09:30 #6
Hirtshals>>
Jeg erstatter dette:

>  Set rs = Server.CreateObject(\"ADODB.RecordSet\")

>  strSQL = \"SELECT * FROM brugte\" strDSN = \"DRIVER={Microsoft Access
Driver  *.mdb)};DBQ=\"&Server.MapPath(\"../db/brugte.mdb\")

>  rs.Open strSQL, strDSN, 1

med

>  set brugte = session(\"db\").execute(\"select * from brugte \")

jeg har global.asa sat sådan

>  Sub Session_OnStart
  >  session(\"db\").mode = 3
  >  session(\"db\").CommandTimeout = 30
  >  session(\"db\").Open \"brugte\"
>  End Sub

mode er forskellig, men den vej sker der ingenting?

Og så får jeg fejlmelding:

ADODB.Recordset error \'800a0cb3\'
Object or provider is not capable of performing requested operation.

Det virker ellers fint uden sesion.object
men hvad er problemet?? med fejlmeldingen.

Mvh.
K-asp-er

Avatar billede k-asp-er Nybegynder
07. august 2001 - 09:32 #7
Naturligvis er brugte erstattet med rs i hele koden - sorry
Avatar billede k-asp-er Nybegynder
08. august 2001 - 00:02 #8
Øhbøh>>PRB: Access ODBC Driver Does Not Support Multiple Result Sets

ID: Q202433


--------------------------------------------------------------------------------

The information in this article applies to:

Microsoft Data Access Components versions 1.5, 2.0, 2.1, 2.1 SP1, 2.1 SP2, 2.5

--------------------------------------------------------------------------------



SYMPTOMS
The Microsoft Access ODBC Driver does not support multiple result sets of native Access tables. Calling SQLGetInfo( hdbc, SQL_MULT_RESULT_SET, ... ) returns an \'N\' signifying the driver does not support multiple result sets. This means an application cannot call the ActiveX Data Objects (ADO) ADODB.Recordset.NextRecordset method when using the Microsoft OLE DB Provider for ODBC Drivers and the Microsoft Access ODBC Driver.

Calling the NextRecordset method returns error 800A0CB3:

The operation requested by the application is not supported by the provider.

Do not use the ADODB.Recordset.NextRecordset method with the Microsoft Access ODBC Driver or any other driver that does not support multiple result sets.



STATUS
This behavior is by design.



REFERENCES
Microsoft Jet Database Engine Programmer\'s Guide

Additional query words: resultset, Access, ADO

Keywords : kbDatabase kbODBC kbGrpVCDB kbGrpMDAC kbDSupport kbMDAC210 kbMDAC210SP2 kbMDAC250
Version : WINDOWS:1.5,2.0,2.1,2.1 SP1,2.1 SP2,2.5
Platform : WINDOWS
Issue type : kbprb
Technology :


Last Reviewed: April 26, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use



Avatar billede k-asp-er Nybegynder
10. august 2001 - 17:13 #9
Skriver skidtet som DNS-less
mvh.
K-asp-er
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