|
| Kombinere dato og tid Fra : Skunsen |
Dato : 08-09-08 21:24 |
|
Hej!
Jeg har en fotodagbog, hvor jeg registrerer dato og tid for
indlæg (med mulighed for at redigere datoen) i hver sit felt via
dateserial og timeserial i en MS Access database
Jeg vil gerne kombinere felterne Dato og Tid til et felt med
standarddatoformat, så jeg kan sortere på det.
Kan det lade sig gøre?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Skunsen (08-09-2008)
| Kommentar Fra : Skunsen |
Dato : 08-09-08 22:10 |
|
Her er koden:
<%
'-- Date/TimeToSql start --
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ")"
End Function
Function TimeToSql(Value)
TimeToSql = "TimeSerial(" & Hour(Value) & ", " & _
Minute(Value) & ", " & _
Second(Value) & ")"
End Function
' -- DateTimeToSql slut --
strSQL = "SELECT * FROM indhold"
Set rsindhold = Conn.Execute (strSQL)
Do while not rsindhold.eof
DatDato = rsindhold("dato")
'DatDato = DateToSQL(StrDato)
DatTid = rsindhold("tid")
'DatTid = TimeToSQL(StrTid)
strID = rsindhold("indhold_ID")
DatDatoTid = DatDato + DatTid
strSQL2 = "Update indhold set "
strSQL2 = strSQL2 & "datotitel= " & DatDatoTid & " "
strSQL2 = strSQL2 & "Where indhold_ID = " & strID & ""
conn.execute(strSQL2)
rsindhold.movenext
loop
%>
... og denne fejlmeddelelse
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing
operator) in query expression '25-05-2007 13:02:00'.
/maj07/test.asp, line 35
På forhånd tak
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (09-09-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 09-09-08 16:25 |
|
On 08 Sep 2008 21:09:47 GMT, Skunsen <skunsen@gmail.com> wrote:
>DatDatoTid = DatDato + DatTid
Hertil er det vist OK. Men du har brug for at omfrme din dato-tid-værdi
til noget forståeligt SQL. Du kan fx bruge funktionen her:
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") + " & _
"TimeSerial(" & Hour(Value) & ", " & _
Minute(Value) & ", " & _
Second(Value) & ")"
End Function
strSqlDatDatoTid = DateToSql(DatDatoTid)
strSQL2 = "UPDATE indhold SET " & _
" datotitel= " & strSqlDatDatoTid & _
" WHERE indhold_ID = " & strID
conn.execute(strSQL2)
Good luck!
--
Jørn Andersen,
Brønshøj
| |
Skunsen (09-09-2008)
| Kommentar Fra : Skunsen |
Dato : 09-09-08 21:33 |
|
> >DatDatoTid = DatDato + DatTid
>
> Hertil er det vist OK. Men du har brug for at omfrme din dato-tid-værdi
> til noget forståeligt SQL. Du kan fx bruge funktionen her:
>
> Function DateToSql(Value)
> DateToSql = "DateSerial(" & Year(Value) & ", " & _
> Month(Value) & ", " & _
> Day(Value) & ") + " & _
> "TimeSerial(" & Hour(Value) & ", " & _
> Minute(Value) & ", " & _
> Second(Value) & ")"
> End Function
>
> strSqlDatDatoTid = DateToSql(DatDatoTid)
>
> strSQL2 = "UPDATE indhold SET " & _
> " datotitel= " & strSqlDatDatoTid & _
> " WHERE indhold_ID = " & strID
>
> conn.execute(strSQL2)
Det giver følgende fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
på linien med conn.execute(strSQL2)
Jeg har ændret linien " WHERE indhold_ID = " & strID
til " WHERE indhold_ID = " & strID & ""
men får samme fejl
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Skunsen (09-09-2008)
| Kommentar Fra : Skunsen |
Dato : 09-09-08 21:47 |
|
> > > DatDatoTid = DatDato + DatTid
> >
> > Function DateToSql(Value)
> > DateToSql = "DateSerial(" & Year(Value) & ", " & _
> > Month(Value) & ", " & _
> > Day(Value) & ") + " & _
> > "TimeSerial(" & Hour(Value) & ", " & _
> > Minute(Value) & ", " & _
> > Second(Value) & ")"
> > End Function
> >
> > strSqlDatDatoTid = DateToSql(DatDatoTid)
> >
> > strSQL2 = "UPDATE indhold SET " & _
> > " datotitel= " & strSqlDatDatoTid & _
> > " WHERE indhold_ID = " & strID
> >
> > conn.execute(strSQL2)
>
> Jeg har ændret linien " WHERE indhold_ID = " & strID
> til " WHERE indhold_ID = " & strID & ""
>
> men får samme fejl
Hvis jeg udskriver StrQL2 får jeg følgende:
UPDATE indhold SET datotitel= DateSerial(2007, 5, 25) + TimeSerial(13, 2, 0)
WHERE indhold_ID = 1
Der er en post i tabellen indhold med indhold_ID = 1
og feltet i databasen står til dato/tid
Hvis jeg prøver følgende
if isdate(StrSQLDatoTid) = true then
response.write("True")
else
response.write("False")
end if
response.end
bliver resultatet False
Hvis jeg prøver det samme på DatDatoTid (istedet for StrSQLDatoTid)
bliver resultatet True
SUK :o/
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (09-09-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 09-09-08 22:25 |
|
On 09 Sep 2008 20:46:37 GMT, Skunsen <skunsen@gmail.com> wrote:
>Hvis jeg udskriver StrQL2 får jeg følgende:
>UPDATE indhold SET datotitel= DateSerial(2007, 5, 25) + TimeSerial(13, 2, 0)
>WHERE indhold_ID = 1
Ser rigtigt ud.
>Der er en post i tabellen indhold med indhold_ID = 1
- og indhold_ID er et tal-felt?
>og feltet i databasen står til dato/tid
>
>Hvis jeg prøver følgende
>
>if isdate(StrSQLDatoTid) = true then
>response.write("True")
>else
>response.write("False")
>end if
>response.end
>
>bliver resultatet False
Skal det også.
"DateSerial(2007, 5, 25) + TimeSerial(13, 2, 0)" er en streng, som ikke
(uden videre) kan blive til en dato.
>Hvis jeg prøver det samme på DatDatoTid (istedet for StrSQLDatoTid)
>bliver resultatet True
Korrekt - datDatoTid er en dato.
>SUK :o/
Et skud i tågen: Jeg har ikke styr på reserverede ord i Access (fx
indhold -?). Du kunne prøve at sætte alle feltnavne i
firkant-paranteser:
UPDATE [indhold] SET [datotitel] = ...
WHERE [indhold_ID] = 1
Et nyttigt link: Hvis du vil have hjælp til fejlnumre, så prøv:
<url: http://www.aspfaq.com/>
- bare copy-paste nummeret ind i søgefeltet.
Good luck!
--
Jørn Andersen,
Brønshøj
| |
Jørn Andersen (09-09-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 09-09-08 22:04 |
|
On 09 Sep 2008 20:32:34 GMT, Skunsen <skunsen@gmail.com> wrote:
>> strSqlDatDatoTid = DateToSql(DatDatoTid)
>>
>> strSQL2 = "UPDATE indhold SET " & _
>> " datotitel= " & strSqlDatDatoTid & _
>> " WHERE indhold_ID = " & strID
>>
>> conn.execute(strSQL2)
>
>Det giver følgende fejl:
>Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
>[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
>
>på linien med conn.execute(strSQL2)
>
>Jeg har ændret linien " WHERE indhold_ID = " & strID
>til " WHERE indhold_ID = " & strID & ""
>
>men får samme fejl
1) Prøv at udskrive SQL-strengen ved at indsætte:
Response.Write strSQL2
Response.End
- *før*:
conn.execute(strSQL2)
2) Er du sikker på, at der er dato/tid-værdier for alle poster?
3) Da det er en Access-database, så er det måske lettere bare at
downloade den og så lave kombinationen af de to felter direkte i
databasen - ?
(Du har jo ikke brug for adskilte felter fremover, så det er vel en
éngangs-foreteelse ...)
Good luck!
--
Jørn Andersen,
Brønshøj
| |
Skunsen (09-09-2008)
| Kommentar Fra : Skunsen |
Dato : 09-09-08 22:19 |
|
> >> strSQL2 = "UPDATE indhold SET " & _
> >> " datotitel= " & strSqlDatDatoTid & _
> >> " WHERE indhold_ID = " & strID & " "
Jeg lavede StrID = Cint(StrID)
og fik igen en fejlmeddelelse med too few parameters expected 1
Så kiggede jeg nærmere på koden og nu sidder jeg så med røde ører!!!
datotitel skulle have været datotid! :o/
Så nu virker det
Tusind tak for hjælpen
Jeg blev en del klogere!!!
Her er den færdige kode, der virker hvis der skulle være andre med lignende
problem
<%
'-- Date/TimeToSql start --
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") + " & _
"TimeSerial(" & Hour(Value) & ", " & _
Minute(Value) & ", " & _
Second(Value) & ")"
End Function
' -- DateTimeToSql slut --
strSQL = "SELECT * FROM indhold"
Set rsindhold = Conn.Execute (strSQL)
Do while not rsindhold.eof
DatDato = rsindhold("dato")
DatTid = rsindhold("tid")
strID = rsindhold("indhold_ID")
indholdID = Cint(strID)
datDatoTid = DatDato + DatTid
StrSQLDatoTid = DateToSql(DatDatoTid)
strSQL2 = "UPDATE indhold SET " & _
" datotid= " & StrSQLDatoTid & _
" WHERE indhold_ID = " & indholdID & " "
conn.execute(strSQL2)
rsindhold.movenext
loop
%>
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (09-09-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 09-09-08 22:28 |
|
On 09 Sep 2008 21:18:39 GMT, Skunsen <skunsen@gmail.com> wrote:
>Jeg lavede StrID = Cint(StrID)
>og fik igen en fejlmeddelelse med too few parameters expected 1
>
>Så kiggede jeg nærmere på koden og nu sidder jeg så med røde ører!!!
>
>datotitel skulle have været datotid! :o/
Passer meget godt med fejlkoden:
This error is due to one of the following things:
1. A field name was spelled incorrectly.
2. One or more of the values was blank.
3. You tried to insert the wrong datatype (e.g. surrounded a numeric
value with quotes, or forgot to put quotes around a string).
<url:
http://tutorials.aspfaq.com/8000xxxxx-errors/why-do-i-get-80040e10-errors.html>
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
|
|