Avatar billede monstermand Nybegynder
22. januar 2003 - 18:40 Der er 9 kommentarer og
2 løsninger

count etc.

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

Set rs = Server.CreateObject("ADODB.Recordset")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../cgi-data/film.mdb")
strSQL = "SELECT * FROM tblFilm ORDER BY " & Request.QueryString("sort")
rs.Open strSQL, strDSN, 1


If Not (rs.BOF Or rs.EOF) Then
    rs.PageSize = 5
    rs.AbsolutePage = intPage
    intRecCount = rs.PageSize
    intPageCount = rs.PageCount

%>

som det kan ses har jeg implementeret en paging løsning på min asp side. Det jeg mangler er følgende:
1) En Select count(*) as ... - jeg kan simpelthen ikke få det til at virke med recordset!

2) En funktion der skriver: de ser nu nr.10-19, og på den næste side skal der så stå nr.20-29. (ligesom der også er her på eksperten)

Håber nogen gider hjælpe
Avatar billede eagleeye Praktikant
22. januar 2003 - 19:11 #1
Til 1. Hvad virker ikke når du skriver - jeg kan simpelthen ikke få det til at virke med recordet!

Jeg prøvet oplevet det er nødvendt med et connection object og ikke bare strDSN så koden som åbner bliver:


Set rs = Server.CreateObject("ADODB.Recordset")
Set Conn = Server.CreateObject("ADODB.Connecion")

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../cgi-data/film.mdb")
Conn.Open strDSN
strSQL = "SELECT * FROM tblFilm ORDER BY " & Request.QueryString("sort")
rs.Open strSQL, Conn, 1
Avatar billede eagleeye Praktikant
22. januar 2003 - 19:13 #2
Til 2:

Du kender hvilken siden den er på med  intPage og at der er 5 pr side.:

minNr = (int(intPage)-1)*5+1
maxNr = int(intPage)*5
Avatar billede monstermand Nybegynder
22. januar 2003 - 19:24 #3
jeg skal bare have den til at tælle antal records fundet - andet er der ikke i det - jeg kan bare ikke få det frem - hvordan gør jeg?
Avatar billede eagleeye Praktikant
22. januar 2003 - 19:44 #4
Kan du ikke bruge recordCount

antal = rs.RecordCount
Avatar billede eagleeye Praktikant
22. januar 2003 - 19:46 #5
Eller må du lave en SQL som kun tæller antallet:

SQL = "SELECT Count(*) as antal FROM tblFilm"
Set rs = Conn.Execute(SQL)
antal = rs("antal")
Avatar billede monstermand Nybegynder
22. januar 2003 - 19:54 #6
<%
set conn = server.CreateObject("ADODB.CONNECTION")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../../cgi-data/film.mdb")
SQL = "SELECT Count(*) as antal FROM tblFilm"
SQL = "SELECT ID, originaltitel FROM tblFilm ORDER BY originaltitel"
set RS = conn.execute(SQL)
%>

<%=rs("antal")%>
Avatar billede monstermand Nybegynder
22. januar 2003 - 19:55 #7
ovenstående virker ikke - jeg føler jeg har prøvet alt, men hver gang kommer der en fejlmeddelelse - hvad gør jeg galt?
Avatar billede torbenmelander Nybegynder
22. januar 2003 - 20:28 #8
En grund til at ovenstående ikke virker kunne være at du overskriver den samme variable (SQL) med nye data inden du gør brug af den...

Mig bekendt kan du ikke både lave en "COUNT" og trække data ud via én SQL-sætning.

Jeg ville løse det ved at bruge egenskaben på recordsetet, hvilket kræver at du åbner din database med nogle flere parametre således at den ikke er forward-only, men static eller dynamic. Det kan du se at egenskaben kræver her: http://www.w3schools.com/ado/prop_rs_recordcount.asp og her: http://activedeveloper.dk/aspdigital/appendix_c/cursortyper.asp.

Du kan se her hvad du skal ændre for at gøre den til det: http://www.adopenstatic.com/faq/recordcounterror.asp. For at ASP kender konstanter som denne adOpenStatic skal du inkludere en fil i de filer du bruger dem eller skrive tallene som konstanterne svarer til. Det gør ved at placere denne linie øverst i dit dokument:

<!-- METADATA TYPE="typelib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" -->

Hvis du gerne vil skrive det ud som 10-15 kan du jo vel ta den aktuelle side med intPage og gange den med din PageSize (5) og så lægge pagesize til for at få det sidste ... eller noget deromkring ;-)

Håber det hjælper :)
Avatar billede eagleeye Praktikant
22. januar 2003 - 22:18 #9
Det skal laves som to SQL sætninger som bliver udført hver for sig :



SQL = "SELECT Count(*) as antal FROM tblFilm"
Set rs = Conn.Execute(SQL)
antal = rs("antal")
rs.Close
strSQL = "SELECT * FROM tblFilm ORDER BY " & Request.QueryString("sort")
rs.Open strSQL, Conn, 1

If Not (rs.BOF Or rs.EOF) Then
Avatar billede monstermand Nybegynder
24. januar 2003 - 09:02 #10
Tak for hjælpen begge to - det hjalp mig videre, så nu virker det!

Et afsluttende spørgsmål hvis i tilfældigvis ved det: Hvad er forskellen på om jeg åbner ADODB.Recordset eller ADODB.Connection?
Avatar billede eagleeye Praktikant
24. januar 2003 - 16:09 #11
ADODB.Recordset er et recordset som kan indeholde data fra en tabel i en database. Recordset'et bliver lavet ud fra din SQL.

For at få adgang og mulighed for at hendte data fra en database skal man bruger et Connection object som så er ADODB.Connection. Så connectione er forbindelsen til databasen og recordsetet er der hvor man får data i fra databasen enten ved:

Set RecordSet_Navn = ConnectionObject.Execute(SQL-sætning)

eller

RecordSet.Open SQL-sætning, ConnectionObject
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