JacekMedlem sedan apr. 2000173 inlägg
Hej, ar ingen hojdare pa ASP problemlosning sa min sista utvag e detta forumet.
Jag far inte mitt News Insert script att funka. Samma script har funkat nar jag anvande mig av *.mdb databas men har nu bytt till MySQL pga nytt webhotell.
Foljande kod:
If Request.QueryString("status") = "add" Then
Title = Request.Form("Title")
User = Session("MemberId")
Datum = Request.Form("Date")
Text = request.form("Text")
Text = REPLACE(Text, chr(10), "<br>")
SQLStmt = "INSERT INTO News "
SQLStmt = SQLStmt & "(Title, Text, User, Date) "
SQLStmt = SQLStmt & "VALUES('" & Title & "', '" & Text & "', '" & User & "', '" & Datum & "'); "
objConn.Execute(SQLStmt),,128 *** LINE 22 ***
objConn.Close
Response.Redirect "news.asp"
End If
Detta fel uppstar:
ADODB.Connection.1 error '80004005'
SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near '; ' at line 1
/site/amn/news.asp, line 22
MacceMedlem sedan apr. 2001398 inlägg
Ta bort ; -tecknet på rad 21
@ndersMedlem sedan juni 200026 914 inlägg
För det första; avslutar man SQL-frågor i MySQL med semikolon? Du behöver det i alla fall inte.
För det andra: fältnamnet Text kan vara reserverat, och så även Date. De är i alla fall reserverade i ANSI-SQL. Byt namn på de fälten.
För det tredje: Skriv ut den färdiga SQL-frågan istället för execute. Det är mer intressant än att se den koden som skapar den felaktiga SQL-frågan.
mvh
PalleMedlem sedan apr. 20002 716 inlägg
@nders skrev:
För det andra: fältnamnet Text kan vara reserverat, och så även Date. De är i alla fall reserverade i ANSI-SQL. Byt namn på de fälten.
*Verifierar*
I MS Access är Text och Date reserverade ord.
En komplett lista finns här
m_soderlundMedlem sedan sep. 20024 733 inlägg
Man kan även skriva [Text] i stället för Text samt [Date] i stället för Date, det går bra. (Fast @nders gillar inte det.. ;))
@ndersMedlem sedan juni 200026 914 inlägg
Jag tror inte man kan klamra när det gäller MySQL, och man borde inte kunna göra det överhuvudtaget. Att använda reserverade ord som fältnamn är en styggelse. ;)
Mvh,
m_soderlundMedlem sedan sep. 20024 733 inlägg
@nders skrev:
Jag tror inte man kan klamra när det gäller MySQL, och man borde inte kunna göra det överhuvudtaget. Att använda reserverade ord som fältnamn är en styggelse. ;)
Mvh,
Jo, det är nog det.. Mankan ju alltid köra med t_Name, t_Date etc. som fältnamn. t skulle kunna stå för table till exempel.. ;)
LarsGMedlem sedan dec. 200012 465 inlägg
Text är inte ett reserverat ord i ANSI. Det finns ingen datatyp som heter text, den riktiga benämningen är CLOB eller CHARACTER LARGE OBJECT.
@ndersMedlem sedan juni 200026 914 inlägg
MySQL.com skrev:
The following symbols (from the table above) are disallowed by ANSI SQL but allowed by MySQL as column/table names. This is because some of these names are very natural names and a lot of people have already used them.
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP
Jag vet inte riktigt vad det betyder, men min tolkning är att TEXT tillåts i MySQL men inte i ANSI SQL. Det spelar mindre roll egentligen, men det är alltid bra att veta vad som gäller. :bire
Engine^Medlem sedan dec. 20002 861 inlägg
[Reserverat Ord] är Stygian Notation ;)
Lista på Reserved Words i MySQL.
Jag chansar på att det är Date som jäklas för dig så kolla lite här.
LarsGMedlem sedan dec. 200012 465 inlägg
JacekMedlem sedan apr. 2000173 inlägg
Här kommer hela koden!
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={MySQL};SERVER=localhost;"+ "DB=xxx;PORT=3306;UID=xxx;PWD=xxx;"
Set RsNews = objConn.Execute("SELECT * FROM News Order by Datum desc")
' ########## ADD NEWS #########
If Request.QueryString("status") = "add" Then
Title = Request.Form("Title")
User = Session("MemberId")
Datum = Request.Form("Datum")
News = request.form("News")
News = REPLACE(News, chr(10), "\<br\>")
SQLStmt = "INSERT INTO News "
SQLStmt = SQLStmt & "(Title, News, User, Datum) "
SQLStmt = SQLStmt & "VALUES('" & Title & "', '" & News & "', '" & User & "', '" & Datum & "'); "
objConn.Execute(SQLStmt),,128
objConn.Close
Response.Redirect "news.asp"
End If
' #################################
%>
Jag ändrade DATE och TEXT men får fortfarande samma fel. =(
@ndersMedlem sedan juni 200026 914 inlägg
@nders skrev:
För det tredje: Skriv ut den färdiga SQL-frågan istället för execute. Det är mer intressant än att se den koden som skapar den felaktiga SQL-frågan.
JacekMedlem sedan apr. 2000173 inlägg
Jag är säkert trög när det gäller sådant, men jag skulle tippa att du menar hela sidan, eller menar du något från databasen. Första gången jag använder mig av MySQL därför jag e lite trög =D
@ndersMedlem sedan juni 200026 914 inlägg
Det har inget med MySQL att göra, utan vanlig felsökningsprincip när man pillar SQL-frågor som inte fungerar.
SQLStmt = "INSERT INTO News "
SQLStmt = SQLStmt & "(Title, News, User, Datum) "
SQLStmt = SQLStmt & "VALUES('" & Title & "', '" & News & "', '" & User & "', '" & Datum & "'); "
[b]Response.write "<b>SQLStmt: </b>" & SQLStmt
'objConn.Execute(SQLStmt),,128[/b]
Mvh,
JacekMedlem sedan apr. 2000173 inlägg
Ok.. Löste problemet i alla fall..
Tog bort ; som var på en annan rad, och inte den raden Erroret peka på..
Från:
& Datum & "'); "
Till:
& Datum & "') "
@ndersMedlem sedan juni 200026 914 inlägg
När det är fel på en SQL-fråga pekar felmeddelandet alltid på den raden där SQL-frågan exekveras.
For future reference: Det kan vara bra att lyssna på Macce. :P
Mvh