"Mads Uggerby" <mau@niras.dk> wrote
> rs.recordcount gir' altid -1 - jeg bruger følgende connection til
> min database:
Når man åbner et recordset vha. Open metoden på Recordset objektet eller
Execute metoden på Connection objektet bruges der hvis der ikke specificeres
andet en Forward-only cursor. Denne cursor, der som navnet angiver, kun kan
bevæge sig fremad bruges for at opnå et recordset der hurtigt kan løbes
igennem uden at bruge alt for mange systemressourcer.
Men hvis man ønsker at bruge RecordCount egenskaben på recordsettet skal der
benyttes en anden cursor f.eks. en keyset cursor:
Set objConn = Server.CreateObject( "ADODB.Connection" )
objConn.ConnectionString = "<CONNECTIONSTRING>"
objConn.Open
strSQL = "SELECT <fieldlist> FROM <table>"
Set objRS = Server.CreateObject( "ADODB.Recordset" )
objRS.Open strSQL, objConn,1,1
Med ovenstående åbning af recordsettet specificerer vi i den sidste linie at
recordsettet skal fyldes med den data SQL'en returnerer når den sendes til
den åbne connection. Herefter fortæller vi med det første 1-tal at der skal
bruges en KeySet cursor og med det næste 1-tal at recordsettet skal være
Readonly da vi jo ikke skal tilføje eller ændre data.
Dog er der nogle forbehold i ovenstående, hvis man ikke skal bruge dataene
men blot antallet af poster i databasen er det bedre at bruge SQL's COUNT
funktion som fungerer sådan her:
SELECT COUNT(<field>) FROM <table>
Ovenstående SQL sætning vil returnere antallet af poster i den specificerede
tabel.
Faktisk vil det i mange tilfælde være hurtigere at skyde to SQL sætninger af
istedet for at åbne med en ikke ForwardOnly cursor. Det vil sige at man
først tæller posterne og herefter hiver dem ud:
Set objConn = Server.CreateObject( "ADODB.Connection" )
objConn.ConnectionString = "<CONNECTIONSTRING>"
objConn.Open
Set objRS = objConn.Execute( "SELECT COUNT(<field>) FROM <table>" )
Antal = objRS(0)
Set objRS = objConn.Execute( "SELECT <fieldlist> FROM <table>" )
Med ovenstående vil man nu have et Recordset med alle posterne samt en
variabel med antallet af poster.
Sidstnævnte kode er meget accessspecifik da man pga. den nuværende provider
ikke kan bruge flere SQL sætninger i træk og dermed få returneret flere
recordsets. I f.eks. SQL Server eller mySQL ville man benytte en SQL sætning
som:
SELECT COUNT(<field>) FROM <table>;SELECT <fieldlist> FROM <table>
Og herefter vil man kunne navigere mellem de to returnerede recordsets vha.
NextRecordset metoden.
--
Jakob Andersen
<
http://www.asp-faq.dk/>