webForumDet fria alternativet

Räkna antal SQL-poster

7 svar · 1 694 visningar · startad av Agneus

AgneusMedlem sedan dec. 200346 inlägg
#1

Här kollar jag det totala antalet poster i tabellen. OK

'Räknar totala antalet poster i Tabellen
  Dim RS
  Set RS = Conn.Execute("SELECT count(*) AS antalposter FROM Tabellen")

  <%=RS("antalposter")%>

Här hämtar jag alla namn från poster som har ett Pnr.
Hur skriver jag för att ta reda på hur många poster, som hämtas med just detta urval?

Dim strSQL
strSQL = "SELECT Pnr,fnamn,enamn FROM Tabellen WHERE Pnr like 'P%';"
nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

Fritt från huvudet och lite googlande... (Dock otestat) Du kan behöva justera koden lite utifrån huruvida arrayer har startindex 0 eller 1, men jag tror att koden i det stora hela ska funka.

Dim strSQL, RSm, numRows
Dim arrayResult()
strSQL = "SELECT Pnr,fnamn,enamn FROM Tabellen WHERE Pnr like 'P%';"
Set RS = Conn.Execute(strSQL)

If oRecordSet.EOF
  numRows = 0
Else
  arrayResult = RS.GetRows()
  numRows = UBound(arrayResult)
End If

Response.Write("<div>Hittade " & numRows & " rader</div>")

For i = 1 To numRows
  Response.Write "<div>" & arrayResult(i, "fnamn") & "</div>"
Next
AgneusMedlem sedan dec. 200346 inlägg
#3

Ändrade

If oRecordSet.EOF

till

If rs.EOF THEN

får felmeddelande "Type mismatch" på raden: arrayResult = RS.GetRows()

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Dim arrayResult() skall vara Dim arrayResult

Innan du använder arrayResult sedan vill du kontrollera att det verkligen är en array:

arrayResult = rs.getrows()
...
if isarray(arrayResult) then
  ...
else
  ' inget resultat
end if
AgneusMedlem sedan dec. 200346 inlägg
#5
<%@Language=VBScript %>
<%option explicit%>

<%
Dim path
path = Server.MapPath("/db/källor.mdb")
	
Dim Conn 
Set Conn=server.createobject("adodb.connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & path

Dim strSQL, RSm, numRows
Dim arrayResult

strSQL = "SELECT id,Pnr,Fornamn,Efternamn,Dokument,Ar,Plats FROM KällTab WHERE Pnr like 'P%' ORDER BY Efternamn,Fornamn,Pnr asc;"
		
Dim rs
Set rs = Conn.Execute(strSQL)

If rs.EOF THEN
numRows = 0
Else
arrayResult = RS.GetRows()
numRows = UBound(arrayResult)
End If

Response.Write("<div>Hittade " & numRows & " rader</div>")

Dim i
For i = 1 To numRows
Response.Write "<div>" & arrayResult(i, "Fornamn") & "</div>"
Next
%>

_____________________________________

Resultat:

Hittade 6 rader

Microsoft VBScript runtime error '800a000d'

Type mismatch: '[string: "Fornamn"]'

/källor/lista_namn.asp, line 30
_____________________________________

6 rader. Bör vara ca 500 poster.
Vad ska arrayResult(i, "Fornamn") visa?
På en 10-gradig skala för ASP kunnande, ligger jag på en 2:a. Så vad betyder Peters resonemang om arrayer, i klartext?

Peter SMedlem sedan dec. 20025 483 inlägg
#6
<%@Language=VBScript %>
<%option explicit%>

<%
Dim path
path = Server.MapPath("/db/källor.mdb")
	
Dim Conn 
Set Conn=server.createobject("adodb.connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & path

Dim strSQL, RSm
Dim arrayResult

strSQL = "SELECT id,Pnr,Fornamn,Efternamn,Dokument,Ar,Plats FROM KällTab WHERE Pnr like 'P%' ORDER BY Efternamn,Fornamn,Pnr asc;"
		
Dim rs
Set rs = Conn.Execute(strSQL)

If not rs.EOF
  arrayResult = RS.GetRows()
End If

RS.Close

if not isarray(arrayResult) then
  response.write "inget resultat"
else
  Response.Write("<div>Hittade " & ubound(arrayResult, 2) & " rader</div>")

  Dim i
  For i = lbound(arrayResult, 2) To ubound(arrayResult, 2)
    Response.Write "<div>" & arrayResult(2, i) & "</div>"
  Next
end if
%>

GetRows() returnerar en tvådimensionell array där den första dimensionen motsvarar kolumner och den andra dimensionen rader. Båda dimensionerna är 0-baserade, så t.ex. arrayResult(2, 0) hämtar det tredje fältet i SELECT:en för den första raden.

prebenMedlem sedan mars 2009452 inlägg
#7

Arrayer:

Tänkk dig ett fisknät. Första rutan är (0,0) andra är (0,1) tredje är (0,2). Detta är i sidled.

I höjdled är första raden (0,0) , samma som ovan, givetvis. andra raden (1,0) tredje, (2,0)

***
Du vet hur många poster i sidled som du laddar. Det är dom i din sql-kod.

id, Pnr, Fornamn, Efternamn, Dokument, Ar, Plats

ID är plats noll, personnummer är plats ett och förnamn är plats två. Så. För att få reda på första personens förnamn så VET man att den platsen är arrayResult(2,0)

***
Så... hur många poster är i sidled? Det vet du men kan med kod räkna

response.write UBound(arrayResult,1)

detta bör resultera i en sexa eftersom första posten är noll och det är sju poster.

Så... hur många poster finns det då!? Det vet man inte, men det går att kolla med kod!

response.write UBound(arrayResult ,2)

Är denna siffra 300 då vet du att det finns 301 poster för första posten är ju noll!

Are you with!?

***
UBound = Upper Bound
LBound = Lower Bound ... vilket är rätt meningslöst för det är ju alltid noll.

I ASP används inte LBound, men det kan vara bra att känna till. Lite kuriosa.

(Kanske det används i avancerade varianter men jag har aldrig stött på det.)

AgneusMedlem sedan dec. 200346 inlägg
#8

:) Nu redovisas de 530 raderna.
Stort tack Nitro, Peter och Preben för hjälpen

126 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)