Avatar billede bremer Nybegynder
18. december 2005 - 21:13 Der er 18 kommentarer og
1 løsning

fejl i min opdaterning

Er der nogle som ved hvorfor, jeg har en fejl fra den her denne her kode:

<%

tabel1 = request.form("tabel1")
tabel2= request.form("tabel2")
tabel3= request.form("tabel3")
tabel4 = request.form("tabel4")

strSQL = "UPDATE tabelnavn SET tabel1='"&tabel&"'," &_
"tabel2='"&tabel3&"'," &_
"tabel3='"&tabel3&"'" &_
"WHERE tabel4="&tabel4

conn.execute(strSQL)
response.write strSQL

%>
                              <%
Conn.Close
set Conn = Nothing
%>
   

Dette er fejlen:

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


Håber Vi kan hjælpe mig
Avatar billede ossian Nybegynder
18. december 2005 - 21:33 #1
Hvilken type er felterne tabel i databasen? Tal??
Avatar billede ossian Nybegynder
18. december 2005 - 21:36 #2
Hvis det er tal - så prøv det her:

<%

tabel1 = request.form("tabel1")
tabel2= request.form("tabel2")
tabel3= request.form("tabel3")
tabel4 = request.form("tabel4")

strSQL = "UPDATE tabelnavn SET tabel1="&tabel&"," &_
"tabel2="&tabel3&"," &_
"tabel3="&tabel3&"" &_
"WHERE tabel4="&tabel4

conn.execute(strSQL)
response.write strSQL

%>
                              <%
Conn.Close
set Conn = Nothing
%>
Avatar billede bremer Nybegynder
18. december 2005 - 21:40 #3
Det er tal - men i min database er det "tekst felter"...

har det noget at side mht, de kode?

VH - bremer
Avatar billede softspot Forsker
18. december 2005 - 21:40 #4
...men det kan også være du bare skal lave et mellemrum foran WHERE...
Avatar billede bremer Nybegynder
18. december 2005 - 21:45 #5
hvad mere du...?
Avatar billede softspot Forsker
18. december 2005 - 21:54 #6
Lige nu ser din SQL således ud:

strSQL = "UPDATE tabelnavn SET tabel1='"&tabel&"'," &_
"tabel2='"&tabel3&"'," &_
"tabel3='"&tabel3&"'" &_
"WHERE tabel4="&tabel4

Jeg ville jo mene at den burde se således ud:

strSQL = "UPDATE tabelnavn SET tabel1='"&tabel&"'," &_
"tabel2='"&tabel3&"'," &_
"tabel3='"&tabel3&"' " &_
"WHERE tabel4="&tabel4
Avatar billede bremer Nybegynder
18. december 2005 - 22:46 #7
Nu skriver den:

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'noget tekst her'.

siger det dig noget ?
Avatar billede softspot Forsker
18. december 2005 - 23:05 #8
Prøv lige at udskifte dette:

<%

tabel1 = request.form("tabel1")
tabel2= request.form("tabel2")
tabel3= request.form("tabel3")
tabel4 = request.form("tabel4")

strSQL = "UPDATE tabelnavn SET tabel1='"&tabel&"'," &_
"tabel2='"&tabel3&"'," &_
"tabel3='"&tabel3&"'" &_
"WHERE tabel4="&tabel4

conn.execute(strSQL)
response.write strSQL

%>


med dette:

<%

tabel1 = request.form("tabel1")
tabel2= request.form("tabel2")
tabel3= request.form("tabel3")
tabel4 = request.form("tabel4")

strSQL = "UPDATE tabelnavn SET tabel1='"&tabel&"'," &_
"tabel2='"&tabel3&"'," &_
"tabel3='"&tabel3&"' " &_
"WHERE tabel4="&tabel4

response.write strSQL
response.end

conn.execute(strSQL)
response.write strSQL

%>

og vis den SQL der kommer ud af det.
Avatar billede bremer Nybegynder
18. december 2005 - 23:16 #9
Så kommer der til at stå sådan:

UPDATE tabelnavn SET fornavn='tabel1',tabel3='X',tabel3='-' WHERE tabel4=01

og det er X jeg har prøvet at opdater med...
- men hvis jeg prøver at gå tilbage og opdater siden, har den ikke gemt resultatet af selve opdatering.

giver det mere for dig ?
Avatar billede softspot Forsker
18. december 2005 - 23:33 #10
Først og fremmest hæfter jeg mig ved at dine feltnavne ændrer sig fra post til post (tabel1 hedder nu fornavn), dernæst undrer jeg mig lidt over tabel4=01. Er det meningen at tabel4 skal sammenligne med en tekst som indeholder "01" eller er det et talfelt (som i dette tilfælde ville matche værdien 1)?

Jeg har lidt på fornemmelsen at du gerne vil maskere dine feltnavne, men med mindre du virkelig arbejder med noget innoverende og nytænkende, så tror jeg du bliver hjulpet lettere, hvis du holder dig til at vise det kode du rent faktisk udfører, da noget af problemet risikerer at gå tabt i din maskeringsprocess.

Anyhow! Det du skal passe på med når du gemmer tekster i en database, er at de ikke indeholder apostroffer, da disse, når du opbygger SQL-sætninger på denne måde, kan være med til at skabe rod. Det du bør gøre er at udskifte apostroffer med dobbeltapostroffer, altså noget i stil med dette:

strSQL = "UPDATE tabelnavn SET tabel1='"&replace(tabel1,"'","''")&"'," &_
"tabel2='"&replace(tabel2,"'","''")&"'," &_
"tabel3='"&replace(tabel3,"'","''")&"' " &_
"WHERE tabel4="&tabel4

når du skal teste dette af skal du lige huske at fjerne de to linier jeg indsatte mellem SQL-sætningen og conn.Execute (altså response.write og response.end).
Avatar billede bremer Nybegynder
18. december 2005 - 23:51 #11
Jjeg ikke noget at skjule, men ville være gøre det så nemt at se på... (forsent) - men min kode ser sådan ud.

<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../db/databasen.mdb")
Conn.Open DSN
%>

<%

tabel1 = request.form("tabel1")
tabe2 = request.form("tabe2")
tabe3 = request.form("tabe3")
tabe4 = request.form("tabe4")

strSQL = "UPDATE tabelnavn SET tabel1='"&replace(tabel1,"'","''")&"'," &_
"tabe2='"&replace(tabe2,"'","''")&"'," &_
"tabe3='"&replace(tabe3,"'","''")&"' " &_
"WHERE tabe4="&tabe4

conn.execute(strSQL)
response.write strSQL

%>
                              <%
Conn.Close
set Conn = Nothing
%>


Og der fremkommer denne fejl:

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

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

VH - bremer
Avatar billede softspot Forsker
18. december 2005 - 23:57 #12
Kan du ikke prøve at skitsere opbygningen af din tabel (den der hedder tabelnavn), hvor du angiver feltnavn og felttype for hver af de, i denne update-sætning, relevante felter...

Du er helt sikker på at feltet tabe4 er et talfelt, ikk'?
Avatar billede softspot Forsker
18. december 2005 - 23:59 #13
...jeg konstaterer at dine felter endnu engagn har skiftet navne, så enten er det en meget dynamisk database du har, eller så sidder du og taster koden ind hver gang du poster - uanset hvad, så kan det godt gøre mig lidt bekymret :)
Avatar billede bremer Nybegynder
19. december 2005 - 00:07 #14
tabe4 - er en textbox, lige som alle de andre....

hjælper dette så:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../db/databasen.mdb")
Conn.Open DSN
%>

<%

fornavn = request.form("fornavn")
poster = request.form("poster")
arkivnavn = request.form("arkivnavn")
dvd = request.form("dvd")

strSQL = "UPDATE film SET fornavn='"&replace(fornavn,"'","''")&"'," &_
"poster='"&replace(poster,"'","''")&"'," &_
"arkivnavn='"&replace(arkivnavn,"'","''")&"' " &_
"WHERE dvd="&dvd

conn.execute(strSQL)
response.write strSQL

%>
                              <%
Conn.Close
set Conn = Nothing
%>
Avatar billede softspot Forsker
19. december 2005 - 00:09 #15
Under antagelse af at DVD er et tekstfelt, så prøv lige dette SQL i stedet:

strSQL = "UPDATE film SET fornavn='"&replace(fornavn,"'","''")&"'," &_
"poster='"&replace(poster,"'","''")&"'," &_
"arkivnavn='"&replace(arkivnavn,"'","''")&"' " &_
"WHERE dvd='"&dvd&"'"
Avatar billede bremer Nybegynder
19. december 2005 - 00:19 #16
Cool! - nu virker det sku!... :) TOP!
- sender du lige et svar...
Avatar billede softspot Forsker
19. december 2005 - 00:20 #17
Det kom der - velbekomme :)
Avatar billede bremer Nybegynder
19. december 2005 - 00:24 #18
Og selvfølgelig - mange tak for hjælpe...
Avatar billede softspot Forsker
19. december 2005 - 00:31 #19
Tak for 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