webForumDet fria alternativet

Lista poster från en databas

ASP

11 svar · 297 visningar · startad av Magic

Medlem sedan sep. 200122 inlägg
Frågan#1

Hej!

Jag har ett par hemsidor där medlemmarna på sidorna finns inlagda i en databas.

Mitt problem nu är att jag har fått så många medlemmar så det är jobbilgt att lista alla medlemmar på en asp-sida. Jag skulle vilja dela upp innehållet och visa typ 10 i taget. Antingen nummeriskt, ex Föregående 1 2 3 4 5 Nästa, eller per bokstavspar, ex A-C, D-F, F-I......

Mitt problem är bara hur gör man??

Jag kör en accessdatabas med en vanlig select som listar samtliga funna poster.

<% Texter = "SELECT * FROM medlem ORDER BY Enamn"

   RecSet.Open Texter, Connect, adOpenStatic, adLockOptimistic
%>
<div align="left" class="bread">
   
<%
    Do While Not RecSet.EOF
       Response.Write "<p><a HREF='mailto:" & RecSet("Epost") & "'>" & RecSet("Enamn") & ", " & RecSet("Fnamn") & "</a><br><i>" & RecSet("Yrke") & "</i><br>" & RecSet("Adress") & "<br>" & RecSet("Postnr") & "  " & RecSet("Padress") & "<br>Tel bost " & RecSet("Bost") & ", Tel arb " & RecSet("Arb") & ", Tel mob " & RecSet("Mob") & ""
       RecSet.MoveNext
    Loop
%>
</div>

<% 
  RecSet.Close
%>
Medlem sedan juli 2001203 inlägg
#2
<% 
strSQL = "SELECT * FROM medlem ORDER BY Enamn"
objRS.PageSize = 20
objRS.CursorLocation = 3
objRS.CursorType = 3
objRS.Open strSQL, Connect, 3

if not objRS.EOF then
	if Request.QueryString("page")<>"" then
		objRS.AbsolutePage = Request.QueryString("page")
	else
		objRS.AbsolutePage = 1
	end if

	intPageNbr = objRS.AbsolutePage
	intPageSize = objRS.PageSize
else
	intPageNbr = 1
	intPageSize = 20
end if

'Response.Write(intPageNbr)

strSQL = "SELECT Count(*) AS antal FROM medlem"
set objRSCounter = server.CreateObject("adodb.recordset")
objRSCounter.Open strSQL, Connect
if not objRSCounter.EOF then
	intCount = objRSCounter("antal")
else
	intCount = 0
end if
objRSCounter.Close
set objRSCounter = nothing

%>
<div align="left" class="bread">
   
<%
    while not objRS.EOF
       Response.Write "<p><a HREF='mailto:" & objRS("Epost") & "'>" & objRS("Enamn") & ", " & objRS("Fnamn") & "</a><br><i>" & objRS("Yrke") & "</i><br>" & objRS("Adress") & "<br>" & objRS("Postnr") & "  " & objRS("Padress") & "<br>Tel bost " & objRS("Bost") & ", Tel arb " & objRS("Arb") & ", Tel mob " & objRS("Mob") & ""
       objRS.MoveNext
    wend

if intPageNbr > 1 then
%>
<a href="sidan.asp?page=<%=intPageNbr-1%>">&laquo; Föregående</a>
<%
else
%>
laquo; Föregående
<%
end if
%>
&nbsp;|&nbsp;
<%
if i=intPageSize then	  
%>
<a href="sidan.asp?page=<%=intPageNbr+1%>">Nästa &raquo;</a>
<%
else
%>
Nästa &raquo;
<%
end if
%>
</div>

<% 
  objRS.Close
%>

Testa detta :) (obs otestat)

Medlem sedan sep. 200122 inlägg
#3

Gick inte så bra!

Fick detta felmeddelande:

Microsoft VBScript runtime error '800a01a8' 

Object required: '' 

/_secure/medlem.asp, line 548

Och på den raden står det:

objRS.PageSize = 20

Nåt tips?

Medlem sedan juli 2001203 inlägg
#4

Du måste byta ut

Set RecSet=Server.CreateObject("adodb.recordset")

mot

Set objRS=Server.CreateObject("adodb.recordset")

i din kod

Medlem sedan sep. 200122 inlägg
#5

Nu har jag fått allt klart.

Problemet nu är väl bara att loopen ligger efter man kontrollerar om filen är EOF första gången. Och den kommer jag inte in i sista if satsen....

Medlem sedan sep. 200122 inlägg
#6

Nu är jag ett steg närmare en lösning men behöver hjälp.

Kolla in koden här ovanför som Erik Skickade mig. Den fungerar bra. Men variablerna intPageNbr och intPageSize förändras inte. Sista loopen har ju inget annat att ta hänsyn till än att köra till EOF.

Kan nån hjälpa mig med att få till slutet, tack!

Medlem sedan feb. 200112 078 inlägg
#7

Magic skrev:

Loopen säger ju inte till när jag ska sluta, eller hur? Den kör ju bara till EOF.

Kolla:

<%
    Do while not RecSet.EOF
       Response.Write "<p><a HREF='mailto:" & RecSet("Epost") & "'>" & RecSet("Enamn") & ", " & RecSet("Fnamn") & "</a><br><i>" & RecSet("Yrke") & "</i><br>" & RecSet("Adress") & "<br>" & RecSet("Postnr") & "  " & RecSet("Padress") & "<br>Tel bost " & RecSet("Bost") & ", Tel arb " & RecSet("Arb") & ", Tel mob " & RecSet("Mob") & ""
       RecSet.MoveNext
	Loop
%>
<%

'Do while' och 'loop' gör exakt samma sak som 'while' och 'wend' gör, så det är inte problemet.

Dessutom är ju faktiskt EOF slutet av ditt recordset, så det är ju rätt i vilket fall i såfall. ;)

Medlem sedan sep. 200122 inlägg
#8

Kärt barn har många namn....... :h

Men min fråga kvarstår, hur kan jag få värderna i variablerna att ändras i loopen? Jag ska ju bara visa 20 poster åt gången. Sen ska man ju klicka på >>nästa.

Medlem sedan sep. 200122 inlägg
#9

Lista antal poster från databas II

Nu fungerar nästan allt som det ska.

Men ett problem kvarstår. Jag får fortfarande inte med endast 20 poster på varje sida. Det verkar som om variablerna inte förändras. Hur förändrar jag dessa enligt mina önskemål? Här kommer koden:

<% 
strSQL = "SELECT * FROM medlem ORDER BY Enamn"
RecSet.PageSize = 20
RecSet.CursorLocation = 3
RecSet.CursorType = 3
RecSet.Open strSQL, Connect, 3

if not RecSet.EOF then
	if Request.QueryString("page")<>"" then
		RecSet.AbsolutePage = Request.QueryString("page")
	else
		RecSet.AbsolutePage = 1
	end if

	intPageNbr = RecSet.AbsolutePage
	intPageSize = RecSet.PageSize
else
	intPageNbr = 1
	intPageSize = 20
end if

Response.Write(intPageNbr)
Response.Write "<br>"
Response.Write(intPageSize)

strSQL = "SELECT Count(*) AS antal FROM medlem"
set RecSetCounter = server.CreateObject("adodb.recordset")
RecSetCounter.Open strSQL, Connect
if not RecSetCounter.EOF then
	intCount = RecSetCounter("antal")
else
	intCount = 0
end if
RecSetCounter.Close
set RecSetCounter = nothing

Response.Write "<br>"
Response.Write(intCount)

%>
<div align="left" class="bread">
   
<%
    Do while not RecSet.EOF
       Response.Write "<p><a HREF='mailto:" & RecSet("Epost") & "'>" & RecSet("Enamn") & ", " & RecSet("Fnamn") & "</a><br><i>" & RecSet("Yrke") & "</i><br>" & RecSet("Adress") & "<br>" & RecSet("Postnr") & "  " & RecSet("Padress") & "<br>Tel bost " & RecSet("Bost") & ", Tel arb " & RecSet("Arb") & ", Tel mob " & RecSet("Mob") & ""
       RecSet.MoveNext
	Loop
%>
<%
Response.Write "<br>"
Response.Write(intPageNbr)
if intPageNbr > 1 then
%>
<p>
<a href="medlem.asp?what=oversikt&open=yes&page=<%=intPageNbr-1%>">« Föregående</a>
<%
else
%>
<p>
«  Föregående
<%
end if
%>
 | 
<%
if i=intPageSize then	  
%>
<a href="medlem.asp?what=oversikt&open=yes&page=<%=intPageNbr+1%>">Nästa »</a>
<%
else
%>
Nästa »
<%
end if
%>
</div>

<% 
  RecSet.Close
%>
Medlem sedan juli 2001203 inlägg
#10

ojdå... glömde detta

i=0
do while not RecSet.EOF and i<intPageSize
i=i+1
...
...
loop

lägg till det så funkar det... det är ju lite meckigt att man måste räkna poster själv... men så är det... ;)

Medlem sedan sep. 200122 inlägg
#11

Stort tack!

Jag har fixat det hela och det fungerar utmärkt!

Här är hela koden, för den som vill se den (finns även i part 2):

<% 
strSQL = "SELECT * FROM medlem ORDER BY Enamn"
RecSet.PageSize = 20
RecSet.CursorLocation = 3
RecSet.CursorType = 3
RecSet.Open strSQL, Connect, 3

if not RecSet.EOF then
	if Request.QueryString("page")<>"" then
		RecSet.AbsolutePage = Request.QueryString("page")
	else
		RecSet.AbsolutePage = 1
	end if

	intPageNbr = RecSet.AbsolutePage
	intPageSize = RecSet.PageSize
else
	intPageNbr = 1
	intPageSize = 20
end if

'Response.Write(intPageNbr)

strSQL = "SELECT Count(*) AS antal FROM medlem"
set RecSetCounter = server.CreateObject("adodb.recordset")
RecSetCounter.Open strSQL, Connect
if not RecSetCounter.EOF then
	intCount = RecSetCounter("antal")
else
	intCount = 0
end if
RecSetCounter.Close
set RecSetCounter = nothing
%>
<div align="left" class="bread"> 
<%
    i=0
	Do while not RecSet.EOF and i < intPageSize
	i=i+1
       Response.Write "<p><a HREF='mailto:" & RecSet("Epost") & "'>" & RecSet("Enamn") & ", " & RecSet("Fnamn") & "</a><br><i>" & RecSet("Yrke") & "</i><br>" & RecSet("Adress") & "<br>" & RecSet("Postnr") & "  " & RecSet("Padress") & "<br>Tel bost " & RecSet("Bost") & ", Tel arb " & RecSet("Arb") & ", Tel mob " & RecSet("Mob") & ""
       RecSet.MoveNext
    Loop
%>
<%
if intPageNbr > 1 then
%>
<p>
<a href="medlem.asp?what=oversikt&open=yes&page=<%=intPageNbr-1%>">« Föregående</a>
<%
else
%>
<p>
«  Föregående
<%
end if
%>
 | 
<%
if i=intPageSize then	  
%>
<a href="medlem.asp?what=oversikt&open=yes&page=<%=intPageNbr+1%>">Nästa »</a>
<%
else
%>
Nästa »
<%
end if
%>
</div>
<% 
  RecSet.Close
%>
Medlem sedan mars 20015 287 inlägg
#12

Hyfsat onödigt att starta en ny tråd...

269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)