webForumDet fria alternativet

längd på ett recordset utan att loopa

ASP

12 svar · 331 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Går det att får fram hur många poster ett recordset innehåller utan att loopa ?

Medlem sedan juni 200032 967 inlägg
#2

Japp. Om du öppnar recordsetet på lämpligt vis så kan du använda egenskapen .RecordCount.

Mvh

Medlem sedan juni 200032 967 inlägg
#3

Du kan förresten läsa lite i denna tråd. Känns något av det igen? Där använder du recordcount.

Medlem sedan maj 20012 080 inlägg
#4

Jo visst gör det det... *ler*

Men jag antar att det enbart fungerar med "rs.Open" metoden?

Medlem sedan juni 200032 967 inlägg
#5

Japp. Enbart med rs.open och lämplig låstyp / cursortyp.

Medlem sedan feb. 200112 078 inlägg
#6

OT: Det kan vara värt att veta att .Execute-metoden däremot har en ByRef-parameter som kallas RecordsAffected. Den returnerar dock -1 vid SELECT-statements, men returnerar antalet påverkade rader vid t.ex. INSERT, UPDATE eller DELETE.

Medlem sedan maj 20012 080 inlägg
#7

Thanx killar.

Då loopar jag lite i detta fall :)

Medlem sedan feb. 200112 078 inlägg
#8

mattiasnordin skrev:

Thanx killar.

Då loopar jag lite i detta fall :)

Jag skulle nog snarare rekommendera att du använder .Open på Recordset-objektet istället, det är bättre både prestandamässigt och programmeringsmässigt. Du kan använda .Open med rätt konstanter utan att det behöver kosta skjortan i prestanda:

Const adOpenStatic = 3
Const adLockReadOnly = 1
rs.Open sSQL, objConn, adOpenStatic, adLockReadOnly

eller

rs.Open sSQL, objConn, 3, 1
Medlem sedan maj 20012 080 inlägg
#9

Då ska jag lära mig att börja köra denna variant istället. Är man självlärd så blir man lite bekväm och kör det som alltid har fungerat istället för göra rätt ;)

Medlem sedan maj 20012 080 inlägg
#10

Object required error på följande kod:

' Access 2002 '
Set Connect = Server.CreateObject( "Adodb.Connection" )
Connect.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath( "/staffdatabase2/staffdatabase_2003.mdb" )
Connect.ConnectionString = "Data Source='" & MdbFilePath & "'"
Connect.open

sql = "SELECT * FROM T_staff "
Const adOpenStatic = 3
Const adLockReadOnly = 1
rsStaff.Open sql, Connect, adOpenStatic, adLockReadOnly

Hmmm... har inte erfarenhet av rätt syntax ännu. Hilfe :)

Medlem sedan maj 20012 080 inlägg
#11

Hittade felet. Tack killar.

sql = "SELECT * FROM T_staff "
Const adOpenStatic = 3
Const adLockReadOnly = 1
Set rsStaff = Server.CreateObject("ADODB.RecordSet")
rsStaff.Open sql, Connect, adOpenStatic, adLockReadOnly

Medlem sedan feb. 200112 078 inlägg
#12

Observera att 3,1 gör ditt recordset till ReadOnly (adLockReadOnly) och din cursor till Static (adOpenStatic). På svenska innebär det att du inte kan göra ändringar i recordset'et, men dock kan röra dig fritt framåt (.MoveNext) eller bakåt (.MovePrevious), samt med t.ex. AbsolutePosition placera markören på valfritt index i ditt recordset.

Skall du bara flytta framåt i ditt recordset kan du även använda adOpenForwardOnly (som har värdet 0) istället för adOpenStatic, om du skall t.ex. bara dra ut data som en lista.

Läs mer om pekare och låstyper under ADO på MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstcursortypeenum.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstlocktypeenum.asp

Mer om .Open:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthrstopen.asp

Kom ihåg, MSDN Library är din bästa vän. ;)

Medlem sedan maj 20012 080 inlägg
#13

Bra info. Blev en liten snabbkurs det här. Vem ska jag skicka fakturan till ??? *ler*

Jag har aldrig gjort något mer advancerat än att stegat mig fram i ett recordset så det duger gott. Bra att lära sig något nytt dock.
Jag slapp loopen i alla fall :)

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)