Avatar billede totalpc Seniormester
08. juni 2005 - 10:07 Der er 6 kommentarer og
1 løsning

Hjælp til beregning

Hej

Jeg har noget script hvor jeg kan indtaste kilometer og liter på min bil og så kan jeg se hvor meget den kører på literen skrevet ud i en graf. Men der går noget galt i beregningen. Kan i gennemskue det ?

<%
'Dimension variables
Dim adoCon          'Holds the Database Connection Object
Dim rsAddComments  'Holds the recordset for the new record to be added
Dim strSQL          'Holds the SQL query to query the database

'Fjerner mellemrum og specille tegn fra felterne.
strBil              = Trim(Replace(replace(Request.Form("bil"),"'",""),"<","&lt;"))
strKilometer            = Trim(Replace(replace(Request.Form("kilometer"),"'",""),"<","&lt;"))
strLiter            = Trim(Replace(replace(Request.Form("liter"),"'",""),"<","&lt;"))

'Create an ADO connection object
Set adoCon = Server.CreateObject("ADODB.Connection")

'Set an active connection to the Connection object using a DSN-less connection
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("bildata.mdb")

'Create an ADO recordset object
Set rsAddComments = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
'strSQL = "SELECT * FROM bildata;"
'strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by int(kilometer) desc"
strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by id desc"

'Set the cursor type we are using so we can navigate through the recordset
rsAddComments.CursorType = 2

'Set the lock type so that the record is locked by ADO when it is updated
rsAddComments.LockType = 3

'Open the recordset with the SQL query
rsAddComments.Open strSQL, adoCon

response.write strkilometer
response.write rsAddComments("kilometer")
response.write strLiter

forbrug = (int(strKilometer)-int(rsAddComments("kilometer")))/strLiter

'Tell the recordset we are adding a new record to it
rsAddComments.AddNew

'Add a new record to the recordset
rsAddComments.Fields("bil")                  = Strbil
rsAddComments.Fields("kilometer")             = Strkilomter
rsAddComments.Fields("liter")                 = Strliter
rsAddComments.Fields("forbrug")             = FormatNumber(forbrug,2)

'Write the updated recordset to the database
rsAddComments.Update

'Reset server objects
rsAddComments.Close
Set rsAddComments = Nothing
Set adoCon = Nothing

'Redirect to the guestbook.asp page
Response.Redirect "graf3.asp"
%>

fejlen er :

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'FormatNumber'

/benzin/add_db.asp, line 48

og det jeg indtaster er :

i kilometer : 157945
og i liter : 36,37

jeg har prøvet at undlade , og udskifte med . men ved ik hvad der er galt!
Avatar billede fennec Nybegynder
08. juni 2005 - 11:15 #1
medmindre Fields("forbrug") er et tekst felt, vil jeg anbefale at du bruger round() i stedet for formatnumber(). Hvis tallet er over 1000 kommer der nemlig både punktum og komma i tallet:

rsAddComments.Fields("forbrug") = round(forbrug,2)

Desuden er det jo ikke nødvendigt at gemme forbrug. Du kan til en hver tid beregne forbruget ud fra km og liter, som du har gemt i databasen.
Avatar billede totalpc Seniormester
08. juni 2005 - 11:33 #2
ja, men så skal jeg jo lave beregningen hver gang jeg viser min graf ik ?
Avatar billede totalpc Seniormester
08. juni 2005 - 11:36 #3
nu prøver jeg med din linie og den giver :
Microsoft VBScript runtime error '800a005e'

Invalid use of Null: 'round'

/benzin/add_db.asp, line 48
Avatar billede fennec Nybegynder
08. juni 2005 - 12:53 #4
forbrug ar altså NULL. Så må der være noget galt i denne linje:
forbrug = (int(strKilometer)-int(rsAddComments("kilometer")))/strLiter

Er en af disse variabler 0, NULL eller tekst??
Avatar billede totalpc Seniormester
08. juni 2005 - 13:38 #5
øøhh..
kilometer er tal og liter er tal
Er måske ik helt med?

Tabellen har følgende :

ID - autonummerering
Bil - Tekst
Liter - Tal
Forbrug - Tal
kilometer - Tal

Jeg bruger 3 filer :

add_db.asp til at gemme indtastninger

<%
'Dimension variables
Dim adoCon          'Holds the Database Connection Object
Dim rsAddComments  'Holds the recordset for the new record to be added
Dim strSQL          'Holds the SQL query to query the database

'Fjerner mellemrum og specille tegn fra felterne.
strBil              = Trim(Replace(replace(Request.Form("bil"),"'",""),"<","&lt;"))
strKilometer            = Trim(Replace(replace(Request.Form("kilometer"),"'",""),"<","&lt;"))
strLiter            = Trim(Replace(replace(Request.Form("liter"),"'",""),"<","&lt;"))

'Create an ADO connection object
Set adoCon = Server.CreateObject("ADODB.Connection")

'Set an active connection to the Connection object using a DSN-less connection
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("bildata.mdb")

'Create an ADO recordset object
Set rsAddComments = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
'strSQL = "SELECT * FROM bildata;"
'strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by int(kilometer) desc"
strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by id desc"

'Set the cursor type we are using so we can navigate through the recordset
rsAddComments.CursorType = 2

'Set the lock type so that the record is locked by ADO when it is updated
rsAddComments.LockType = 3

'Open the recordset with the SQL query
rsAddComments.Open strSQL, adoCon

response.write strkilometer
response.write rsAddComments("kilometer")
response.write strLiter

forbrug = (int(strKilometer)-int(rsAddComments("kilometer")))/strLiter

'Tell the recordset we are adding a new record to it
rsAddComments.AddNew

'Add a new record to the recordset
rsAddComments.Fields("bil")                  = Strbil
rsAddComments.Fields("kilometer")             = Strkilomter
rsAddComments.Fields("liter")                 = Strliter
rsAddComments.Fields("forbrug") = round(forbrug,2)
'rsAddComments.Fields("forbrug")             = FormatNumber(forbrug,2)

'Write the updated recordset to the database
rsAddComments.Update

'Reset server objects
rsAddComments.Close
Set rsAddComments = Nothing
Set adoCon = Nothing

'Redirect to the guestbook.asp page
Response.Redirect "graf3.asp"
%>

Indtast.asp til nye indtastninger:
<%
'Dimension variables
Dim adoCon          'Holds the Database Connection Object
Dim rsAddComments  'Holds the recordset for the new record to be added
Dim strSQL          'Holds the SQL query to query the database

'Fjerner mellemrum og specille tegn fra felterne.
strBil              = Trim(Replace(replace(Request.Form("bil"),"'",""),"<","&lt;"))
strKilometer            = Trim(Replace(replace(Request.Form("kilometer"),"'",""),"<","&lt;"))
strLiter            = Trim(Replace(replace(Request.Form("liter"),"'",""),"<","&lt;"))

'Create an ADO connection object
Set adoCon = Server.CreateObject("ADODB.Connection")

'Set an active connection to the Connection object using a DSN-less connection
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("bildata.mdb")

'Create an ADO recordset object
Set rsAddComments = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
'strSQL = "SELECT * FROM bildata;"
'strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by int(kilometer) desc"
strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by id desc"

'Set the cursor type we are using so we can navigate through the recordset
rsAddComments.CursorType = 2

'Set the lock type so that the record is locked by ADO when it is updated
rsAddComments.LockType = 3

'Open the recordset with the SQL query
rsAddComments.Open strSQL, adoCon

response.write strkilometer
response.write rsAddComments("kilometer")
response.write strLiter

forbrug = (int(strKilometer)-int(rsAddComments("kilometer")))/strLiter

'Tell the recordset we are adding a new record to it
rsAddComments.AddNew

'Add a new record to the recordset
rsAddComments.Fields("bil")                  = Strbil
rsAddComments.Fields("kilometer")             = Strkilomter
rsAddComments.Fields("liter")                 = Strliter
rsAddComments.Fields("forbrug") = round(forbrug,2)
'rsAddComments.Fields("forbrug")             = FormatNumber(forbrug,2)

'Write the updated recordset to the database
rsAddComments.Update

'Reset server objects
rsAddComments.Close
Set rsAddComments = Nothing
Set adoCon = Nothing

'Redirect to the guestbook.asp page
Response.Redirect "graf3.asp"
%>

og graf3.asp til at vise graferne/resultaterne
<%
'Dimension variables
Dim adoCon          'Holds the Database Connection Object
Dim rsAddComments  'Holds the recordset for the new record to be added
Dim strSQL          'Holds the SQL query to query the database

'Fjerner mellemrum og specille tegn fra felterne.
strBil              = Trim(Replace(replace(Request.Form("bil"),"'",""),"<","&lt;"))
strKilometer            = Trim(Replace(replace(Request.Form("kilometer"),"'",""),"<","&lt;"))
strLiter            = Trim(Replace(replace(Request.Form("liter"),"'",""),"<","&lt;"))

'Create an ADO connection object
Set adoCon = Server.CreateObject("ADODB.Connection")

'Set an active connection to the Connection object using a DSN-less connection
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("bildata.mdb")

'Create an ADO recordset object
Set rsAddComments = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
'strSQL = "SELECT * FROM bildata;"
'strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by int(kilometer) desc"
strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by id desc"

'Set the cursor type we are using so we can navigate through the recordset
rsAddComments.CursorType = 2

'Set the lock type so that the record is locked by ADO when it is updated
rsAddComments.LockType = 3

'Open the recordset with the SQL query
rsAddComments.Open strSQL, adoCon

response.write strkilometer
response.write rsAddComments("kilometer")
response.write strLiter

forbrug = (int(strKilometer)-int(rsAddComments("kilometer")))/strLiter

'Tell the recordset we are adding a new record to it
rsAddComments.AddNew

'Add a new record to the recordset
rsAddComments.Fields("bil")                  = Strbil
rsAddComments.Fields("kilometer")             = Strkilomter
rsAddComments.Fields("liter")                 = Strliter
rsAddComments.Fields("forbrug") = round(forbrug,2)
'rsAddComments.Fields("forbrug")             = FormatNumber(forbrug,2)

'Write the updated recordset to the database
rsAddComments.Update

'Reset server objects
rsAddComments.Close
Set rsAddComments = Nothing
Set adoCon = Nothing

'Redirect to the guestbook.asp page
Response.Redirect "graf3.asp"
%>

Håber du kan hjælpe
Avatar billede totalpc Seniormester
08. juni 2005 - 13:42 #6
øh..jeg har lige mistet overblikket over min egen kode hehe..
Men der er sgu da noget galt i add_db.asp for hvad er rsaddcomment("kilometer") Den er jo tom. Åh nej. Kan du hjælpe ? ;o)
Avatar billede totalpc Seniormester
09. juni 2005 - 12:43 #7
argh...det er garanteret det her mail problem...skidt. Skriv til mig hvis du skal have point eller kan hjælpe mere
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