Avatar billede killer_r Nybegynder
03. juli 2002 - 14:53 Der er 34 kommentarer og
1 løsning

SQLhjælp - Invalid use of Null

Når jeg laver dette SQL-kald:

set rs = Conn.execute("SELECT * FROM Kalender WHERE Month(CDate([tid2])) = " & Month(tid))

Kommer denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Invalid use of Null

/diverse/hadsten/Kalender.asp, line 225

HVORFOR???
Avatar billede skovtrold Nybegynder
03. juli 2002 - 14:58 #1
Prøv lige at udskrive din sql:
response.write rs
Avatar billede eagleeye Praktikant
03. juli 2002 - 15:00 #2
response.write "SELECT * FROM Kalender WHERE Month(CDate([tid2])) = " & Month(tid)
Avatar billede eagleeye Praktikant
03. juli 2002 - 15:00 #3
rs er et recordset :)
Avatar billede eagleeye Praktikant
03. juli 2002 - 15:08 #4
Hvad indeholder variablen tid ??

Umiddelbart ville jeg tror det ikke var nødvendigt med CDate() omkring..:
set rs = Conn.execute("SELECT * FROM Kalender WHERE Month([tid2]) = " & Month(tid))
Avatar billede jakoba Nybegynder
03. juli 2002 - 15:24 #5
set kommando = "SELECT * FROM Kalender WHERE Month(CDate([tid2])) = " & Month(tid)

set rs = Conn.execute( kommando )
response.write "kommando=" &kommando & "  tid=" & tid

er  tid2 et af de felter du slår op? ellers skal den fortolkes ind i strengen.
Avatar billede tmceu Praktikant
03. juli 2002 - 16:59 #6
Det lyder som om enten tid2 eller tid er tom (null) og dermed vil month funktionen i sidste ende også returnere NULL, således at sammenligningen reelt bliver noget i retning af

SELECT * FROM Kalender WHERE 6=NULL
Avatar billede killer_r Nybegynder
03. juli 2002 - 19:57 #7
variablen tid indeholder en dato.

Der kan måske være noget om det tmceu siger...
Nogen steder i databasen er tid2 (der er tekst-format) nemlig tom...
Hvad gør jeg så det virker alligevel?
Avatar billede killer_r Nybegynder
03. juli 2002 - 19:58 #8
...Og "tid2" er en kolonne i databasen...
Avatar billede eagleeye Praktikant
03. juli 2002 - 20:21 #9
Hvad hvis du prøver uden CDate?

set rs = Conn.execute("SELECT * FROM Kalender WHERE Month([tid2]) = " & Month(tid))
Avatar billede tmceu Praktikant
03. juli 2002 - 20:28 #10
Du kunne også bruge NZ funktionen, der konverterer NULL til 0. Jeg kan ikke gennemskue om du behøver CDate, men noget i denne stil:

set rs = Conn.execute("SELECT * FROM Kalender WHERE NZ(Month(CDate([tid2]))) = " & Month(tid))
Avatar billede killer_r Nybegynder
03. juli 2002 - 20:35 #11
Det her virker:

SQL = "SELECT * FROM Kalender WHERE Month([tid2]) = " & Month(tid) & " AND Year([tid2]) = " & Year(tid) & " AND Month([tid]) = " & Month(tid)-1

Men nu kommer der en anden fejl hvis variablen "tid" er i december (dvs hvis den er 12):

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
Avatar billede tmceu Praktikant
03. juli 2002 - 20:39 #12
Det lyder nærmere som om du vil få problemet med januar, da Month(tid)-1 vil resultere 0 = en ugyldig måned.
Avatar billede tmceu Praktikant
03. juli 2002 - 20:41 #13
eagleeye >> vi mødes efterhånden på alle tider af døgnet herinde. Sover du heller ikke :-)
Avatar billede killer_r Nybegynder
03. juli 2002 - 20:43 #14
Problemet opstår også ved oktober men det virker ved alle andre måneder...??????
Avatar billede tmceu Praktikant
03. juli 2002 - 20:46 #15
Vil du venligst prøve at udskrive det færdige SQL statement for hhv. oktober og december. Tilføj eks. midlertidigt flg. linier:

SQL = "SELECT * FROM Kalender WHERE Month([tid2]) = " & Month(tid) & " AND Year([tid2]) = " & Year(tid) & " AND Month([tid]) = " & Month(tid)-1

Response.Write SQL ' udskriver dit SQL statement
Response.End ' stopper eksekvering af scriptet
Avatar billede killer_r Nybegynder
03. juli 2002 - 20:50 #16
December:
SELECT * FROM Kalender WHERE Month([tid2]) = 12 AND Year([tid2]) = 2002 AND Month([tid]) = 11

September:
SELECT * FROM Kalender WHERE Month([tid2]) = 9 AND Year([tid2]) = 2002 AND Month([tid]) = 8

Der skulle så have stået september i stedet for oktober DOH!
Avatar billede tmceu Praktikant
03. juli 2002 - 20:55 #17
Tidligere har du skrevet at "tid" er en variabel. Er det også et felt i databasen og i så fald, hvilken datatype har dette felt - og er det feltet eller variablen du vil bruge?

Forvirret? Jeg er ikke færdig endnu :-)
Avatar billede killer_r Nybegynder
03. juli 2002 - 20:58 #18
Bare for at forvirre endnu mere er "tid" BÅDE et felt i databasen (tekst-format) OG en variabel med en dato!!!
Derfor har jeg brugt [] omkring den "tid" der er et database-felt... Forvirret nu? :)
Avatar billede tmceu Praktikant
03. juli 2002 - 21:05 #19
En smule, men jeg har da set værre.

Fejlen nu kunne skyldes det format indholdet af feltet tid i databasen har (udover at det er tekst). Hvordan ser en dato ud i hhv. tid og tid2 felterne. dd-mm-yyyy, yyyy/mm/dd, yyyymmdd eller ?

Kunne du ikke prøve at vise et eksempel på en post i databasen, for det lyder som om vi kan optimere dit SQL statement.
Avatar billede killer_r Nybegynder
03. juli 2002 - 21:11 #20
det er:
dd-mm-yyyy

post i databasen:
[id]: 72 (autonum.)
[tid]: 28-11-2002 (tekst)
[tid2]: 05-12-2002 (tekst)
[event]: Tester (tekst)
Avatar billede tmceu Praktikant
03. juli 2002 - 21:18 #21
Jeg skal desværre lige smutte en times tid, men kigger ind senere. Forhåbentlig er det allerede løst inden :-)
Avatar billede eagleeye Praktikant
03. juli 2002 - 22:25 #22
tmceu>> jo det sker jeg lidt natte søvn :)
Avatar billede eagleeye Praktikant
03. juli 2002 - 22:25 #23
Hvis de er definere som tekst i databasen skal du havde ' omkring værdien du tjekker på:

SELECT * FROM Kalender WHERE Month([tid2]) = '9' AND Year([tid2]) = '2002' AND Month([tid]) = '8'
Avatar billede eagleeye Praktikant
03. juli 2002 - 22:29 #24
hvor "de" er tid2 og tid i datadasen.
Avatar billede killer_r Nybegynder
03. juli 2002 - 22:30 #25
Men Month() og Year() retunere et tal...
Avatar billede killer_r Nybegynder
03. juli 2002 - 22:36 #26
Det med ' hjælper heller ikke noget...
Nu bliver jeg snart sindsyg!!! :)
Avatar billede eagleeye Praktikant
03. juli 2002 - 22:38 #27
arh ja...
Avatar billede eagleeye Praktikant
03. juli 2002 - 22:47 #28
Jeg har prøvet at lave i kopi af din database.. med samme kolonne og prøve SQL'en... Jeg kan så den til at fejle hvis tid eller tid2 indeholder en ulovlig dato eks.vis : 15-15-2002
Avatar billede killer_r Nybegynder
03. juli 2002 - 23:19 #29
okay så...
Der er bare ikke nogle ulovlige datoer???
Avatar billede eagleeye Praktikant
03. juli 2002 - 23:29 #30
Og du fik denne fejl: Data type mismatch in criteria expression. for December månede ??
Avatar billede killer_r Nybegynder
04. juli 2002 - 13:48 #31
Ja... og for september...
Avatar billede killer_r Nybegynder
05. juli 2002 - 02:06 #32
tmceu >>> Den time trak hvis ud... :)
Avatar billede killer_r Nybegynder
06. juli 2002 - 19:59 #33
Slet ingen der har et forslag...??? Ikke endda bare et lille et... :(
Avatar billede tmceu Praktikant
13. juli 2002 - 14:50 #34
Jeg kan desværre ikke komme på mere, for jeg kan ikke genskabe fejlen hos mig.
Avatar billede killer_r Nybegynder
11. august 2002 - 22:42 #35
Lukker...
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