Hejsan!!! Testa såhär.... Varför vill du ha summan i databasen? Emma, du har helt rätt ang. att man inte BÖR lagra redundanta data i en databas, skillnaden mellan bör och ska är tyvärr ganska stor.. Tack Daniel för tipset.Summera värden
Jag uppdaterar en databas med 3 st olika värden. (se koden nedan)
Frågan är att jag skulle vilja summera dessa 3 värden och uppdatera
databasen med summan av dessa värden i en separat kolumn?
Är det någon som kan lösa det på ett smidigt sätt?
Tack på förhand!
/Micke
----------------------------------
<% response.buffer = true %>
<%
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../fpdb/avvikelse.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN
%>
<%
sql = "UPDATE avvikelserapport SET arbkost = '" & request.form("arbkost") & "'"
sql = sql & ", matkost= '" & request.form("matkost") &"'"
sql = sql & ", ovrkost= '" & request.form("ovrkost") &"'"
sql = sql & "WHERE id = " & request("id")
Set rs = Conn.Execute (sql)
Conn.Close
%>
<% response.redirect ("atgarda_bekraftelse.asp")%>
----------------------------------------Sv: Summera värden
Dim Summa
Summa = val(request.form("arbkost")) + val(request.form("matkost")) + val(request.form("ovrkost"))
sql = "UPDATE avvikelserapport SET arbkost = '" & request.form("arbkost") & "'"
sql = sql & ", matkost= '" & request.form("matkost") &"'"
sql = sql & ", ovrkost= '" & request.form("ovrkost") &"'"
sql = sql & ", summa= '" & Summa &"'"
sql = sql & "WHERE id = " & request("id") Sv: Summera värden
Om du läser på om normalformerna (http://databases.about.com, tror
jag att det är - den finns under databas-rubriken om inget annat...) så
är ett av tabuna att inte ha redundanta data, dvs data som går att få
fram på annat sätt. En summering är därför bättre att göra i en query
vid de tillfällena man behöver den - på så sätt vet man att man alltid
får det aktuella datat. Det är lätt hänt att glömma uppdatera ett fält
nämligen.
/EmmaSv: Summera värden
Man kan tjäna extremt mycket prestanda på att lagra redundant data i en databas om databasen används för mycket läsning och lite uppdatering. Man kan också tjäna prestanda på att bryta andra normaliseringsregler, naturliga nycklar är inte alltid det optimala sättet att lagra information på ur prestandasynpunkt.
Exempel (ett teoretiskt exempel):
Du har ett många till många förhållande mellan personer och adresser, detta gör att hela adressen (låt oss säga sju fält) är unik och därför är lämplig som nyckel, personen är också unik (på låt oss säga personnummer som är lagrat som varchar). Förhållandet byggs då med med åtta stycken alfanumeriska fält och det är ju uppenbart att det inte är bra då man lika gärna kunde använda två stycken ID-kolumner (numeriska) som nycklar och sätta unika index på de naturliga nyclarna. Två numeriska värden går nämligen snabbare för datorn (databasservern) att tyda av och koppla med och på så sätt har du en ökning i prestanda som är mycket märkbar.
Vad det gäller redundant data så kan man ta exemplet med sammansatta namn. I ett CRM-system lagras oftast information som förnamn, efternamn och företagsnamn lagras i varsin kolumn i samma tabell, men du vill kunna söka efter förnamn, efternamn och företag i ett sökfält. Detta gör att det enklaste och snabbaste sättet att lösa detta problem på är att dubbellagra dessa värden sammanslaget i en kolumn för att slippa skriva en avancerad söklogik.Sv: Summera värden
Men jag fick inte det att funka.
När ja skrev så här fick jag felmeddelande.
Dim Summa
Summa = val(request.form("arbkost")) + val(request.form("matkost")) + val(request.form("ovrkost"))
Inkompatibla typer: 'val'
Och då tog jag bort "val" men fick då felmeddelande.
Dim Summa
Summa = (request.form("arbkost")) + (request.form("matkost")) + (request.form("ovrkost"))
Microsoft OLE DB Provider for ODBC Drivers fel '80040e57'
[Microsoft][Drivrutin för ODBC Microsoft Access]Numeriskt värde utanför intervallet (null)
Vad kan detta vara för fel?
/Micke