Avatar billede renekoemler Nybegynder
23. februar 2004 - 11:39 Der er 10 kommentarer og
1 løsning

Funktion der returnere antallet af records i access database

Hej,

ER der en funktion i .asp (VBscript) der kan returnere det samlede antal af records i en access tabel. eller skal man selv lige lave en løkke der kører fra 0 til EOF

Bedste Hilsner
René
Avatar billede nute Nybegynder
23. februar 2004 - 11:42 #1
du kan lade SQL gøre dette:

SELECT COUNT(*) AS antal FROM dinTabel

så har du antallet i 'antal' kolonnen

ellers kan du bruge RecordCount propertien på dit recordset-objekt, så skal du bare huske på at åbne dit recordset med de korrekte cursortyper

/nute
Avatar billede steen Nybegynder
23. februar 2004 - 11:42 #2
objRS.RecordCount()
Avatar billede renekoemler Nybegynder
23. februar 2004 - 15:23 #3
hmmm korrekt cursortype.....?????

Her er koden den virker ikke:

<%
  Set Conn = Server.CreateObject("ADODB.Connection")
  DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
  DSN = DSN & "DBQ=" & Server.MapPath("/db/infonyt.mdb")
  Conn.Open DSN
 
  SQL = "Select * from TAB_Artikel Order by ArtikelID Desc"
  Set rs = Conn.Execute(SQL)

  Dim antal

  If rs.RecordCount() < 5 Then
    antal = rs.RecordCount()
  Else
    antal = 5   


  Dim i
  i = 0

  Do Until i=antal

  Link="<a href='infonyt_vis.asp?ArtikelId=" & rs("ArtikelId") & "'>Læs mere</a>"

  Response.Write rs("ArtikelOverskrift") & "<br>(" & rs("ArtikelOprettet") & ") " & Link & "<br>"
 
  rs.MoveNext
 
  i = i+1

  Loop
 
  Conn.Close
  Set Conn = Nothing
%>
Avatar billede nute Nybegynder
23. februar 2004 - 15:37 #4
1) for at bruge recordcount, skal du åbne dit recordset på en lidt anden måde:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/db/infonyt.mdb")
 
SQL = "Select * from TAB_Artikel Order by ArtikelID Desc"
Set rs = Server.CreateObject( "ADODB.RecordSet" )
rs.open SQL, DSN, 3, 3

hvor '3, 3' i linjen over, definerer cursortyper. det første 3 tal, er hvilken "læse-cursor" du skal bruge, og det andet 3 tal, er hvilken "låse-cursor" du skal bruge. pr. default, så bliver en database åbnet med en "forward only" cursor, men du skal bruge en "dynamisk cursor" for at tælle. M$ kan nok forklare dette bedre end mig ;-]
http://msdn.microsoft.com/library/en-us/ado270/htm/mdprocursortype.asp?frame=true


2) RecordCount er en property, ikke en metode, derfor:

If rs.RecordCount() < 5 Then

skal være :

If rs.RecordCount < 5 Then


/nute
Avatar billede renekoemler Nybegynder
23. februar 2004 - 15:54 #5
Hej Nute, TNX men kan ikke få det til at køre - jeg afvikler på en IIS på en w2kserver:

<%
  Set Conn = Server.CreateObject("ADODB.Connection")
  DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
  DSN = DSN & "DBQ=" & Server.MapPath("/db/infonyt.mdb")
  Conn.Open DSN
 
  SQL = "Select * from TAB_Artikel Order by ArtikelID Desc"
  Set rs = Server.CreateObject("ADODB.RecordSet")
  rs.open SQL, DSN, 3, 3
 
  Dim antal
 
  If rs.RecordCount < 5 Then
    antal = rs.RecordCount
  Else
    antal = 5   
  End If
   
  Dim i
  i = 0

  Do Until i=antal

  Link="<a href='infonyt_vis.asp?ArtikelId=" & rs("ArtikelId") & "'>Læs mere</a>"

  Response.Write rs("ArtikelOverskrift") & "<br>(" & rs("ArtikelOprettet") & ") " & Link & "<br>"
 
  rs.MoveNext
 
  i = i+1

  Loop
 
  Conn.Close
  Set Conn = Nothing
%>


Går hjem for idag - kigger måske i aften ellers i morgen
Avatar billede nute Nybegynder
23. februar 2004 - 16:18 #6
"kan ikke få det til at køre" ?? hvad betyder det ? får du en fejl, eller giver koden ikke noget fornuftig resultat ?

du skal hellere ikke åbne din connection. fjern 'Conn.Open DSN' (det har ingen betydning, men det er overflødig)

jeg har testet denne kode, og hvis jeg under din 'if rs.RecordCount < 5 then' struktur skriver 'Response.write antal' så vil jeg få recordcount ud ... helt "efter planen".

/nute
Avatar billede renekoemler Nybegynder
24. februar 2004 - 07:33 #7
Godmorgen,

Siden returnere en HTTP 500 Intern serverfejl.

Jeg kigger lidt videre.

/rene
Avatar billede renekoemler Nybegynder
24. februar 2004 - 07:45 #8
Hej Igen,

Har lige prøvet at lave denne kode:

<%
  Set Conn = Server.CreateObject("ADODB.Connection")
  DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
  DSN = DSN & "DBQ=" & Server.MapPath("/db/infonyt.mdb")
   
  SQL = "Select * from TAB_Artikel Order by ArtikelID Desc"
  Set rs = Server.CreateObject("ADODB.RecordSet")
  rs.open SQL, DSN, 3, 3
 
  Dim antal
 
  antal = rs.RecordCount
 
  Response.Write antal
 
  Conn.Close >>Dette er linie 26<<
  Set Conn = Nothing
%>


Og får dette retur:

10 >>SOM ER DET RIGTIGE ANTAL RCORDS<<
ADODB.Connection error '800a0e78'

Operation is not allowed when the object is closed.

/asp-filer/infonyt_test2.asp, line 26



ADODB.Connection error '800a0e78'

Operation is not allowed when the object is closed.

/asp-filer/infonyt_test.asp, line 49
Avatar billede renekoemler Nybegynder
24. februar 2004 - 07:46 #9
skal den måske hedde rs.Close istedet for Conn.Close?
Avatar billede renekoemler Nybegynder
24. februar 2004 - 08:30 #10
Hej Nute,

Nu har jeg leget lidt, det viste sig at der havde indsneget sig en ugyldig karakter efter at jeg satte antal=5 i min if sætning, så nu kører det.

Jeg har erstattet:
Conn.Close med rs.Close

Jeg har slettet:
Set Conn = Nothing - skal jeg sette' rs til noget eller har jeg lukket godt nok.

Tusind tak for god hjælp og tålmodighed. Smid lige et svar så du kan få points.

/rene
Avatar billede nute Nybegynder
24. februar 2004 - 09:38 #11
godt at høre :o]

"svar"

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