Avatar billede izemate Nybegynder
29. januar 2006 - 17:23 Der er 20 kommentarer og
1 løsning

læg tal sammen

Hejsa.
Jeg vil gerne ha lavet et script som ligger tal sammen og viser procent!..

Jeg har en database som ser således ud:

DB.mdb
/type/
[Vmax][Maxpower][Bilgalleri][sogemaskiner]
  1
          1
                                  1
                    1

hver gang nogen fx vælger vmax bliver der tilføjet et 1 tal!

Jeg skal så ha lavet et script som ligger alle 1'erne sammen i Vmax kategorien, alle i maxpower kategorien osv.

Det skal også være en funktion der regner ud af hvor mange procent Vmax udgør iforhold til de andre og omvendt..

Håber i forstår
På forhånd tak
Avatar billede nielle Nybegynder
29. januar 2006 - 20:12 #1
Noget i denne stil?

sql = "SELECT Sum(Vmax) AS VmaxSum, Sum(Maxpower) AS MaxpowerSum, Sum(Bilgalleri) AS BilgalleriSum, Sum(sogemaskiner) AS sogemaskinerSum FROM [type]"
Set rs = Conn.Execute(sql)

VmaxSum = CInt(rs("VmaxSum"))
MaxpowerSum = CInt(rs("MaxpowerSum"))
BilgalleriSum = CInt(rs("BilgalleriSum"))
sogemaskinerSum = CInt(rs("sogemaskinerSum"))

totalSum = VmaxSum + MaxpowerSum + BilgalleriSum + sogemaskinerSum

Response.Write "Vmax: Antal:" & VmaxSum & ", Procent: " & (VmaxSum * 100.0/totalSum) & "%<br>"
Response.Write "Maxpower: Antal:" & MaxpowerSum & ", Procent: " & (MaxpowerSum * 100.0/totalSum) & "%<br>"
Response.Write "Bilgalleri: Antal:" & BilgalleriSum & ", Procent: " & (BilgalleriSum * 100.0/totalSum) & "%<br>"
Response.Write "sogemaskinerSum: Antal:" & sogemaskinerSum & ", Procent: " & (sogemaskinerSum * 100.0/totalSum) & "%"
Avatar billede izemate Nybegynder
29. januar 2006 - 20:15 #2
nielle > tror du har fat i noget af det rigtige.. jeg er ikke en haj til ASP.. så måske du ville gøre så koden var lige til at smide op på serveren og køre ?
Avatar billede nielle Nybegynder
29. januar 2006 - 20:37 #3
Uden at kende mere til dit system, og hvordan det er sat op, så er det lidt af et skud i tåen... Men prøv da dette:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
ConnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("DB.mdb")

Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ConnStr

sql = "SELECT Sum(Vmax) AS VmaxSum, Sum(Maxpower) AS MaxpowerSum, Sum(Bilgalleri) AS BilgalleriSum, Sum(sogemaskiner) AS sogemaskinerSum FROM [type]"
Set rs = Conn.Execute(sql)

VmaxSum = CInt(rs("VmaxSum"))
MaxpowerSum = CInt(rs("MaxpowerSum"))
BilgalleriSum = CInt(rs("BilgalleriSum"))
sogemaskinerSum = CInt(rs("sogemaskinerSum"))

totalSum = VmaxSum + MaxpowerSum + BilgalleriSum + sogemaskinerSum

Response.Write "Vmax: Antal:" & VmaxSum & ", Procent: " & (VmaxSum * 100.0/totalSum) & "%<br>"
Response.Write "Maxpower: Antal:" & MaxpowerSum & ", Procent: " & (MaxpowerSum * 100.0/totalSum) & "%<br>"
Response.Write "Bilgalleri: Antal:" & BilgalleriSum & ", Procent: " & (BilgalleriSum * 100.0/totalSum) & "%<br>"
Response.Write "sogemaskinerSum: Antal:" & sogemaskinerSum & ", Procent: " & (sogemaskinerSum * 100.0/totalSum) & "%"

rs.Close
Set rs = Nothing

Conn.Close
Set Conn = Nothing
%>
Avatar billede izemate Nybegynder
29. januar 2006 - 20:57 #4
Hejsa. jeg får en fejl?

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/dtj/stat.asp, line 10


Jeg har været inde og tilføjet 2 mere..

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
ConnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")

Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ConnStr

sql = "SELECT Sum(Vmax) AS VmaxSum, Sum(MAXpower) AS MAXpowerSum, Sum(Bilgalleri) AS BilgalleriSum, Sum(Bilbasen) AS BilbasenSum, Sum(Autoatlas) AS AutoatlasSum, Sum(sogemaskine) AS sogemaskineSum FROM [type]"
Set rs = Conn.Execute(sql)

VmaxSum = CInt(rs("VmaxSum"))
MAXpowerSum = CInt(rs("MAXpowerSum"))
BilgalleriSum = CInt(rs("BilgalleriSum"))
BilbasenSum = CInt(rs("BilbasenSum"))
AutoatlasSum = CInt(rs("AutoatlasSum"))
sogemaskineSum = CInt(rs("sogemaskineSum"))

totalSum = VmaxSum + MAXpowerSum + BilgalleriSum + BilbasenSum + AutoatlasSum + sogemaskineSum

Response.Write "Vmax: Antal:" & VmaxSum & ", Procent: " & (VmaxSum * 100.0/totalSum) & "%<br>"
Response.Write "MAXpower: Antal:" & MAXpowerSum & ", Procent: " & (MAXpowerSum * 100.0/totalSum) & "%<br>"
Response.Write "Bilgalleri: Antal:" & BilgalleriSum & ", Procent: " & (BilgalleriSum * 100.0/totalSum) & "%<br>"
Response.Write "Bilbasen: Antal:" & BilbasenSum & ", Procent: " & (BilbasenSum * 100.0/totalSum) & "%<br>"
Response.Write "Autoatlas: Antal:" & AutoatlasSum & ", Procent: " & (AutoatlasSum * 100.0/totalSum) & "%<br>"
Response.Write "sogemaskineSum: Antal:" & sogemaskineSum & ", Procent: " & (sogemaskineSum * 100.0/totalSum) & "%"

rs.Close
Set rs = Nothing

Conn.Close
Set Conn = Nothing
%>

Hvis du har brug for databasen må du sige til..
Avatar billede izemate Nybegynder
29. januar 2006 - 20:59 #5
du kan hente access databasen her:
www.media4.dk/dtj/db.mdb
Avatar billede nielle Nybegynder
29. januar 2006 - 21:06 #6
Hmm, jeg kan desværre ikke åbne din database...

Spørgsmål:

1) Hvad hedder tabellen som dine data ligger i?
2) Hvilken datatype har du brugt for dine felter Vmax, MAXpower, Bilgalleri, osv?
Avatar billede izemate Nybegynder
29. januar 2006 - 21:15 #7
Jeg skriver det lige helt præcis :-)

Database navn : db.mdb
type
[Id][MAXpower][Vmax][Bilgalleri][Bilbasen][Autoatlas][Sogemaskine]


Sådan ser databasen ud, mere du vil vide ?
Avatar billede nielle Nybegynder
29. januar 2006 - 21:22 #8
1) Et "type" navnet på tabellen?
2) Er f.eks. feltet MAXpower et talfelt, eller et tekstfelt, eller noget helt andet?
Avatar billede izemate Nybegynder
29. januar 2006 - 22:00 #9
hmm jeg har ikke defineret nogen felt type for nogen af dem? skal jeg sætte dem alle til talfelt eller ?
Avatar billede nielle Nybegynder
29. januar 2006 - 22:06 #10
Hvis du ikke selv har defineret nogen type på felterne så er de tekst-felter - det er nemlig den automatiske type. Det stemmer også overens med fejlbeskeden - man kan nemlig ikke tage Sum() på en tekst.

Ja, det bedste ville være hvis du ændre dem fra at være af typen "Tekst" til "Tal". Men tag lige en sikkerhedskopi af databasen før at du gør det.
Avatar billede izemate Nybegynder
30. januar 2006 - 16:31 #11
Hejsa.
NU har jeg ændret til tal! og nu virker det..
nu har jeg bare det problem at den kode jeg bruger til at "skrive" med ikke virker

her er koden :

<%
    '---- CursorTypeEnum Values ----
    Const adOpenForwardOnly = 0
    Const adOpenKeyser = 1
    Const adOpenDynamic = 2
    Const adOpenStatic = 3

    '---- LockTypeEnum Values ----
    Const adLockReadOnly = 1
    Const adLockPessimistic = 2
    Const adLockOptimistic = 3
    Const adLockBatchOptimistic = 4

    response.buffer = true
    con= "Provider=Microsoft.Jet.OleDB.4.0; Data Source=" & Server.MapPath("db.mdb")

    if request.querystring = "write" then

    sql = "SELECT * FROM type WHERE (id=0) "

    set rs = server.createobject ("adodb.recordset")
    rs.locktype = adlockoptimistic
    rs.cursortype = adopendynamic
    rs.open sql, con
    rs.addnew
        rs ("Vmax") = trim(request.form("formVmax"))
        rs ("MAXpower") = trim(request.form("formMAXpower"))
        rs ("Bilgalleri") = trim(request.form("formBilgalleri"))
        rs ("Autoatlas") = trim(request.form("formAutoatlas"))
        rs ("Sogemaskine") = trim(request.form("formSogemaskine"))
        rs ("Andet") = trim(request.form("formAndet"))           
        rs.update
        rs.close
        set rs = nothing
       
    %>


Jeg får denne fejl:



Provider error '80020005'

Type mismatch.

/dtj/popup.asp, line 27

det svare til linien med rs ("MAXpower") = trim(request.form("formMAXpower"))
Men den virkede fint før så tror ikke den fejler nok..

På forhånd tak
Avatar billede nielle Nybegynder
30. januar 2006 - 16:36 #12
Ret alle dine strenge til heltal før at du indsætter dem. Det gør du f.eks. ved at ændre:

rs ("Vmax") = trim(request.form("formVmax"))

- til:

rs("Vmax") = CInt(trim(request.form("formVmax")))

- og på samme måde for dens "søskene".
Avatar billede nielle Nybegynder
30. januar 2006 - 16:43 #13
Nej, det er nok desværre ikke gjordt med det. Problemet er at nu da felterne er talfelre så kan man ikke indsætte den tomme streng sådan som du hidtil har gjort det. I stedet skal du indsætte 0 (eller helt lade være med at indsætte noget).

For at indsætte 0, skal sådan en linje som:

rs ("Vmax") = trim(request.form("formVmax"))

- ændres til:

Vmax = Trim(Request.Form("formVmax"))
If Vmax = "" Then Vmax = 0
rs("Vmax") = Vmax

- og tilsvarende for de andre.
Avatar billede izemate Nybegynder
30. januar 2006 - 16:49 #14
okay jeg prøver lige lidt senere.. og lige en sidste lille ting.. når den viser procent viser den alt for mange decimaler med ? bare den viser fx 11,2% vil det være fint.. ikke 11,6666667% ;-)

PÅ forhånd tak
Avatar billede nielle Nybegynder
30. januar 2006 - 16:55 #15
Funktionen Round() skulle kunne klare den:

Response.Write "Vmax: Antal:" & VmaxSum & ", Procent: " & Round(VmaxSum * 100.0/totalSum, 1) & "%<br>"

1-tallet angiver at der rundes af til 1 decimal.
Avatar billede nielle Nybegynder
06. februar 2006 - 18:20 #16
Har du fået afprøvet det?
Avatar billede nielle Nybegynder
20. februar 2006 - 18:59 #17
??
Avatar billede izemate Nybegynder
10. juni 2006 - 16:35 #18
virker.. smider i ikke lige et svar så i kan få point??
Avatar billede nielle Nybegynder
10. juni 2006 - 19:56 #19
Svar :^)
Avatar billede nielle Nybegynder
19. juni 2006 - 17:57 #20
Det er vist rent taktisk kun mig som har kommenteret på denne her ;^)
Avatar billede nielle Nybegynder
19. juni 2006 - 19:46 #21
Tak for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester