/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Hvorfor får jeg en data type fejl?
Fra : Claus Skaarup \(Arbe~


Dato : 11-06-07 09:21

Når jeg kalder min side med : index.asp?pid=kn07&dto=12-10-2007

og sætter: showdate = request.querystring("dto")

Så får jeg en data type mismatch, når jeg henter elementer i min tabel på
følgende måde:

if showdate < "1" then
kult2007 = "SELECT * FROM uge4207 where Type = '2007'" & " order by Dato"
else
kult2007 = "SELECT * FROM uge4207 where Dato = '12-10-2007'"
end if
set kn07 = conn.execute(kult2007)

Hvis jeg udskriver kn07("dato") skriver den som forventet: 12-10-2007, så
hvorfor H..... virker det så ikke? "Dato"-feltet er et tid-og-dato-felt med
det rigtige format.

Den præcise fejl lyder:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria
expression.

/kn07.asp, line 44

På forhånd tak for hjælp.

Mvh. Claus



 
 
Claus Skaarup \(Arbe~ (11-06-2007)
Kommentar
Fra : Claus Skaarup \(Arbe~


Dato : 11-06-07 10:24


"Claus Skaarup (Arbejde)" <claus@limfjordsteatret.fejl> skrev i en
meddelelse news:466d05a8$0$224$edfadb0f@dread15.news.tele.dk...
> Når jeg kalder min side med : index.asp?pid=kn07&dto=12-10-2007
>
> og sætter: showdate = request.querystring("dto")
>
> Så får jeg en data type mismatch, når jeg henter elementer i min tabel på
> følgende måde:
>
> if showdate < "1" then
> kult2007 = "SELECT * FROM uge4207 where Type = '2007'" & " order by Dato"
> else

*****nedenstående linie skulle selvf. se sådan ud:

> kult2007 = "SELECT * FROM uge4207 where Dato =" & showdate

*****

> end if
> set kn07 = conn.execute(kult2007)
>
> Hvis jeg udskriver kn07("dato") skriver den som forventet: 12-10-2007, så
> hvorfor H..... virker det så ikke? "Dato"-feltet er et tid-og-dato-felt
> med det rigtige format.
>
> Den præcise fejl lyder:
> Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
> [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria
> expression.
>
> /kn07.asp, line 44
>
> På forhånd tak for hjælp.
>
> Mvh. Claus
>
Mvh. Claus



Jørn Andersen (11-06-2007)
Kommentar
Fra : Jørn Andersen


Dato : 11-06-07 20:55

On Mon, 11 Jun 2007 11:23:32 +0200, "Claus Skaarup \(Arbejde\)"
<claus@limfjordsteatret.fejl> wrote:

>"Claus Skaarup (Arbejde)" <claus@limfjordsteatret.fejl> skrev i en
>meddelelse news:466d05a8$0$224$edfadb0f@dread15.news.tele.dk...
>> Når jeg kalder min side med : index.asp?pid=kn07&dto=12-10-2007
>>

Der er mange faldgruber i din kode - den første er her:
>> og sætter: showdate = request.querystring("dto")

Hvordan sikrer du dig, at det er en gyldig dato?

>> Så får jeg en data type mismatch, når jeg henter elementer i min tabel på
>> følgende måde:

Den næste er her:
>> if showdate < "1" then
Hvad er formålet med denne If?
Den giver True, hvis showdate = "12-10-2007"
- men False, hvis showdate = "01-10-2007"

>> kult2007 = "SELECT * FROM uge4207 where Type = '2007'" & " order by Dato"
>> else
>
>*****nedenstående linie skulle selvf. se sådan ud:
>
>> kult2007 = "SELECT * FROM uge4207 where Dato =" & showdate

- som så giver en Sql-streng, som ser sådan ud:
"SELECT * FROM uge4207 where Dato =12-10-2007"

- men den skulle se sådan ud:
"SELECT * FROM uge4207 where Dato = #12-10-2007#"

- så den skal ændres til:
kult2007 = "SELECT * FROM uge4207 where Dato = #" & showdate & "#"

Om det så vil give dig det rigtige resultat er endda ikke helt sikkert -
det afhænger af, om din ASP-side og din database bruger samme sprog.

Jeg vil generelt anbefale at sikre, at de varibale man bruger har en
fast datatype, dvs. at det der skal være en dato også faktisk er en dato
+ at man navngiver sine varibale, så det fremgår hvilken dtatype, den
indeholder.
Det kan man sikre ved at "type-caste" - fx:
datShowDate = CDate(showdate)

Brug så en dato-til-Sql-funktion til at indsætte i SQL-strengen:
<url: http://www.asp-faq.dk/article/?id=98>
- så kommer du også ud over at skulle tage hensyn til evt.
sprog-forskelle mellem dit ASP og din database.

Det kan godt være, at det tager lidt ekstra tid i starten, men det
tjener sig ind i længden.


Good luck!

--
Jørn Andersen,
Brønshøj

Claus Skaarup (11-06-2007)
Kommentar
Fra : Claus Skaarup


Dato : 11-06-07 22:40


"Jørn Andersen" <jorn@jorna.dk> skrev i en meddelelse
news:is7r63h7v8u486j9fktknidmrpv0klihmn@4ax.com...
> On Mon, 11 Jun 2007 11:23:32 +0200, "Claus Skaarup \(Arbejde\)"
> <claus@limfjordsteatret.fejl> wrote:
>
>>"Claus Skaarup (Arbejde)" <claus@limfjordsteatret.fejl> skrev i en
>>meddelelse news:466d05a8$0$224$edfadb0f@dread15.news.tele.dk...
>>> Når jeg kalder min side med : index.asp?pid=kn07&dto=12-10-2007
>>>
>
> Der er mange faldgruber i din kode - den første er her:
>>> og sætter: showdate = request.querystring("dto")
>
> Hvordan sikrer du dig, at det er en gyldig dato?
>
Det drejer sig kun om 10 datoer fra 12.-21. oktober, så de får hver en
(manuelt skrevet) url, der hedder "...?dto=dd-mm-åååå".

>>> Så får jeg en data type mismatch, når jeg henter elementer i min tabel
>>> på
>>> følgende måde:
>
> Den næste er her:
>>> if showdate < "1" then
> Hvad er formålet med denne If?

Det er et forsøg på at få systemet til at vise alle poster, hvis der ikke er
defineret en dato (dto) i url'en. Det virker sådan set fint lige p.t.

> Den giver True, hvis showdate = "12-10-2007"
> - men False, hvis showdate = "01-10-2007"
>
OK. Det kunne være et problem, men er det heldigvis ikke lige i denne
sammenhæng.

>>> kult2007 = "SELECT * FROM uge4207 where Type = '2007'" & " order by
>>> Dato"
>>> else
>>
>>*****nedenstående linie skulle selvf. se sådan ud:
>>
>>> kult2007 = "SELECT * FROM uge4207 where Dato =" & showdate
>
> - som så giver en Sql-streng, som ser sådan ud:
> "SELECT * FROM uge4207 where Dato =12-10-2007"
>
> - men den skulle se sådan ud:
> "SELECT * FROM uge4207 where Dato = #12-10-2007#"
>
> - så den skal ændres til:
> kult2007 = "SELECT * FROM uge4207 where Dato = #" & showdate & "#"
>
> Om det så vil give dig det rigtige resultat er endda ikke helt sikkert -
> det afhænger af, om din ASP-side og din database bruger samme sprog.
>
Jeg TROR det vil virke. Det vil vise sig i morgen, når jeg møder på arbejde


> Jeg vil generelt anbefale at sikre, at de varibale man bruger har en
> fast datatype, dvs. at det der skal være en dato også faktisk er en dato
> + at man navngiver sine varibale, så det fremgår hvilken dtatype, den
> indeholder.
> Det kan man sikre ved at "type-caste" - fx:
> datShowDate = CDate(showdate)
>
> Brug så en dato-til-Sql-funktion til at indsætte i SQL-strengen:
> <url: http://www.asp-faq.dk/article/?id=98>
> - så kommer du også ud over at skulle tage hensyn til evt.
> sprog-forskelle mellem dit ASP og din database.
>
> Det kan godt være, at det tager lidt ekstra tid i starten, men det
> tjener sig ind i længden.
>
Det er rigtigt. Det er også en god måde at lære på, at man skal arbejde lidt
mere med koden end strengt nødvendigt.

> Good luck!
>
Tak. Og endnu en gang tak for hjælpen Jørn. Jeg lærer noget nyt hver gang du
har været der

Mvh. Claus
- stadig nybegynder, men det hjælper for hver dag



Søg
Reklame
Statistik
Spørgsmål : 177547
Tips : 31968
Nyheder : 719565
Indlæg : 6408797
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste