webForumDet fria alternativet

Summering av data som är utvalt

Databaser & SQLur Databashanterare & SQL

13 svar · 344 visningar · startad av Skogiz

Medlem sedan feb. 200395 inlägg
Frågan#1

Hej!

Jag har satt ihop ett enkelt och litet tidrappoteringssystem.

När man listar alla poster får man en tabell med

id - Datum - Kund - Signatur - Utfört arbete - Antal timmar

Det jag nu undrar är om man kan gör en urvalssida där man bara listar poster från en användare (att detta går vet jag) men finns det någon finurlig funktion att sumera <antal timmar> för just den signaturen (användaren) jag väljer att lista.

Lite tips hur man kan gå till väga är välkommet!

Tack :)

Medlem sedan feb. 200112 078 inlägg
#2

Jag är ingen SQL-expert, men nåt sånt här kanske?

"SELECT u.id, u.datum, u.kund, u.signatur, u.utfort_arbete, u.antal_timmar, " & _
"(SELECT SUM(antal_timmar) FROM users WHERE userId = " & request.form("userId") & ") as SummaTimmar " & _
"FROM users u " & _
WHERE u.userId = " & request.form("userId") & ""

PS. Du borde döpa om fälten Utfört Arbete och Antal Timmar, inga mellanslag eller svenska tecken. Jag omnamngav dem ovan.

Medlem sedan dec. 200012 464 inlägg
#3

Flyttad från ASP

Medlem sedan feb. 200395 inlägg
#4

Tack för SQL-strängen men hur bör SQL-satsen se ut på en asp-sida eller funkar det att köra din sats rätt upp och ner?

Och hur rappoterar jag ut resultatet på asp-sidan?

Medlem sedan feb. 200112 078 inlägg
#5

Jahapp, jag visste att vi inte skulle flytta tråden, Lars. ;)

set conn = server.createobject("adodb.connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("databas.mdb")
SQL = "SELECT u.id, u.datum, u.kund, u.signatur, u.utfort_arbete, u.antal_timmar, " & _
"(SELECT SUM(antal_timmar) FROM users WHERE userId = " & request.form("userId") & ") as SummaTimmar " & _
"FROM users u " & _
WHERE u.userId = " & request.form("userId") & ""
set rs = conn.execute(SQL)

while not rs.eof 
   response.write rs("kund") & "<br>"
   rs.movenext
wend

set rs = nothing
set conn = nothing
Medlem sedan feb. 200395 inlägg
#6

Ja jag blev lite förvånad när tråden flyttades men jag har mig själv att skylla då jag var otydlig vad det gällde... ;)

I alla fall

Jag har satt in den här koden

<%
  'Sök användare ur tabellen tid och summera antalet timmar
  Dim strSQL
  strSQL = "SELECT tid.Datum, tid.Kund, tid.Antal_timmar, tid.Signature, tid.Work, " & _
  "SELECT SUM(antal_timmar) FROM tid WHERE Signature = " & Request.Form("insig") & ") as SummaTimmar " & _
  "FROM tid " & _ 
  WHERE tid.Signature = " & Request.Form("insig") & ""

  'Skapa en instans av objektet Recordset och hämta info
  Dim objRS
  Set objRS = Server.CreateObject("ADODB.Recordset")
  objRS.Open strSQL, objConn
  %>

men det blir fel...

Microsoft VBScript compilation error '800a0401'

Expected end of statement

/webrapport.asp, line 14

WHERE "tid.Signature = " & Request.Form("insig") & ""
------^

Tack på förhand.

/Fredrik

Medlem sedan feb. 200112 078 inlägg
#7
set conn = server.createobject("adodb.connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("databas.mdb")
SQL = "SELECT u.id, u.datum, u.kund, u.signatur, u.utfort_arbete, u.antal_timmar, " & _
"(SELECT SUM(antal_timmar) FROM users WHERE userId = " & request.form("userId") & ") as SummaTimmar " & _
"FROM users u " & _
"WHERE u.userId = " & request.form("userId") & ""
set rs = conn.execute(SQL)

while not rs.eof 
   response.write rs("kund") & "<br>"
   rs.movenext
wend

set rs = nothing
set conn = nothing
Medlem sedan feb. 200395 inlägg
#8

Använder följande kod

Dim Conn
  Dim SQL

  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\Databaser\time_report.mdb;"  
  'Sök användare ur tabellen tid och summera antalet timmar
  SQL = "SELECT tid.Datum, tid.Kund, tid.Antal_timmar, tid.Signature, tid.Work, " & _
  "(SELECT SUM(antal_timmar) FROM tid WHERE Signature = " & Request.Form("insig") & ") as SummaTimmar " & _
  "FROM tid tid " & _
  "WHERE tid.Signature = " & Request.Form("insig") & ""
  set rs = Conn.execute(SQL)

  While not rs.eof
     Response.Write rs("kund") & "<br>"
     rs.movenext
  Wend

Min databas heter som ni ser time_report.mdb och och tabellen heter tid och fälten i databasen Räknare, Datum, Kund, Antal_timmar, Signature och Work

När i exemplet ovan antar jag att t.ex u.datum ska vara tid.Datum och så vidare...(?)

I alla fall när jag använder min kod får jag detta felet

"Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/webrapport.asp, line 19 "

Rad 19 är

set rs = Conn.execute(SQL)

Medlem sedan dec. 2000399 inlägg
#9
Dim Conn
  Dim SQL

  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\Databaser\time_report.mdb;"  
  'Sök användare ur tabellen tid och summera antalet timmar
  SQL = "SELECT tid.Datum, tid.Kund, tid.Antal_timmar, tid.Signature, tid.Work, " & _
  "(SELECT SUM(antal_timmar) FROM tid WHERE Signature = " & Request.Form("insig") & ") as SummaTimmar " & _
  "FROM [b]tid[/b] " & _
  "WHERE tid.Signature = " & Request.Form("insig") & ""
  set rs = Conn.execute(SQL)

  While not rs.eof
     Response.Write rs("kund") & "<br>"
     rs.movenext
  Wend
Medlem sedan feb. 200395 inlägg
#10

Tyvärr kvarstår

Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/webrapport.asp, line 19

Även efter att jag tagit bort det dubbla "tid" :/

Medlem sedan dec. 2000399 inlägg
#11

Hur ser den ut om du skriver ut den?

Response.Write SQL
'set rs = Conn.execute(SQL)
Medlem sedan feb. 200395 inlägg
#12

Utskriften blir så här

SELECT tid.Datum, tid.Kund, tid.Antal_timmar, tid.Signature, tid.Work, (SELECT SUM(antal_timmar) FROM tid WHERE Signature = FS) as SummaTimmar FROM tid WHERE tid.Signature = FS
Medlem sedan dec. 2000399 inlägg
#13

Ok, då borde detta fungera bättre:

Dim Conn
  Dim SQL

  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\Databaser\time_report.mdb;"  
  'Sök användare ur tabellen tid och summera antalet timmar
  SQL = "SELECT tid.Datum, tid.Kund, tid.Antal_timmar, tid.Signature, tid.Work, " & _
  "(SELECT SUM(antal_timmar) FROM tid WHERE Signature = [b]'" & Request.Form("insig") & "'"[/b]) as SummaTimmar " & _
  "FROM tid " & _
  "WHERE tid.Signature = [b]'" & Request.Form("insig") & "'"[/b]
  set rs = Conn.execute(SQL)

  While not rs.eof
     Response.Write rs("kund") & "<br>"
     rs.movenext
  Wend

Signature är någon slags sträng och måste därför jämföras så här: Signature = 'värde'

Medlem sedan feb. 200395 inlägg
#14

Ah tack!!!

Nu fungerar det. Nu får jag ut resultat iaf. Nu gäller det bara att få till visningen på rätt sätt men det borde vara något enklare :)

Tack än en gång för all hjälp!

/Fredrik

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