webForumDet fria alternativet

Räkna mil...

ASP

12 svar · 185 visningar · startad av Hägglund

Medlem sedan juni 200137 inlägg
Frågan#1

Jag har gjort en liten databas där det var tänkt att olika bilägare skall knappa in mätarställningen på sin bil varje månad. Det är sedan tänkt att den bilansvarige skall kunna dra ut information på hur långt varje bil har rullat de senaste sex månaderna.

Någon som har förslag på hur jag skall gå till väga? Jag har försökt följande:

	i = 0
	n = 0

	Dim miltre(20)

	Do until rs.eof

	if i = 0 then
		milett = rs("mileage")
		i = i+1
		
	else
		if miltva <> rs("mileage") AND n=0 then
			miltva = rs("mileage")
			miltre(n) = milett - miltva
			n = n+1
		else
			miltre(n) = miltva - milett
			n = n+1
			
		end if
		
		i = o
	    
	
	end if
	
	rs.movenext
	loop
	
	'response.write miltva & milett & n

	miltre(n) = miltva - milett

	n = 0

%>
    
    <tr>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=rs("Vehicle_ID")%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(5)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(4)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(3)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(2)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(1)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(0)%></td>

Jag har funderat ett tag på det här nu, men jag förstår inte hur jag skall göra, nu får jag tal som är helt mongo...

OBS! Det är alltså inte mätarställningen som man skall se här, utan det är hur många mil bilen har rullat...

Tack!!

------------------
Insanes numquam moriuntur.

Medlem sedan dec. 200012 464 inlägg
#2
Dim milett,miltre(20),Vehicle_Id,i

i = 0
Vehicle_ID = rs("Vehicle_ID")
Do until rs.eof

if i > 0 then 
   miltre(i-1) = rs("milage") - milett
end if
milett = rs("milage")
rs.movenext
i = i + 1
if i > 5 then exit do
loop

%>

<tr>
<td bgcolor="#FFFFFF" align="center" width="50"><%=Vehicle_ID%></td>
<td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(5)%></td>
<td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(4)%></td>
<td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(3)%></td>
<td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(2)%></td>
<td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(1)%></td>
<td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(0)%></td>

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 200137 inlägg
#3

Huurrmm...
Testade detta, men får ett fel meddelande som säger att antingen är EOF eller BOF Sant...märkligt, får när jag skriver ut SQL strängen så finns det ju "grejor" där i variablarna...

Ich bin sehr konfunderad...

------------------
Insanes numquam moriuntur.

[Redigerat av Hägglund den 28 sep 2001]

Medlem sedan dec. 200012 464 inlägg
#4

Hur ser hela din kod ut (alltså inkliusive sql-satser och ado) och på vilken rad får du felet?

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 200137 inlägg
#5

Så här ser det ut ungefär, eller rätt så exakt så här rättare sagt:

<!--#include file="../data/DBdata_fleet.inc"-->
<%
	station = Request.Form("station")
	period = Request.Form("period")
	startdatum = DateAdd("m",-6,period)
	response.write startdatum

strSQL = "SELECT tbl_mileage.Vehicle_ID, tbl_mileage.mileage, tbl_mileage.datum, tbl_mileage.period, tbl_current_situation.stat FROM tbl_mileage LEFT JOIN tbl_current_situation ON tbl_mileage.Vehicle_ID = tbl_current_situation.reg WHERE tbl_mileage.period Between '"&startdatum&"' And '"&period&"' AND tbl_current_situation.stat = '"&station&"' AND tbl_mileage.Vehicle_ID = 'SBG366' ORDER BY tbl_mileage.Vehicle_ID, tbl_mileage.period DESC"

response.write strSQL
rs.open strSQL, DB

%>

<html>

<head>
<title>View your mileage</title>
</head>

<body>

<div align="center">
  <center>
  <table border="0" cellpadding="0" cellspacing="0" width="837">
    <tr>
      <td bgcolor="#9C0000" width="1670" colspan="11">
        <p align="center"><font color="#A8A8A8" face="Arial" size="1">Montly
        kilometers driven</font></td>
    </tr>
  </center>
  <tr>
    <td bgcolor="#9C0000" align="center" width="50">
      <p align="center"><font color="#A8A8A8" size="1">Reg</font></td>
    <center>
    <td bgcolor="#9C0000" align="center" width="50"><font color="#A8A8A8" size="1">6</font></td>
    <td bgcolor="#9C0000" align="center" width="50"><font color="#A8A8A8" size="1">5</font></td>
    <td bgcolor="#9C0000" align="center" width="50"><font color="#A8A8A8" size="1">4</font></td>
    <td bgcolor="#9C0000" align="center" width="50"><font color="#A8A8A8" size="1">3</font></td>
    <td bgcolor="#9C0000" align="center" width="50"><font color="#A8A8A8" size="1">2</font></td>
    <td bgcolor="#9C0000" align="center" width="50"><font color="#A8A8A8" size="1">1</font></td>
    <td bgcolor="#9C0000" align="center" width="100"><font color="#A8A8A8" size="1">Current</font></td>
    <td bgcolor="#9C0000" align="center" width="100"><font color="#A8A8A8" size="1">Set</font></td>
    <td bgcolor="#9C0000" align="center" width="106"><font color="#A8A8A8" size="1">Start date</font></td>
    <td bgcolor="#9C0000" align="center" width="106"><font color="#A8A8A8" size="1">End date</font></td>
    </tr>
<%

Dim milett,miltre(20),Vehicle_Id,i

                                        i = 0
                                        Vehicle_ID = rs("Vehicle_ID")
                                        Do until rs.eof

                                        if i > 0 then 
                                        miltre(i-1) = rs("milage") - milett
                                        end if
                                        milett = rs("milage")
                                        rs.movenext
                                        i = i + 1
                                        if i > 5 then exit do
                                        loop

                                        %>

    
    <tr>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=rs("Vehicle_ID")%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(5)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(4)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(3)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(2)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(1)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50"><%=miltre(0)%></td>
      <td bgcolor="#FFFFFF" align="center" width="50">&nbsp;</td>
      <td bgcolor="#FFFFFF" align="center" width="100">&nbsp;</td>
      <td bgcolor="#FFFFFF" align="center" width="100">&nbsp;</td>
      <td bgcolor="#FFFFFF" align="center" width="106">&nbsp;</td>
      <td bgcolor="#FFFFFF" align="center" width="106">&nbsp;</td>
    </tr>
<%	'Next
	
	rs.close
	db.close
%>
  </table>
  </center>
</div>

</body>

</html>

Felet kommer på rad 56 och ser ut så här:
SELECT tbl_mileage.Vehicle_ID, tbl_mileage.mileage, tbl_mileage.datum, tbl_mileage.period, tbl_current_situation.stat FROM tbl_mileage LEFT JOIN tbl_current_situation ON
tbl_mileage.Vehicle_ID = tbl_current_situation.reg WHERE tbl_mileage.period Between '2000-07-01' And '2001-01-01' AND tbl_current_situation.stat = 'ARN' AND tbl_mileage.Vehicle_ID =
'SBG366' ORDER BY tbl_mileage.Vehicle_ID, tbl_mileage.period DESC

ADODB.Field error '800a0bcd'

                               Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record. 

                                                         /gw/stk/Fleet/odometer_report.asp, line 56 

Mycket text blev det här...det feta är resultatet av Response.Write strSQL...

------------------
Insanes numquam moriuntur.

Medlem sedan dec. 200012 464 inlägg
#6

Problemet är nog den här raden


<td bgcolor="#FFFFFF" align="center" width="50"><%=rs("Vehicle_ID")%></td>

Då den ligger efter din loop där du går igenom recordsetet så har du kommit till eof när den kodraden utförs.

I min kodsnutt så använde jag variablen Vehicle_id istället.

I och för sig så bör du lägga till en kontroll på att du får något resultat direkt efter rs.open

rs.open strSQL, DB
if rs.eof then
   response.write "Finns inget data <br>"
else
'din nuvarande kod
end if

I din sql-sats så har du

ORDER BY tbl_mileage.Vehicle_ID, tbl_mileage.period DESC

det borde väl vara


ORDER BY tbl_mileage.Vehicle_ID, tbl_mileage.period ASC

så att du får de lägsta perioderna först.

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 200137 inlägg
#7

Nää, jag blir så trött nu...har ändrat fram och tillbaka, bytt ut Vehicle_ID mot en variabel, men det fungerar helt enkelt inte. Har även lagt till kontrollen, och nu får jag ju upp "Det finns ingen data".. tusan!

------------------
Insanes numquam moriuntur.

Medlem sedan dec. 200012 464 inlägg
#8

Det är alltså din SQL-sats som spökar.

Varför har du en left join samtidigt som du ställer ett villkor på en kolumn i den högra tabellen?

[Redigerat av LarsG den 01 okt 2001]

Medlem sedan juni 200137 inlägg
#9

Jag skall försöka förklara, men jag måste ge lite bakgrund först :-)

Min chef är bland annat ansvarig för bil flottan på ett budföretag. Han vill med hjälp av denna rapport planera för nya inköp av bilar, då måste man veta hur långt varje bil rullar osv osv.
Så långt är det inga problem, men som vanligt finns det ett men, med stort "M", så..Men:
I och med att vissa bilar rullar kortare resp längre än vad det är tänkt så måste man mycket enkelt kunna ändra vart bilen hör hemma. Därför har jag gjort en tabell som innehåller alla bilar och vilken station dom tillhör. Det finns tretton stationer.
Min rapport fungerar som så att när du skall uppdatera din mätarställning så hämtas bilarna till din station ur en tabell, men värdet sparas i en annan. Samma sak gäller när man skall dra ut rapporter. En dropdown visar vilka stationer som finns tillgängliga, samt vilka perioder. på den aktuella sidan plockas alla bilar fram ur tabell nummer två som matchar bilarna och stationen i tabell ett....hängde du med? :-)

------------------
Insanes numquam moriuntur.

[Redigerat av Hägglund den 01 okt 2001]

Medlem sedan juli 20003 825 inlägg
#10

... Between '2000-07-01' And '2001-01-01' AND ...

Har du datum i textform!? Det borde vara i datumform och i så fall ska du använda brädgårdar i stället för enkelfjumparna.

... Between #2000-07-01# And #2001-01-01# AND ...

Medlem sedan juni 200137 inlägg
#11

Har ändrat SQL:en lite, nu ser den ut som följer:

strSQL = "SELECT tbl_current_situation.stat, tbl_mileage.Vehicle_ID, tbl_mileage.mileage, tbl_mileage.period FROM tbl_mileage LEFT JOIN tbl_current_situation ON tbl_mileage.Vehicle_ID = tbl_current_situation.reg WHERE (((tbl_current_situation.stat)='"&station&"') AND ((tbl_mileage.period) Between #"&startdatum&"# And #"&period&"# )) ORDER BY tbl_mileage.Vehicle_ID, tbl_mileage.period"

------------------
Insanes numquam moriuntur.

[Redigerat av Hägglund den 01 okt 2001]

[Redigerat av Hägglund den 01 okt 2001]

Medlem sedan dec. 200012 464 inlägg
#12

Vilken databashanterare använder du?

# för datum är specifikt för Access.

Som sagt, du får försöka testa ut sql-satsen separat.

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 200137 inlägg
#13

Jag använder Access. Jag har testat SQL:en i en access query, då får jag ut reg.nummer som hör till stationen mellan de perioder som jag har angivit, men när jag testar samma sql på .asp sidan så blir det pannkaka...
Jag får nog ta mig en allvarlig funderare tror jag....

------------------
Insanes numquam moriuntur.

303 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
159 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
158 ms — ändringar (db)