Avatar billede bongo20 Nybegynder
13. september 2005 - 10:58 Der er 11 kommentarer og
2 løsninger

ADO RecordCount

Hej

Jeg har et problem hvor mit recordset altid returnerer -1 uanset hvad der er af indhold i den.
Nogen der ved hvordan jeg får at vide hvor mange recordt der er i mit recordset før jeg løber den igennem?

:o)
Avatar billede busschou Praktikant
13. september 2005 - 11:07 #1
du kan jo altid i din sql sætning tælle ved
Select Count(*) From din_tabel Where noget = noget_andet
Resultatet af den sql vil give dig antallet af rækker som opfylder din betingelse
Avatar billede bongo20 Nybegynder
13. september 2005 - 11:09 #2
Ja men det handler om at finde en forklaring på RecordCount,.jeg har fundet nogle oplysninger på nettet hvor der står at der indimellem er et problem med ADO i den forbindelse..

Ved bare ikke om det handler om at vælge andre cursortype eller hvad... ?!?
Avatar billede capaj Nybegynder
13. september 2005 - 11:12 #3
Hej Bongo,

RecordCount exposes ikke altid, men afhænger dels af hvordan du åbner dit ADO recordset men også afhængig af din Dataprovider type.

Min erfaring er i sidste ende at det er nemmest (og Fin performence) at gøre som busschou skriver!

/CAPAJ
Avatar billede capaj Nybegynder
13. september 2005 - 11:13 #4
Ja ok du kom selv lidt foran. Prøv en keyset cursor..
Avatar billede capaj Nybegynder
13. september 2005 - 11:15 #5
Og et lille trick i forhold til din count:
Antag du har:
StrSql="Select a,b,c from TableX where XXX"

Du kan tage din recordcount på denne måde:
Dim StrSQlCount as string
StrSQlCount="Select Count(*) From (" & StrSql & ") CountData"
og eksekvere denne mod din conn.

/CAPAJ
Avatar billede ldanielsen Nybegynder
13. september 2005 - 11:52 #6
RecordCount findes kun hvis du benytter Cursortype adOpenDynamic (2) eller adOpenStatic (3).

Hvis du viser hvordan du åbner dit recordset kan jeg vise hvad der skal gøres.

Jeg gør sådan:

Dim Con, Com, Rec
Set Con = Server.CreateObject("ADODB.Connection")
Set Com = Server.CreateObject("ADODB.Command")
Set Rec = Server.CreateObject("ADODB.Recordset")

Con.Open strConnectionString
Com.ActiveConnection = Con

Com.CommandText = "SELECT * FROM Table"
Rec.Open Com, , 3, 1

Response.Write(Rec.RecordCount)

Rec.Close

Con.Close
Set Con = Nothing
Set Com = Nothing
Set Rec = Nothing
Avatar billede ldanielsen Nybegynder
13. september 2005 - 11:52 #7
Avatar billede bongo20 Nybegynder
13. september 2005 - 12:59 #8
så har jeg lært lidt igen,. tak for det. Smider i et svar alle..?
Avatar billede ldanielsen Nybegynder
13. september 2005 - 13:28 #9
Svar

Husk kun at bruge de avancerede cursore hvis der er brug for det. fx. til recordCount.

Som regel er adOpenForwardOnly (0) nok, og der spares MANGE ressourcer på den måde
Avatar billede capaj Nybegynder
13. september 2005 - 14:20 #10
Svar...

ldanielsens sidste kommentar en smule ....vigtig

/CAPAJ
Avatar billede ldanielsen Nybegynder
14. september 2005 - 10:15 #11
hov! dette skulle være et svar :)
Avatar billede capaj Nybegynder
14. september 2005 - 10:53 #12
svar
Avatar billede kjulius Novice
17. september 2005 - 23:16 #13
Endnu en mulighed:
Hvis du alligevel ved, at du skal gennemløbe alle rows i det returnerede recordset, kan du også benytte det lille trick med at bruge en .MoveLast før du spørger på .RecordCount - derved får du det rigtige antal records. Men det bevirker også, at alle rows bliver overført til bufferen. Det er jo ikke så resourcebesparende, hvis det f.eks. kun er den første row, du ønsker at læse. Men ved små tabeller betyder det måske ikke så meget.
Du er selvfølgelig bagefter nødt til at bruge en .MoveFirst, men det vidste du jo godt :-)
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