Avatar billede quarkb Nybegynder
10. januar 2005 - 09:01 Der er 11 kommentarer og
1 løsning

Fejl i sql sætning

Hvad har jeg gjort forkert:

sql = "SELECT TOP 1 * FROM [Aktivitetskalender] WHERE StartDato > '" & StartD & "' Order by StartDato"

Jeg får denne fejl.

Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

/ExtraNet/ExtraNet-10.asp, line 23

Line 23 = rs.Open sql, conn, 3,3
Avatar billede davidfossil Nybegynder
10. januar 2005 - 09:06 #1
Den variable du sætter ind (StartD) er ikke formateret korrekt som en dato?
Jeg kender ikke meget til access, men ville tro datoer skal skrives som yyyy-mm-dd.
Avatar billede fennec Nybegynder
10. januar 2005 - 09:07 #2
Hvilken database bruger du?? Hvis det er Access hjælper det gerne at bruge # omkring datoer:

sql = "SELECT TOP 1 * FROM [Aktivitetskalender] WHERE StartDato > #" & StartD & "# Order by StartDato"
Avatar billede quarkb Nybegynder
10. januar 2005 - 09:10 #3
Hvis jeg fjerner Order by StartDato, finder den ganske som den skal den næste post som er størrer end StartD men ikke sorteret.
Avatar billede davidfossil Nybegynder
10. januar 2005 - 09:21 #4
fennec : det er access...

(Microsoft JET Database Engine error '80040e07')

;o)
Avatar billede fennec Nybegynder
10. januar 2005 - 09:44 #5
davidfossil >>
Er JET ikke bare et mellemlag, som kan skaber forbindelse til mange programmer/databaser (f.eks Access, Excel og MS-SQL)??

quarkb >>
Hvilken type er StartDato gemt som (Tekst eller Datotype)?? Det mærkelige er at det er "Order by StartDato" der åbentbart fejler. Hvad sker der hvis du fjerner WHERE delen, og kun har "Order by StartDato". Fejler den så også??
Avatar billede quarkb Nybegynder
10. januar 2005 - 09:50 #6
StartDato er et datofelt, hvis jeg fjerne WHERE delen, sorter den ok efter StartDato, men så får jeg felter med fra før StartD
StartD er sat til = date
Avatar billede fennec Nybegynder
10. januar 2005 - 10:19 #7
Så de virker enkeltvis, men ikke sammen?? Det har jeg aldrig hørt om før. Prøv lige at udskrive sql'en inden du bruger den.
sql = "SELECT TOP 1 * FROM [Aktivitetskalender] WHERE StartDato > #" & StartD & "# Order by StartDato"
response.write sql
rs.Open sql, conn, 3,3

Der skal måske en response.end ind imellem, for at du kan komme til at se linjen.
Avatar billede quarkb Nybegynder
10. januar 2005 - 10:28 #8
response,write giver dette.
SELECT TOP 1 * FROM [Aktivitetskalender] WHERE StartDato > #09-01-2005# order by StartDato

med denne sætning går den ganske rigtigt videre men, kommer ud med at der ingen poster er, selv om der er poster med nydere dato en 09-01-2005
Avatar billede fennec Nybegynder
10. januar 2005 - 10:40 #9
Det er pga dato formatet (som davidfossil også var inde på i hans første post). Access tager nemlig datoformatet mm-dd-yyyy eller hvis man er heldig yyyy-mm-dd. Du skal derfor have konverteret dine ASP datoer, når du skal bruge dem i SQL. Der bruger jeg denne funktion:

Function ConvertToSqlDate(dato)
dim SQLYear,SQLMonth,SQLDay
  SQLYear = Year(dato)
  SQLMonth = Month(dato)
  SQLDay = Day(dato)
  if SQLDay<10 then
    SQLDay = 0&SQLDay
  end if
  if SQLMonth<10 then
    SQLMonth = 0&SQLMonth
  end if
  ConvertToSqlDate = SQLMonth&"-"&SQLDay&"-"&SQLYear
End Function

sql = "SELECT TOP 1 * FROM [Aktivitetskalender] WHERE StartDato > #" & ConvertToSqlDate(StartD) & "# Order by StartDato"
Avatar billede quarkb Nybegynder
10. januar 2005 - 10:52 #10
1.000 tak fennec, du havde de vise ord med dette, så du får de 60 point.
Avatar billede fennec Nybegynder
10. januar 2005 - 10:57 #11
Jeg synes nu også davidfossil har fortjent nogle. Han var den første til at nævne datoformatet.

.o) <-- One Eyed Jack
Avatar billede quarkb Nybegynder
10. januar 2005 - 11:08 #12
Det er korrekt, men du brugte mere tid på at hlæpe mig til ende så derfor der det dig som modtager point
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