/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
RecordCount gir' -1
Fra : Mads Uggerby


Dato : 02-01-03 15:18

rs.recordcount gir' altid -1 - jeg bruger følgende connection til
min database:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security
Info=false;Data Source=C:\Inetpub\wwwroot\Databaser\database.mdb"

.. derefter bruger jeg:

rs = Conn.Execute(strSQL)

Hvorfor gir' rs.recordcount -1 ??

På forhånd tak - Mads.

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jakob Andersen (02-01-2003)
Kommentar
Fra : Jakob Andersen


Dato : 02-01-03 16:05

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



Jens Gyldenkærne Cla~ (02-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-01-03 16:01

Mads Uggerby skrev:

> Hvorfor gir' rs.recordcount -1 ??

Fordi du bruger et recordset der ikke understøtter .recordcount.
Den performancemæssigt bedste løsning (så vidt jeg ved) til at
få talt antallet af poster er ved at lave en særskilt select:

strSelect = _
   "SELECT personID, navn, adresse FROM personer WHERE stillingID = 6
strCount = _
   "SELECT Count(*) AS Antal FROM personer WHERE stillingID = 6
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste