Permalänk
Medlem

ASP: Summan av en kolumn

Hur skriver jag för att få ut summan ur en kolumn i ASP?
Jag har en databas (tabellen heter todo) med en kolumn som heter "123". I denna ligger det x-antal tal som jag helt enkelt vill få summan utav. Någon som vill hjälpa mig?

Detta är min databaskoppling:

<% Set Connect = Server.CreateObject ("ADODB.Connection") Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\test.mdb" Set RecSet = Server.CreateObject("ADODB.Recordset") %>

Här är koden jag försökte med, men som inte fungerar:

<% Visa = "SELECT SUM(123) AS sumID FROM todo" Set objRS = objCon.Execute(strSQL) Response.Write("Summan av talen är" & objRS("sumID")) Set objRS = Nothing RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic %>

Tack på förhand!

Visa signatur
Permalänk
Medlem

dim hej: hej = 0

do until rs.eof
hej = hej + rs("123")
rs.movenext
loop

kanske

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av mirza
dim hej: hej = 0

do until rs.eof
hej = hej + rs("123")
rs.movenext
loop

kanske

Hmm... får inte den till att fungera heller

- - -
F.ö. så behöver (ska) inte sista raden i "mitt förslag" vara med... den RecSet.Open ....

Inget annat förslag?

Visa signatur
Permalänk
Hedersmedlem

Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\test.mdb" Set RS = Server.CreateObject("ADODB.Recordset") SQL = "SELECT [123] FROM [todo]" RS.Open SQL, Conn, adOpenStatic, adLockOptimistic ' ovanstående adOpen och det kräver nog att adovbs.inc är inkluderad. amount = 0 Do Until RS.EOF = True amount = amount + RS("123") - 0 RS.MoveNext Loop RS.Close Conn.Close Set RS = Nothing Set Conn = Nothing

Det är ju ganska exakt som mirza skrivit, men det borde funka..

Permalänk
Medlem

tänkte inte på hans sql-sträng =/ förmodligen den...

Permalänk
Medlem

Får följande fel med Grillcliffs kod:

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access]Allmänt fel Det går inte att öppna registernyckeln 'Temporary (volatile) Jet DSN for process 0x80c Thread 0x6ac DBC 0x18a0014 Jet'.
/test/test2.asp, line 5

Den här raden:

Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\test.mdb"

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Sandberg
Får följande fel med Grillcliffs kod:

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access]Allmänt fel Det går inte att öppna registernyckeln 'Temporary (volatile) Jet DSN for process 0x80c Thread 0x6ac DBC 0x18a0014 Jet'.
/test/test2.asp, line 5

Den här raden:

Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\test.mdb"

Det brukar tyda på att man fyllt i fel sökväg till datavasen eller att man inte har rätt rättigheter i den mappen.

Så här gör du för att räkna poster:

Do while NOT rs.EOF nummer = 0 nummer = nummer + rs("fält") rs.MoveNext Loop

Permalänk
Medlem

Om du får problem med sökvägen till databasen, så prova att använda MapPath-metoden

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/test.mdb")

och se till att du har rätt rättigheter på katalogen db och test.mdb

Visa signatur

Intel C2D E6400 @ 2.13GHz || Zalman CNPS9500LED • Gigabyte GA-965P-DS3 v.3 || Corsair TWIN2X 6400 DDR2 2x1GB || PowerColor Radeon X1900XT 256MB GDDR3 || Hiper Type-M 580W 18dB || Seagate Barracuda 7200.10 320GB SATA2 16MB 7200RPM

Permalänk
Medlem

gagg, är du säker på att nummer = 0 ska vara inne i loopen?

Permalänk
Medlem

Fråga mig inte varför, hur eller... vad som helst, men NU funkar Grillclifs förslag.
Har inte ändrat på något sen jag försökte innan... mysko.
Men i varje fall, stort tack Grillcliff och ni andra som hjälpte mig!

Visa signatur
Permalänk
Medlem

Två förslag som fungerar nu:

1.

<%

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\test.mdb"
Set RS = Server.CreateObject("ADODB.Recordset")

SQL = "SELECT [123] FROM [todo]"
RS.Open SQL, Conn, adOpenStatic, adLockOptimistic

summa = 0

Do Until RS.EOF = True

summa = summa + RS("123") - 0

RS.MoveNext
Loop

Response.Write("Summan av talen är " & (summa))

RS.Close
Conn.Close

Set RS = Nothing
Set Conn = Nothing

%>

2. (Med användning av system-dsn)

<%

Set objConn = Server.CreateObject ("ADODB.Connection")
objConn.Open "test"
strSQL = "SELECT SUM([123]) AS sumID FROM todo"

Set objRS = objConn.Execute(strSQL)

Response.Write("Summan av talen är " & objRS(0))

objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = nothing
%>

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av mirza
gagg, är du säker på att nummer = 0 ska vara inne i loopen?

HAHAHA! Va duktig jag är
Dagens tabbe

Permalänk
Medlem

heh det värsta är ändå när jag glömmer rs.movenext

Permalänk
Medlem

Sandberg >>
Do Until RS.EOF = True känns ganska onödigt.

Eftersom RS.EOF returnerar just True (det är ju det du jämför mot) så kan du ju direkt skriva Do Until RS.EOF istället för att kolla om sant = sant och isåfall returnera sant.

Visa signatur

Peter Löfås <plo@alternativet.nu>
Linköpings Tekniska Högskola (Y-Linjen)