Avatar billede killstun Nybegynder
31. juli 2005 - 23:54 Der er 12 kommentarer og
1 løsning

Paging uden at vise tomme felter

Jeg har fundet nedenstående script til at anvende paging. Det virker fortræffeligt, men nu vil jeg gerne have at den ikke viser titel, hvis ikke der findes noget information i feltet. Jeg har nemlig nogle tomme felter i databasen under titel, som den viser alligevel.

Jeg prøvede med:

if Not (rs.BOF Or rs.EOF) AND rs("titel") <> "" then

- men det virker ikke, da den slet ikke viser nogle titler så.

Mit script:

<html><head>
<title>Paging af et recordset</title>
</head><body>

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

Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT titel FROM film"
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/vti_log/film.mdb")

rs.Open strSQL, strDSN, 1
if Not (rs.BOF Or rs.EOF) then
  rs.PageSize = 20
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
  Do While Not rs.EOF And intRecCount > 0
    Response.Write rs("titel") & "<br>"
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing

Response.Write "<p>Gå til side "
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
%>

</body></html>
Avatar billede hiks Nybegynder
01. august 2005 - 08:43 #1
hej

jeg ville gøre det i din sql således så slipepr du får at lave alt muligt om i kodningen:

strSQL = "SELECT titel FROM film WHERE titel <> "";"

/hiks
Avatar billede killstun Nybegynder
01. august 2005 - 10:11 #2
Der kommer desværre denne fejl:

Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0409)
Strengkonstanten er uafsluttet
/paging.asp, line 14, column 53
strSQL = "SELECT titel FROM film WHERE titel <> "";""
----------------------------------------------------^
Avatar billede hiks Nybegynder
01. august 2005 - 10:51 #3
nå ja sorry... :o)

strSQL = "SELECT titel FROM film WHERE titel <> '';"

eller

strSQL = "SELECT titel FROM film WHERE titel is not null;"

/hiks
Avatar billede hiks Nybegynder
01. august 2005 - 10:51 #4
og bemærk at det er 2 ' ikke "

/hiks
Avatar billede killstun Nybegynder
01. august 2005 - 11:20 #5
Yes sir...Tusind takker. Hvis du lige smider et svar. En anden ting:

Ved du hvorledes jeg kan tilføje "case" i links til sidetallene? Grunden til at jeg spørger er fordi jeg på samme side har nogle forskellige case. Når jeg vil se fx side 2, får jeg en tom side, da den ikke kan finde ud af hvilken case der er "tale" om, hvis du forstår.
Avatar billede hiks Nybegynder
01. august 2005 - 11:27 #6
jeg ved ikke om jeg forstår dig helt - men går ud fra at det er noget med at du har opbygget din kode i en enkelt side hvor du så vil "smide" folk rundt efter hvad der står i querystringen... I så fald skal du have rette de steder i ovenstående kode hvor der er links til siderne således at du får tilføjet et & og så din "case".

Eksempelvis:


<a href=mode=dinside&paging.asp?page=" & intNum & "> istedet for:

<a href=paging.asp?page=" & intNum & ">"

/hiks
Avatar billede killstun Nybegynder
01. august 2005 - 11:31 #7
Nej ikke helt...Jeg kan give et eksempel på det herunder:

<%
Response.write "<form action='index.asp' method='post'>"
Response.write "<select name='DropBox'>"
Response.write "<option value='valg'>Vælg sorteringsform...</option>"
Response.write "<option value='Billeder'>Billeder</option>"
Response.write "<option value='Bogstaver'>Bogstaver</option>"
Response.write "</select>"
Response.write "<input type='submit' value='OK' />"
Response.write "</form>"

varDropBox = Request.form("DropBox")
Select Case varDropBox

Case "Billeder"
bla bla bla bla (her sendes jeg til hvis jeg har valgt "billeder" fra form).

Case "Bogstaver"
(her sendes jeg til hvis jeg har valgt "bogstaver" fra form). Det er hernede jeg har min paging. Når jeg så klikker på side 2, sendes jeg til toppen af siden og den kan ikke finde ud af at jeg kommer fra case "Bogstaver"
Avatar billede hiks Nybegynder
01. august 2005 - 11:37 #8
jeg tror jeg ville smide det i querystringen istedet eller i en session variabel:

...

varDropBox = Request.form("DropBox")

if Len(varDropBox) = 0 then
    varDropBox = Request.QueryString("DropBox")
End if

...

Så dine links fra pagingen kommer til at se således ud:

<a href=paging.asp?DropBox=Bogstaver&page=" & intNum & ">

/hiks
Avatar billede killstun Nybegynder
01. august 2005 - 11:45 #9
oki, afprøver lige. Har lige noget jeg skal ordne, men vender tilabge om 3 timers tid hvis jeg kan få dig til at kigge tården her senere.
Avatar billede killstun Nybegynder
01. august 2005 - 16:37 #10
Hehee, det virker, det virker. Takker endnu engang. Mens vi har gang i tråden, kan du så hjælpe mig yderligere (kan godt oprette en ny tråd, men du kan få nogle points). Som jeg havde det før, var rs("titel") et link, men dette virker ikke nu. Den kommer med denne fejl:

Fejltype:
ADODB.Recordset (0x800A0CC1)
Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.

Inden jeg lavede paging på siden, åbnede jeg databasen således:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/film.mdb")
Conn.Open DSN
strSQL = "Select * From film Order by titel"
Set rs = Conn.Execute(strSQL)
Do While NOT rs.EOF
Response.write "<a href='filmbeskrivelse.asp?forbogstav="& rs("forbogstav") &"&ID=" & rs("ID") & "'>"
Response.write rs("titel")
Response.write "</a>"
end if
rs.MoveNext
Loop
Conn.Close
Set Conn = Nothing

Men efter jeg indførte paging scriptet, åbnes den jo på en anden måde som man kan se øverst på denne side. Har du en idé til hvorledes jeg kan få den til at opfange rs("forbogstav") og rs("ID")?
Avatar billede hiks Nybegynder
01. august 2005 - 17:22 #11
ja - det er såmænd simpelt nok. Prøv at ændre sql'en til:

strSQL = "SELECT * FROM film WHERE titel <> '' ORDER BY titel;"

og så erstatter du bare din response.write fra pagingen med den ovenover du selv lige har skrevet. Altså din løkke kommer til at se således ud:


  Do While Not rs.EOF And intRecCount > 0
    Response.write "<a href='filmbeskrivelse.asp?forbogstav="& rs("forbogstav") &"&ID=" & rs("ID") & "'>"
    Response.write rs("titel")
    Response.write "</a><br>"
    intRecCount = intRecCount - 1
    rs.MoveNext
  Loop

/hiks
Avatar billede killstun Nybegynder
01. august 2005 - 21:01 #12
Ahh, men det jo storartet. Respekt hiks ;-) Takker mange gange for din store hjælp.
Avatar billede hiks Nybegynder
01. august 2005 - 21:09 #13
np - håber du kan bruge det... :o)

/hiks
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