oskarsMedlem sedan nov. 20051 317 inläggJag är för trött för det här nu :(
weekday(Format(#Left(Startdatum,4) &""/""& Left(Right(Startdatum,4),2) &""/""& Right(Startdatum,2)#,'yyyy/mm/dd')
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in date in query expression 'weekday(Format(#Left(Startdatum,4) &[/]& Left(Right(Startdatum,4),2) &[/]& Right(Startdatum,2)#,'yyyy/mm/dd')) = 6 AND NOT K1 = 6'.
/taxi/test.asp, line 19
Jag borde gå och lägga nu istället för att mecka med det här!
EDIT: Jag fick det att funka med Format(#25-07-2008#,'yyyy-mm-dd')... men det är när jag börjar krångla med Left() och det som det knasar ihop sig!
TroxyMedlem sedan mars 20041 505 inläggMåste bara fråga varför du sparar datum och tider som tal?! :P
oskarsMedlem sedan nov. 20051 317 inläggJag kan tyvärr inte skylla på mig själv här. Det är inte min databas :) Funderar på att fixa så att det sparas korrekt. :) Men det är iaf anledningen. Datan kommer först från ett mindre modernt system, sen in i Access :)
PPeter SMedlem sedan dec. 20025 483 inlägg Weekday(CDate(Mid(Startdatum, 5, 2) & "/" & Right(Startdatum, 2) & "/" & Left(Startdatum, 4)), 2)
oskarsMedlem sedan nov. 20051 317 inläggTack så hjärtligt för att du tar dig tid, återigen!
Nu förstår jag även hur du vill att jag ska formatera datumet!
Jag har gjort en grej som kanske underlättar! Jag har gjort om 20070725 till 2007-07-25 i databasen. Mao så står datumen i datumformat... Vilket kanske gör att vi mår bättre?
<%
Session.LCID = 1053
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Starttid = "1400"
Sluttid = "1500"
mittStartdatum = "2008-07-25"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT SUM(iif((Starttid > "&Starttid&" and Starttid < "&Sluttid&") OR (Sluttid > "&Starttid&" and Sluttid < "&Sluttid&") " & _
"OR (Starttid < "&Starttid&" and Starttid < "&Sluttid&" and Startdatum < Slutdatum) OR (Sluttid > "&Starttid&" and Sluttid > "&Sluttid&" and Startdatum < Startdatum),1,0)) " & _
" AS Tal FROM kredit WHERE Startdatum = CDate("&mittStartdatum&") AND NOT K1 = '6'", Connect, 3, 3
Do Until RecSet.EOF
Response.Write Startdatum & " - " & RecSet("Tal")
RecSet.MoveNext
Loop
%>
Jag får bara ut ett "-" på sidan med den koden nu när jag har gjort om datumformatet. Så på något sätt måste väl den skrivas om för datumformatet?
Borde jag göra om klockslagen till riktig tidsformat också? Eller klarar jag mig med bara "1430" i databasen, istället för "14:30"?
Mvh
Oskar
*inlägget är redigerat*
PPeter SMedlem sedan dec. 20025 483 inlägg Har du ändrat datatyp på datumfälten i databasen från tal till datum? Om inte, och du i stället valt strängar, så vore det ännu bättre med datumformat. Och i sådana fall kan du lika gärna slå ihop startdatum med starttid och slutdatum med sluttid -- det vore det allra bästa :)
Att bara byta format från 20070825 till 2007-08-25 ser jag ingen poäng med.
oskarsMedlem sedan nov. 20051 317 inläggDet var som tal först, men nu är det datumformat :) :) :) Ett riktigt sådant! alltså ÅÅÅÅ-MM-DD...
Vill du att jag ska slå ihop så det blir ÅÅÅÅ-MM-DD HH:MM också? Är det svårt att göra direkt i Access?
PPeter SMedlem sedan dec. 20025 483 inlägg Nej, du bör kunna fixa det med en UPDATE - typ:
update
tbl
set
startdatetime = cdate(startdate & " " & left(starttime,2) & ":" & right(starttime,2)),
enddatetime = cdate(slutdatum & " " & left(sluttid, 2) & ":" & right(sluttid,2))
oskarsMedlem sedan nov. 20051 317 inläggAha, ja jo! :) Så sant så.
Men kanske ska skita i att slå ihop dom. Blir krångligare då ... Det funkar väl bra med den frågan du gav mig senast? Fast den måste göras om till datumformat.. Fattar bara inte hur man gör det. Har inte jobbat så mkt med datum i Access... :o :)
PPeter SMedlem sedan dec. 20025 483 inlägg Hur ser koden ut nu som du har problem med?
oskarsMedlem sedan nov. 20051 317 inläggSå här... fast nu funkar det tror jag :l Men vettefan om resultatet som man får fram stämmer. Hur ska jag kunna dubbelkolla det liksom :) Om jag kör frågan så som den är nu får jag fram 91st resultat! Orka räkna igenom datan själv för att få fram det manuellt!
Nått tips där för att va på den säkra sidan?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
</head>
<body>
<%
Session.LCID = 1053
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Starttid = "1100"
Sluttid = "1200"
mittStartdatum = "2007-09-01"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT SUM(iif((Starttid > '"&Starttid&"' and Starttid < '"&Sluttid&"') OR (Sluttid > '"&Starttid&"' and Sluttid < '"&Sluttid&"') " & _
"OR (Starttid < '"&Starttid&"' and Starttid < '"&Sluttid&"' and Startdatum < Slutdatum) OR (Sluttid > '"&Starttid&"' and Sluttid > '"&Sluttid&"' and Startdatum < Slutdatum),1,0)) " & _
"AS Tal FROM edit", Connect, 3, 3
Do Until RecSet.EOF
Response.Write mittStartdatum & " - " & RecSet("Tal")
RecSet.MoveNext
Loop
%>
</body>
</html>
EDIT: La till en bild!
PPeter SMedlem sedan dec. 20025 483 inlägg Kolla ett par datum genom att lägga till 'WHERE startdatum = 20080725'. Alternativt kan du skapa en kopia av databasen och tömma den. Sedan lägger du in ett par datum i taget och ser vad du får för resultat.
Stämmer det så kanske du kan anta att även övriga stämmer :)
oskarsMedlem sedan nov. 20051 317 inläggDet verkar fan stämma, efter att jag gjort en kontroll på en mindre version av databasen.
Förstår inte att den kommer fungera även när den går över dygnsgränserna... men den ska tydligen göra det?
PPeter SMedlem sedan dec. 20025 483 inlägg Enligt mina beräkningar så borde den det. Testa att lägga in några testdatum :bire
oskarsMedlem sedan nov. 20051 317 inläggTestet gick bra :) Verkar fungera!
Nu har jag jag gjort en funktion som ökar Sluttiden med 80%... av vissa anledningar :)
Varför får jag inte göra så här i SQL-frågan: ...OR (addTime(Sluttid) > '"&Starttid&"'...
addTime() är min funktion, men när jag försöker köra den i min SQL-fråga säger den typ att jag har en odefinierad funktion... Dumt tycker jag. Vore väldigt trevligt att få använda den där :)
PPeter SMedlem sedan dec. 20025 483 inlägg Det går inte att göra så eftersom det är Access som exekverar frågan, och i Access värld finns ingen funktion som heter addTime(). Om du vill kunna skriva så där får du skapa en modul i Access i vilken du definierar addTime().
oskarsMedlem sedan nov. 20051 317 inläggÄr detta något som du tror jag kan göra? Eller är det överkurs? Vore rätt gött att ha det så...
Så här ser min funktion ut:
Function addTime(Starttid,Sluttid)
Starttid = (Left(Starttid,2)*60) + Right(Starttid,2)
Sluttid = (Left(Sluttid,2)*60) + Right(Sluttid,2)
' Här räknar vi ut resans längd
Totalt = Sluttid - Starttid
' Här lägger vi till 80% på resan
ResaProcent = Round(Totalt * 1.8,0)
' Nu har vi fått resans längd + 80%
' Här lägger vi till resan+80% på starttiden
HelaResan = Starttid + ResaProcent
' Här räknar vi ut timmarna i decimaltal
HelaResan = Round(HelaResan / 60,2)
' För att få ut minuterna tar jag bort bort siffror från höger och lägger i en variabel
' och lägger till 0, i strängen.
' Det blir problem om det bara är 1st decimal
' Därför måste jag lära mig Split()
' Jag splittar upp decimaltalet i heltal och decimaler
If InStr(HelaResan,",") Then
Minuterna = Split(HelaResan,",")
' Och lägger till 0, innan decimalerna för att få minuterna separerade
Min = "0," & Minuterna(1)
Else
Min = "0," & Min
End If
' För att få ut timmarna tar vi först och tar bort decimalerna från heltalet
Tim = HelaResan - Min
Tim = Round(Tim,0)
' För att få fram minuterna i "riktiga" minuter så gångar vi dom med 60 och avrundar bort decimalerna
Min = Round((Min*60),0)
' För att ordna formatet 0603 (så att det blir en nolla i början av timmarna och minuterna om så behövs)
If Len(Tim) = 1 Then
Tim = "0" & Tim
End If
If Len(Min) = 1 Then
Min = "0" & Min
End If
addTime = Tim & Min
End Function
Det vore ju fint om man kan spara den koden i Access direkt på något sätt?
PPeter SMedlem sedan dec. 20025 483 inlägg Det bör gå alldeles utmärkt. Skapa en ny modul i Access och klistra in ovanstående funktion i kodfönstret. Spara sedan modulen med lämpligt namn och anropa addTime() precis som du gör nu.
oskarsMedlem sedan nov. 20051 317 inläggOkej! Nice!
Ska testa mig på det! Verkar gå rätt fint vad jag sett i Access nu... Det är väl typ ett macro man ska göra? eller nått.. ska testa sen :)
PPeter SMedlem sedan dec. 20025 483 inlägg I den dialog där du väljer mellan tabeller, frågor, formulär m.m. finns även alternativet Moduler :)