Avatar billede thomas_b Nybegynder
10. marts 2006 - 19:09 Der er 53 kommentarer og
1 løsning

Data type mismatch in criteria expression.

Hej eksperter... Jeg er igang med noget statestik noget... men det virker ikke helt...! Mit system siger således...:

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

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

og mit script ser således ud...:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato='"& FormatDateTime(Now(), vbShortDate) &"' AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
log_post13 = rs("log_post13")

Hvad kan der være galt...
Avatar billede softspot Forsker
10. marts 2006 - 19:27 #1
Prøv denne:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
Avatar billede thomas_b Nybegynder
10. marts 2006 - 23:32 #2
Hvad betyder de # der...?
Avatar billede softspot Forsker
10. marts 2006 - 23:57 #3
Det er en dato-format-afgrænsning for konstante datoer i Access (ligesom apostroffen er for strenge/tekster).
Avatar billede softspot Forsker
10. marts 2006 - 23:59 #4
Du kunne i øvrigt nok bare nøjes med at bruge flg. SQL:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato=Date() AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"

Hvor du så bare benytter Access' egen date-funktion til at indsætte dags dato i sætningen.
Avatar billede thomas_b Nybegynder
11. marts 2006 - 00:11 #5
Det sidste virker ikke... Men hvis jeg nu anser at jeg vil have "dato" som der skal være lig Date() til at være i samme format hvis der f.eks. kommer en værdi nu fra "dato" hvor der står 10-03-06 16:30

Og hvad format levere Date() i ??
Avatar billede thomas_b Nybegynder
11. marts 2006 - 00:12 #6
i stedet for "Date()" skulle der havde stået "FormatDateTime(Now(), 2)"
Avatar billede softspot Forsker
11. marts 2006 - 00:37 #7
Ja ok, jeg mente lige at FormatDateTime(Now(), 2) leverede datoen alene, men det gør den jo ikke, så man kan ikke bare udskifte den med date().

Skal dit spørgsmål i 10/03-2006 23:32:55 tolkes således at det ikke fungerer?
Avatar billede thomas_b Nybegynder
11. marts 2006 - 00:55 #8
10/03-2006 19:27:58 ---> fungere...!
10/03-2006 23:59:12 ---> fungere ikke...!

Men den kommer bare med en værdi på nul, fordi det ikke er samme format tror jeg...! Jeg regner med at "FormatDateTime(Now(), 2)" levere i et format som således...: "10-03-06".... Og det er også sådan det skal være men i min database har jeg i et andet script brug for at jeg både dato og tid, som således: "10-03-06 16:30" hvor jeg kun i dette script vil have lavet det om til "10-03-06"... Og det troede jeg kunne gøre ved at skrive således...:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE FormatDateTime(dato, 2)=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"

Men det kan man ikke...!
Avatar billede softspot Forsker
11. marts 2006 - 01:07 #9
I Access findes der en mere kraftfuld funktion til at formatere strenge, datoer og tal, den hedder Format og den tager et mønster og selve datoen. jeg kan ikke huske helt præcis hvordan det er med parametre til funktioner i Access, men jeg tror det er noget i stil med:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE Format(dato; "dd-mm-yy hh:nn")=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"


Hvis det ikke fungerer med ; så prøv med komma (jeg mener dog det er semikolon).

Rent bort set fra det, så burde et datofelt være ligeglad med om formatet er 10-03-06 eller 10-03-2006, sålænge datatypen du sammenligner med er dato (f.eks. en konstant omstillet af #).

Jeg kan ikke huske om vi har snakket om dette i en af de tidligere tråde, men har du sat session.LCID = 1030? Det skulle i det mindste sikre at datoformater er danske.
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:12 #10
Dette siger den ved både ; og ,

Microsoft VBScript compilation error '800a0401'

Expected end of statement

SQL = "SELECT count(*) as log_post FROM nytabel2006_statastik_log WHERE Format(dato, "dd-mm-yy")=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
--------------------------------------------------------------------------------------^
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:16 #11
Men der kommer også disse oplysninger ind i min database:

03-11-2006 00:19:00
03-11-2006 00:25:00
03-11-2006 00:27:00

På trods af at jeg bruger

<% Session.LCID=1030 %>
og
Function CheckNumber(intTal)
    If intTal < 10 Then
        CheckNumber = "0"&intTal
    Else
        CheckNumber = intTal
    End If
End Function
(CheckNumber(Day(Now()))&"-"&CheckNumber(Month(Now()))&"-"&Year(Now())&" "&CheckNumber(Hour(Now()))&":"&CheckNumber(Minute(Now())))
Avatar billede softspot Forsker
11. marts 2006 - 01:16 #12
Sorry (det er muligvis tidspunktet der gør mine tanker slørede), men det er pga. strengen i format kommer i konflikt med strengen som SQL-sætningen ligger i. Prøv denne i stedet:

SQL = "SELECT count(*) as log_post FROM nytabel2006_statastik_log WHERE Format(dato; ""dd-mm-yy"")=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
Avatar billede softspot Forsker
11. marts 2006 - 01:18 #13
Hvor ser du disse informationer?

Er din Access og dit OS evt. på engelsk?
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:20 #14
med ; siger den således:

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

[Microsoft][ODBC Microsoft Access Driver] Syntax error in query expression 'Format(dato; [dd-mm-yy])=#11-03-2006# AND ip='83.72.194.12''.


Med , siger den

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

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:22 #15
Min access er på dansk
Mine filer ligger på en anden server... Så har ikke mulighed for at se det...!
Avatar billede softspot Forsker
11. marts 2006 - 01:27 #16
Det er da noget spøjst!!

Jeg kan ikke lige se hvad der er galt, med de informationer du har givet mig indtil videre (altså bort set fra at vi nok skal droppe den der strategi med formatering af datoen i databasen)...

Hvis vi lige går helt tilbage til den der fungerede, nemlig:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"

og så prøver at fjerne IP-kriteriet, så du prøver at fyre denne SQL af mod databasen:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato=#"& FormatDateTime(Now(), 2) &"#"

bare for at se om der kommer et resultat ud af det.
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:31 #17
Så viser min log_post13 bare "0" så den kommer ikke med noget...!
Avatar billede softspot Forsker
11. marts 2006 - 01:37 #18
men hvis datoerne i databasen er 3/11 i stedet for 11/3, så giver det vel også god mening...? Er der nogen måde hvorpå du kan teste om der rent faktisk er et datagrundlag der skulle give dig et andet resultat end 0 i den forspørgsel...?
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:39 #19
Hvad mener du ?
Avatar billede softspot Forsker
11. marts 2006 - 01:46 #20
Kan du f.eks. få noget resultat hvis du skriver:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato=#03-11-2006#"

eller hvis du skriver

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato=#11-03-2006#"

eller

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato BETWEEN #11-03-2006# AND #11-03-2006 06:00#"
Avatar billede softspot Forsker
11. marts 2006 - 01:47 #21
eller den danske udgave af den sidste SQL-sætning:

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato BETWEEN #03-11-2006# AND #03-11-2006 06:00#"
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:48 #22
Dette er sku musstisk....!

Nu laver den en fejl der lydder således...:

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

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.


på denne linie:
SQL = "SELECT count(*) as log_post FROM nytabel2006_statastik_log WHERE Format(dato, ""dd-mm-yy"")=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:52 #23
glem det overståene...!

De 2 første gav den bare "0"

Den sidste sagde den:


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

[Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause.
Avatar billede softspot Forsker
11. marts 2006 - 01:52 #24
Det gjorde den da også før (jf. 11/03-2006 01:20:42)
Avatar billede thomas_b Nybegynder
11. marts 2006 - 01:54 #25
Jeg hr lavet en lille fejl...!

Denne sætning virker... den fremkalder mine poster...

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato BETWEEN #11-03-2006# AND #11-03-2006 06:00#"
Avatar billede softspot Forsker
11. marts 2006 - 01:56 #26
Jeg kan ikke lige se hvad der er galt - desværre. Det er svært ud fra de informationer du har givet mig, at udlede noget. Sidste gang hjalp det på mirakuløs vis med en genstart af serveren... jeg har en mistanke om at vi sidder og jagter spøgelser, altså sideeffekter af noget andet. Jeg kan bare ikke sætte fingeren på hvad det er :(
Avatar billede softspot Forsker
11. marts 2006 - 02:01 #27
OK, kan det så være fordi der ikke findes nogen til den påg. IP?
Avatar billede thomas_b Nybegynder
11. marts 2006 - 02:01 #28
Jeg har ikke genstartet nogen server...

Er det ikke bare at få datoerne i min database lavet om til dansk dato og så lave "dato" om til kun at se dd-mm-yy ???
Avatar billede softspot Forsker
11. marts 2006 - 02:02 #29
Prøv i øvrigt at udskrive SQL-sætningen (den oprindelige med variabel dato) inden du udfører den, så du kan se hvordan den ser ud. Det er ofte lettere at se hvad problemet er, når man ser selve SQL-sætningen.
Avatar billede softspot Forsker
11. marts 2006 - 02:05 #30
Mht. genstart, ok, måske ikke ligefrem frivillig genstart, men kunne da tyde på at der skete et eller andet med den server, som fik det til at fungere igen... ref: http://www.eksperten.dk/spm/691172#rid6128405
Avatar billede thomas_b Nybegynder
11. marts 2006 - 02:10 #31
Så det ville måske hjælpe hvis jeg lagde den over på en anden server ???
Jeg prøver lige...
Avatar billede softspot Forsker
11. marts 2006 - 02:18 #32
Jeg er slet ikke sikker på hvad der hjælper - jeg famler lidt i blinde i øjeblikket...
Avatar billede thomas_b Nybegynder
11. marts 2006 - 02:19 #33
Er der andre metoder end denne...:

Format(dato; "dd-mm-yy hh:nn")
Avatar billede softspot Forsker
11. marts 2006 - 02:28 #34
Kan den stadig finde nogle poster hvis du propper IP-kriteriet på sin SQL?

SQL = "SELECT count(*) as log_post13 FROM nytabel2006_statastik_log_unikke WHERE dato BETWEEN #11-03-2006# AND #11-03-2006 06:00# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
Avatar billede thomas_b Nybegynder
11. marts 2006 - 02:32 #35
Den finder stadig posterne, ja...
Avatar billede softspot Forsker
11. marts 2006 - 02:38 #36
Jeg har lidt på fornemmelsen at det er pga. sekunder og minutter på datoerne i databasen, at du ikke finder noget i din forspørgsel...

Mht. formateringen af databasedato med Format, så kan du evt. prøve med

Format(dato; 'dd-mm-yy hh:nn')

Det kan være at strengen er blevet afgrænset på den forkerte måde i mine tidligere eksempler.
Avatar billede thomas_b Nybegynder
11. marts 2006 - 02:40 #37
hvordan vil hele SQL sætningen se ud...?
Avatar billede softspot Forsker
11. marts 2006 - 02:42 #38
SQL = "SELECT count(*) as log_post FROM nytabel2006_statastik_log WHERE Format(dato; 'dd-mm-yy hh_nn')=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
Avatar billede thomas_b Nybegynder
11. marts 2006 - 02:45 #39
Min log_post13 bliver "0"
Avatar billede softspot Forsker
11. marts 2006 - 02:51 #40
Prøv lige denne i stedet (den anden havde en lille skrivefejl):

SQL = "SELECT count(*) as log_post FROM nytabel2006_statastik_log WHERE Format(dato; 'dd-mm-yy hh:nn')=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"
Avatar billede thomas_b Nybegynder
11. marts 2006 - 02:55 #41
Giver stadig nul...

Men forstår jeg rigtigt hvis at dette: Format(dato, 'dd-mm-yy hh:nn') svare til f.eks. 11-03-06 02:40 - så er det da klart den ikke virker når den skal være lig 11-03-06 ???
Avatar billede softspot Forsker
11. marts 2006 - 02:57 #42
Du forstår korrekt, og hvis du mener formatet skal være anderledes, så prøv at ændre det...
Avatar billede thomas_b Nybegynder
11. marts 2006 - 03:02 #43
Hvordan skal kolonnen i access formateres som text eller dato og klokkeslæt...?
Avatar billede softspot Forsker
11. marts 2006 - 03:03 #44
Jeg ville selv vælge dato som format.
Avatar billede softspot Forsker
11. marts 2006 - 03:03 #45
Altså hvis du tænker på datatypen for dato-kolonnen.
Avatar billede thomas_b Nybegynder
11. marts 2006 - 03:12 #46
Nu har jeg sat den til dato format...

og med denne SQL, Virker den...
SQL = "SELECT count(*) as log_post FROM nytabel2006_statastik_log WHERE Format(dato, 'mm-dd-yyyy')=#"& FormatDateTime(Now(), 2) &"# AND ip='"& Request.ServerVariables("REMOTE_ADDR") &"'"

Men hvorfor er det lige at:
'mm-dd-yyyy' - finder det danske format?
'dd-mm-yyyy' - finder det enelske format?
Avatar billede softspot Forsker
11. marts 2006 - 03:16 #47
Ja, det burde være omvendt...? Det kan være fordi det rent faktisk er engelsk format i databasen... :)
Avatar billede thomas_b Nybegynder
11. marts 2006 - 03:22 #48
Nå men nu virker det... Kanon...

Kan man kun bruge Format() i SQL sætninger eller også andre stæder, (hvis ja, hvor hende??)

Lægger du et svar... så for du nogle pont for ulejligheden...
Avatar billede softspot Forsker
11. marts 2006 - 04:19 #49
Det er lidt farligt at være kategorisk, men ifht. VBScript og databaser (MSSQL, Access, MySQL og givetvis flere andre), kan du kun bruge den ifm. SQL imod Access-databaser. Jeg giver dog inden garanti, men det er, såvidt jeg ved, noget der er implementeret i Access, fordi Access også benytter VBA som scriptintegrationssprog (VBA er et subset af applikationsprogrammeringssproget VB hvor mange flere funktionalitet er tilgængelig)...
Avatar billede thomas_b Nybegynder
11. marts 2006 - 23:44 #50
takker.....
Avatar billede softspot Forsker
12. marts 2006 - 01:39 #51
Tak for point :)
Avatar billede thomas_b Nybegynder
12. marts 2006 - 02:37 #52
Måske én gang mere... Bare hvis du har tid imorgen...:
http://www.eksperten.dk/spm/694406
Avatar billede thomas_b Nybegynder
13. marts 2006 - 21:43 #53
hej softspot...

Hvorfor får jeg lige pluslig denne fejl... uden at have ændret noget...!

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

[Microsoft][ODBC Microsoft Access Driver] The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.
Avatar billede thomas_b Nybegynder
13. marts 2006 - 21:45 #54
Bare glem det...! Det var bare et "," der havde sneeet sig ind i SQL-sætnignen
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