Avatar billede totalpc Seniormester
14. februar 2005 - 09:47 Der er 13 kommentarer og
1 løsning

Hjælp til sql og talberegning.

Hejsa.
Jeg ville lige bikse en side sammen hvor jeg kunne gemme data for mine 2 biler og så beregne hvor langt de kørte på literen. Jeg er så løbet ind i lidt problemer med sql og beregning på tallene.

Min kode til at gemme i databasen ser således ud :

<%
'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;"))
strKilomter            = 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;"


'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

'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

'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"
%>


Jeg ville jo så gerne have at den først finder den sidste kilomterindtastning for den bil der er valgt og kommer via request.form("bil") og herefter laver en beregning hvor den trækker det nye kilomtertal fra det gamle og divider med liter og herefter gemmer det tal i feltet "forbrug" i basen.

Nogle der kan hjælpe mig med det?
Avatar billede eagleeye Praktikant
16. februar 2005 - 15:58 #1
Har du en autonummer kolonne eller noget så man kan være sikker på man får den sidste kilometer indtastning alternativ kan man gøre sådan så den sortere efter kilometer kolonne.

Prøv at rette din SQL fra:
strSQL = "SELECT * FROM bildata;"

Til dette:
strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by int(kilometer) desc"



Samt tilføje en udregning og en kolonne hvor de nye data ligges ind:

forbrug = (int(strKilomter)-int(rsAddComments("kilometer")))/strLiter
rsAddComments.Fields("forbrug") = FormatNumber(forbrug,2)
Avatar billede totalpc Seniormester
17. februar 2005 - 09:20 #2
Jeg har en autonummer der hedder id
Gør det at det bliver nemmere ?
jeg havde selv forstillet mig noget med max(id) men kunne ikke få syntaksen rigtig!
Avatar billede eagleeye Praktikant
17. februar 2005 - 10:05 #3
Ja, men max(id) henter ikke posten med størts id den henter kun kolonnen id. Det ikke fordi det bliver menget nemmere med id.

Men du kan bruger order by id desc. top 1 betyder den kun henter en post og ikke alle poster i databasen. Så prøv at lave SQL sætningen sådan her:

strSQL = "select top 1 * from bildata where bil = '" & strBil & "' order by id desc"
Avatar billede totalpc Seniormester
17. februar 2005 - 11:00 #4
ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/benzin/add_db.asp, line 25


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

Den fejler i den linie ovenover
Avatar billede totalpc Seniormester
17. februar 2005 - 11:16 #5
fandt en fejl..der manglede et 'e' i kilometer...men den fejler stadig!

forbrug = (int(strKilometer)-int(rsAddComments("kilometer")))/strLiter
Avatar billede eagleeye Praktikant
17. februar 2005 - 12:10 #6
Samme fejl eller en ny?
Avatar billede eagleeye Praktikant
17. februar 2005 - 12:11 #7
Hvis det er samme fejl så er det dette rsAddComments("kilometer") som fejler, hedder din kolonne ikke kilometer?
Avatar billede totalpc Seniormester
17. februar 2005 - 12:56 #8
Samme fejl...kopiret direkte fra access basen :
ID
Bil
Liter
Forbrug
Kilometer
jeg fatter det ikke
Avatar billede eagleeye Praktikant
17. februar 2005 - 12:58 #9
Er databasne tom?

Er denne linje:
forbrug = (int(strKilometer)-int(rsAddComments("kilometer")))/strLiter
efter linjen med rsAddComments.Open ?
Avatar billede totalpc Seniormester
17. februar 2005 - 13:01 #10
Sorry....linie skulle jo rykkes ned efter eksekvering af sqlsætningen....damn...det er noget tid siden jeg har rodet med asp :o)
Avatar billede totalpc Seniormester
17. februar 2005 - 13:08 #11
Nu virker det fint....Men resultatet er ikke helt som jeg foventer.

Hvis jeg nu skriver 150400 i kilometer og den i forvejen har 150000 i basen.
Og liter er 37.
Så skulle regnestykket være (150400 - 150000)/37 = 10.81
Men i basen er der nu gemt 1081

Hvorfor det ?
Jeg kan godt se at tallet er der, men hvor er kommaet :D
Avatar billede totalpc Seniormester
17. februar 2005 - 13:50 #12
smid et svar...nu virker det hele og mange tak for hjælpen :o)
Avatar billede eagleeye Praktikant
17. februar 2005 - 13:51 #13
ok ;)
Avatar billede totalpc Seniormester
17. februar 2005 - 15:11 #14
Takker for hjælpen.....
Dejligt at du gad hjælpe :D
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