Jag vill kunna räkna antalet rader i mitt recordset Du måste ställar cursorn så att den kan "vandra lite friare" i recordsetet. Hej Nu ser koden ut så här men jag får fortfarande -1 på alla rader. Jag hämtar recordsetet från en AS400 det kanske är det som stökar till det. Du kan testa med client cursor innan du öppnar recordsetet. Varför har du behov av Recordcount om du ändå bara hämtar första värdet? Anledningen till att jag vill räkna antalet rader i recordsetet trots att jag bara använder mig av första posten är följande: Varför inte använda en fråga istället? Detta borde väl funka lika bra? Hej Andreas,Problem med att räkna rader i ett recordset
Jag har följande kod men då får jag alltid -1 som antal rader.
Tidigare loopade jag mig igenom varje recordset men då blir det väldigt segt (men det fungerade).
Om jag använder mig av en vanlig "count(*) As Antal" så fungerar det också men då kan jag inte läsa ut andra värden ur recordsetet, vilket jag vill göra.
Tacksam för tips
//Fredrik
<code>
'Antal plocklisterader
strquery2= "SELECT MQSLTP FROM MITALO20 WHERE MQTTYP = 31 AND MQRIDN = '" & rst("MDRIDN") & "' AND MQRIDI = " & rst("MDRIDI") & " AND MQPLSX = " & rst("MDPLSX")
Set rst2 = Server.CreateObject("ADODB.recordset")
rst2.Open strQuery2, conn
rader = 0
rader = rst2.Recordcount
lageromrade = rst2("MQSLTP")
rst2.Close
Set rst2 = nothing
</code>Sv: Problem med att räkna rader i ett recordset
Ändra denna rad:
<code>rst2.Open strQuery2, conn</code>
till:
<code>rst2.Open strQuery2, conn, 1, 3</code>
cya,
PatrikBSv: Problem med att räkna rader i ett recordset
Jag kan tänka mig att anledningen till att du får -1 är att du sätter
rader = 0 och sedan kör rader = rst2.Recordcount,
testa att ta bort rader=0 och se vilket svar du får.
Sen kan det ju vara så att om recordsetet är tomt så returneras inga rader.
Anna-KarinSv: Problem med att räkna rader i ett recordset
'Antal plocklisterader
strquery2= "SELECT MQSLTP FROM MITALO20 WHERE MQTTYP = 31 AND MQRIDN = '" & rst("MDRIDN") & "' AND MQRIDI = " & rst("MDRIDI") & " AND MQPLSX = " & rst("MDPLSX")
Set rst2 = Server.CreateObject("ADODB.recordset")
rst2.Open strQuery2, conn, 1, 3
rader = rst2.Recordcount
lageromrade = rst2("MQSLTP")
rst2.Close
Set rst2 = nothing
//FredrikSv: Problem med att räkna rader i ett recordset
Jag testade ett RecordCount mot en Access databas och då fungerade det.
//FredrikSv: Problem med att räkna rader i ett recordset
<code>
Const adUseClient = 3
'Antal plocklisterader
strquery2= "SELECT MQSLTP FROM MITALO20 WHERE MQTTYP = 31 AND MQRIDN = '" & rst("MDRIDN") & "' AND MQRIDI = " & rst("MDRIDI") & " AND MQPLSX = " & rst("MDPLSX")
Set rst2 = Server.CreateObject("ADODB.recordset")
rst2.CursorLocation = adUseClient
rst2.Open strQuery2, conn
rader = rst2.Recordcount
lageromrade = rst2("MQSLTP")
rst2.Close
Set rst2 = nothing
</code>Sv: Problem med att räkna rader i ett recordset
* Antalet rader i recordsetet = antalet rader på plocklistan.
* Urvalet i recordsetet är satt så att alla raderna på ett ordernummer har samma lagerområde. Därför behöver jag bara använda mig av första posten då jag vill veta hur många plocklisterader det är per lagerområde och order.
Jag får testa ditt tips på måndag.
//FredrikSv: Problem med att räkna rader i ett recordset
<code>
strquery2= "SELECT MQSLTP, COUNT(*) AS Antal" & vbCrLf & _
"FROM MITALO20" & vbCrLf & _
"WHERE MQTTYP = 31 AND MQRIDN = '" & rst("MDRIDN") & "' AND MQRIDI = " & rst("MDRIDI") & " AND MQPLSX = " & rst("MDPLSX") & vbCrLf & _
"GROUP BY MQSLTP
Set rst2 = Server.CreateObject("ADODB.recordset")
rst2.Open strQuery2, conn
rader = rst2("Antal")
lageromrade = rst2("MQSLTP")
rst2.Close
Set rst2 = nothing
</code>
Du kanske rentav kan optimera det ytterliga genom att plocka fram all inforamtion i det första recordsetet. Hur ser koden ut som öppnar och loopar igenom det?Sv: Problem med att räkna rader i ett recordset
Jag har testat att ställa frågan på det sätt som du skrev i ditt senaste inlägg och den fungerar alldeles utmärkt.
Här nedan följer hela koden för sidan.
Det skulle vara lysande om det gick att få ihop allt i det första recordsetet. Jag har försökt detta tidigare men inte lyckats, frågan tog då alldeles för lång tid. (Det var pga sortering som detta inte gick)
Idag har jag ett mellanlager i en Accessdatabas som jag sedan presenterar datan ifrån och den proceduren skulle jag vilja slippa. Här kör jag även slutsorteringen.
//Fredrik
<code>
<%
session.lcid = 1053
strquery = "SELECT OACUNO, ODCUNM, ODCUA3, MDRIDN, MDRIDI, MDPLSX, OAMODL, OAOREF, OARLDT FROM MITADI30, OOADRE00, OOHEAD00 " &_
"WHERE MDRIDN = ODORNO AND MDSTAT = '40' AND ODADRT=9 AND MDRIDN = OAORNO"
set conn = Server.CreateObject("ADODB.Connection")
conn.open "DSN=xxxx;UID=xxxxx;PWD=xxxx"
Set rst = Server.CreateObject("ADODB.recordset")
rst.Open strQuery, conn, 1, 3
'------------ Mellanlagring för sortering---------------
strquery_mellan = "SELECT * FROM Plocklistor"
set conn_mellan = Server.CreateObject("ADODB.Connection")
conn_mellan.open "Intranet"
Set rst_mellan = Server.CreateObject("ADODB.recordset")
rst_mellan.Open strQuery_mellan, conn_mellan, 1, 3
Tid = time
Response.Write "<H1>Plocklistor " & date & " " & time & "</h1>"
Response.Write "<table ID='Plocklistor' border=0 cellspacing=0 cellpadding=1 rules=box>"
IF rst.EOF THEN
Response.Write "Det finns inga plocklistor."
ELSE
While not rst.EOF
'-------------------------- Antal plocklisterader -----------------------------------
strquery2= "SELECT MQSLTP, COUNT(*) AS Antal FROM MITALO20 WHERE MQTTYP = 31 AND MQRIDN = '" & rst("MDRIDN") & "' AND MQRIDI = " & rst("MDRIDI") & " AND MQPLSX = " & rst("MDPLSX") & " GROUP BY MQSLTP"
Set rst2 = Server.CreateObject("ADODB.recordset")
rst2.Open strQuery2, conn
rader = rst2("Antal")
lageromrade = rst2("MQSLTP")
rst2.Close
Set rst2 = nothing
Levdatum = Left(rst("OARLDT"), 4) & "-" & Mid(rst("OARLDT"), 5 ,2) & "-" & Right(rst("OARLDT"), 2)
'-------------------------- Mellanlagringen utförs -----------------------------------
rst_mellan.AddNew
rst_mellan.Fields("Leveransdatum") = Levdatum
rst_mellan.Fields("Kundnr") = rst("OACUNO")
rst_mellan.Fields("Levadress1") = left(Svenska(rst("ODCUNM")),25)
rst_mellan.Fields("Levadress3") = left(Svenska(rst("ODCUA3")),25)
rst_mellan.Fields("Ordernr") = rst("MDRIDN")
rst_mellan.Fields("Lix") = rst("MDRIDI")
rst_mellan.Fields("Rader") = rader
rst_mellan.Fields("Plockomrade") = Lageromr(lageromrade)
rst_mellan.Fields("Plocklistesuffix") = rst("MDPLSX")
rst_mellan.Fields("Leveranssatt") = rst("OAMODL")
rst_mellan.Fields("Godsmarke") = Svenska(rst("OAOREF"))
rst_mellan.Fields("Session") = tid
rst_mellan.Update
rst.MoveNext
Wend
rst_mellan.Close
conn_mellan.Close
Set conn_mellan = nothing
Set rst_mellan = nothing
'------------------------------- Rubriker ------------------------------------------------
Response.Write "<THEAD>"
Response.Write "<TR>"
Response.Write "<th align=left width=60 valign=top>Levdatum</th>"
Response.Write "<th width=50 align=left valign=top>Kundnr</th>"
Response.Write "<th align=left width=160 valign=top>Namn</th>"
Response.Write "<th align=left width=160 valign=top>Postort</th>"
Response.Write "<th align=left width=40 valign=top>Ordnr</th>"
Response.Write "<th align=middle width=30 valign=top>Lix</th>"
Response.Write "<th align=left width=60 valign=top>Omr.namn</th>"
Response.Write "<th align=left width=40 valign=top>Rader</th>"
Response.Write "<th align=left width=110 valign=top>Levsätt</th>"
Response.Write "<th width=150 align=left valign=top>Godsmärke</th>"
Response.Write "</TR>"
Response.Write "</THEAD>"
Response.Write "<TBODY>"
Response.Write "<tr>"
'-------------------------------- Rader ----------------------------------------------------
raknare = 0
raknare_idag = 0
raknare_rest = 0
rad = 0
StrSort_plocklistor = "Leveransdatum ASC, Kundnr ASC, Ordernr ASC"
strquery_plocklistor = "SELECT * FROM Plocklistor WHERE Session = '" & Tid & "' ORDER BY " &StrSort_plocklistor
set conn_mellan = Server.CreateObject("ADODB.Connection")
conn_mellan.open "Intranet"
Set rst_mellan = Server.CreateObject("ADODB.recordset")
rst_mellan.Open strQuery_plocklistor, conn_mellan, 1 ,3
While not rst_mellan.EOF
Datum_nu = date
If rst_mellan("Leveransdatum") < Datum_nu then
raknare_rest = raknare_rest + 1
End If
If rst_mellan("Leveransdatum") = Datum_nu then
raknare_idag = raknare_idag + 1
End If
raknare = raknare + 1
rad = rad + 1
radfarg = "#FFFFFF"
IF rad = 2 THEN radfarg = "#F2F2F2"
IF rad = 2 THEN rad = 0
If (rst_mellan("Leveransdatum") > "" AND rst_mellan("Leveransdatum") < Datum_nu) then
radfargdatum = "#FF5959"
End If
If rst_mellan("Leveransdatum") = Datum_nu then
radfargdatum = "#FFFF00"
End If
If rst_mellan("Leveransdatum") > Datum_nu OR rst_mellan("Leveransdatum") = "" then
radfargdatum = radfarg
End If
Response.Write "<td width=60 align=left valign=top bgcolor=" & radfargdatum &">" & rst_mellan("Leveransdatum") & "</td>"
Response.Write "<td width=50 align=left valign=top bgcolor=" & radfarg &">" & rst_mellan("Kundnr") & "</td>"
Response.Write "<td width=160 align=left valign=top bgcolor=" & radfarg &">" & left(rst_mellan("Levadress1"),25) & "</td>"
Response.Write "<td width=160 align=left valign=top bgcolor=" & radfarg &">" & left(rst_mellan("Levadress3"),25) & "</td>"
Response.Write "<td width=40 align=left valign=top bgcolor=" & radfarg &">" & rst_mellan("Ordernr") & "</td>"
Response.Write "<td width=30 align=middle valign=top bgcolor=" & radfarg &">" & rst_mellan("Lix") & "</td>"
Response.Write "<td width=60 align=left valign=top bgcolor=" & radfarg &">" & rst_mellan("Plockomrade") & "</td>"
Response.Write "<td width=20 align=left valign=top bgcolor=" & radfarg &">" & rst_mellan("rader") & "</td>"
Response.Write "<td width=110 align=left valign=top bgcolor=" & radfarg &">" & Levsatt(rst_mellan("Leveranssatt")) & "</td>"
Response.Write "<td width=150 align=left valign=top bgcolor=" & radfarg &">" & rst_mellan("Godsmarke") & "</td>"
Response.Write "</tr>"
rst_mellan.MoveNext
Wend
Response.Write "<font>" & raknare & " plocklistor totalt.<br></font>"
Response.Write "<font>" & raknare_idag & " plocklistor skall levereras idag.<br></font>"
Response.Write "<font>" & raknare_rest & " plocklistor med rest (eller första lev.dag tidigare än idag).<br></font>"
'------------ Ta bort poster ur mellan registret -----------
set cm = Server.CreateObject("ADODB.Command")
cm.ActiveConnection = conn_mellan
'Define SQL query
cm.CommandText = "DELETE FROM Plocklistor WHERE Session = '" & Tid & "'"
cm.Execute
rst_mellan.Close
conn_mellan.Close
Set conn_mellan = nothing
Set rst_mellan = nothing
rst.Close
conn.Close
Set conn = nothing
Set rst = nothing
Response.Write "</TBODY>"
Response.Write "</table>"
END IF
%>
</code>