Avatar billede cesil Nybegynder
23. oktober 2002 - 16:19 Der er 14 kommentarer og
1 løsning

datokonvertering

Jeg får den her fejl:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.

I den her linie:
RS.Open SQL, dbc, adopenstatic

Min Sql-sætning ser således ud:

SELECT *
FROM Events
WHERE (StartDate <= '07-01-02') AND (EndDate >= '07-01-02') OR
  (StartDate < '07-01-02') AND (RecType = 'weekly') AND (RecEndDate > '07-01-02') AND (RecWeeklyDay = 'mandag') OR
  (StartDate < '07-01-02') AND (RecType = 'monthly') AND (RecEndDate > '07-01-02') AND (RecMonthlyDay = '7') OR
  (StartDate < '07-01-02') AND (RecType = 'Yearly') AND (RecEndDate > '07-01-02') AND (RecYearlyDate = '1/7')
ORDER BY StartTime


Når jeg exerkverer min sql sætning i query-analyser får jeg ingen fejl.
Kan nogen gennemskue hvad der er galt?
Avatar billede bennytordrup Nybegynder
23. oktober 2002 - 16:22 #1
Ændr alle datoreferencer til formatet yyyymmdd.
Avatar billede bennytordrup Nybegynder
23. oktober 2002 - 16:23 #2
Hvad mener du med RecYearlyDate = '1/7'?
Avatar billede cesil Nybegynder
23. oktober 2002 - 16:28 #3
Det må du nok spørge om. Det er en kalender jeg har overtaget og skal rette fejl i.
Avatar billede cesil Nybegynder
23. oktober 2002 - 16:39 #4
Det går jo så galt fx her:

ThisMonthsFirstDay = cDate("1/" & Month(theDate) & "/" & Year(theDate))

hvor thedate er: 20021023
Avatar billede bennytordrup Nybegynder
23. oktober 2002 - 18:16 #5
Jeg tror, at det her er i to niveauer.

1. SQL Server. I kommunikationen med SQL Server skal alle datokonstanter være på formen yyyymmdd.

2. Visual Basic. Datoer gemmes i Date variabler, og du bruger Visual Basics egne rutiner til håndtering af dem. Datoer fra recordsets ligger i date variabler.

Hvordan opbygger du din Select i kode? Datokonstanten burde have været 20020701 forudsat, at datoen, der refereres er 1. juli 2002.

theDate skal være af type Date.
Avatar billede cesil Nybegynder
24. oktober 2002 - 08:49 #6
Min SQL er opbygget således:

SQL = "SELECT * FROM Events WHERE StartDate <= '" & theDate & "' AND EndDate >= '" & theDate & "' OR RecType = 'weekly' AND RecEndDate > '" & theDate & "' AND StartDate < '" & theDate & "' AND RecWeeklyDay = '" & DayName & "' OR RecType = 'monthly' AND RecEndDate > '" & theDate & "' AND StartDate < '" & theDate & "' AND RecMonthlyDay = '" & DayNumber & "' OR RecType = 'Yearly' AND RecEndDate > '" & theDate & "' AND StartDate < '" & theDate & "' AND RecYearlyDate = '" & DayWithOutYear & "' ORDER BY StartTime"

set RS=Server.CreateObject("adodb.Recordset")
RS.Open SQL, dbc, adopenstatic

Nu skriver du at thedate skal være at typen date, mener du at jeg skal skrive:
thedate = date(thedate)
Avatar billede bennytordrup Nybegynder
24. oktober 2002 - 08:51 #7
dim theDate as date

theDate = "1-7-2002"

SQL = "SELECT * FROM Events WHERE StartDate <= '" & format$(theDate, "yyyymmdd") & "' AND EndDate >= '" & format$(theDate, "yyyymmdd") & "' OR RecType = 'weekly' AND RecEndDate > '" & format$(theDate, "yyyymmdd") & "' AND StartDate < '" & format$(theDate, "yyyymmdd") & "' AND RecWeeklyDay = '" & DayName & "' OR RecType = 'monthly' AND RecEndDate > '" & format$(theDate, "yyyymmdd") & "' AND StartDate < '" & format$(theDate, "yyyymmdd") & "' AND RecMonthlyDay = '" & DayNumber & "' OR RecType = 'Yearly' AND RecEndDate > '" & format$(theDate, "yyyymmdd") & "' AND StartDate < '" & format$(theDate, "yyyymmdd") & "' AND RecYearlyDate = '" & DayWithOutYear & "' ORDER BY StartTime"

set RS=Server.CreateObject("adodb.Recordset")
RS.Open SQL, dbc, adopenstatic
Avatar billede bennytordrup Nybegynder
24. oktober 2002 - 08:52 #8
Du kan evt. lave en hjælpefunktion:

function SQLServerDate(aDate as Date) as string
  SQLServerDate = format$(aDate, "yyyymmdd")
end function
Avatar billede cesil Nybegynder
24. oktober 2002 - 09:09 #9
Det er asp jeg arbejder i.
Ved du hvordan format$(theDate, "yyyymmdd") ser ud i asp?
Avatar billede bennytordrup Nybegynder
24. oktober 2002 - 09:14 #10
format()?

Det er jo VBScript (så vidt jeg kan se på kodestumperne)
Avatar billede cesil Nybegynder
24. oktober 2002 - 09:21 #11
ihvertfald får jeg følgende fejl:
Invalid character

theDate= format$(theDate, "yyyymmdd")

Uden $ får jeg en Type mismatch: 'format'
Avatar billede bennytordrup Nybegynder
24. oktober 2002 - 09:23 #12
Prøv at læse mit eksempel fra i dat 08:51:47

Du skal ikke tildele resultatet af format$ til theDate.
Avatar billede cesil Nybegynder
24. oktober 2002 - 09:34 #13
Min select ser nu således ud:
SQL = "SELECT * FROM Events WHERE StartDate <= '" & format$(theDate, "yyyymmdd") & "' AND EndDate >= '" & format$(theDate, "yyyymmdd") & "' OR RecType = 'weekly' AND RecEndDate > '" & format$(theDate, "yyyymmdd") & "' AND StartDate < '" & format$(theDate, "yyyymmdd") & "' AND RecWeeklyDay = '" & DayName & "' OR RecType = 'monthly' AND RecEndDate > '" & format$(theDate, "yyyymmdd") & "' AND StartDate < '" & format$(theDate, "yyyymmdd") & "' AND RecMonthlyDay = '" & DayNumber & "' OR RecType = 'Yearly' AND RecEndDate > '" & format$(theDate, "yyyymmdd") & "' AND StartDate < '" & format$(theDate, "yyyymmdd") & "' AND RecYearlyDate = '" & DayWithOutYear & "' ORDER BY StartTime"

Den giver samme fejl som skrevet i kommentaren 09:21:30

Det er asp jeg arbejder med så jeg kan ikke definerer min variabel til være af typen date sådan som du skriver jeg skal gøre.

Thedate er i det her tilfælde: 1/10/2002
Avatar billede bennytordrup Nybegynder
24. oktober 2002 - 10:01 #14
Kan du lave en funktion i asp?

Hvis du kan, kan du lave funktionen til at danne formatet yyyymmdd, og så kalde den funktion ved opbygningen af din SQL i stedet for format.
Avatar billede cesil Nybegynder
24. oktober 2002 - 10:40 #15
Det virker hvis jeg bare sætter thedate til fx at være 20021001, så du har hjulpet rigeligt.
jeg skal nok få en funktion banket sammen.
Tak for hjælpen.
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
Computerworld tilbyder specialiserede kurser i database-management

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