KoggenMedlem sedan juni 2002169 inlägg Hej
Jag har fått en befintlig site kodad i ASP med MySQL på halsen. Jag minns från tidigare erfarenheter att det kan vara knöligt med ASP & MySQL.
En uppdatering av databasen har slutat fungera. Den var kodad med recordset men jag trodde jag var smart och skulle ändra till en SQL Update sats istället, så här:
SQLU = "UPDATE tblResultat SET resultat = '" & request.form("resultat") & "' WHERE resultat IS NOT NULL"
Connect.execute(SQLU)
Jag får följande felmeddelande:
Error Type:
ADODB.Connection.1 (0x80004005)
SQLState: 37000 Native Error Code: 1064 [MySQL][ODBC 3.51 Driver][mysqld-one.com mysql proxy]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near .......
Jag har använt liknande satser många gånger med Access och kan inte förstå var felet finns.
Tilläggas kan att på flera andra ställen på siter läggs poster till db, men detta är enda stället med update. Samma db-koppling används på alla sidor som hanterar db.
Det verkar som om versionen av MySQL också kan ha betydelse hur SQL-satsen skall skrivas. Jag har kollat referensböcker på nätet, och allt ser ok ut för mig.
*Jag minns tydligt nu varför jag gav upp MySQL för flera år sedan*
Tack på förhand
GunnarDMedlem sedan juni 20014 290 inlägg Har inget med db kopplingen att göra utan det finns ett fel i SQL satsen.
Hur ser SQL satsen ut, vad finns i variabel SQLU?
KoggenMedlem sedan juni 2002169 inlägg SQL-satsen ser du ovan, och i request.form finns ren text. Den texten hämtas från databasen. Tanken är att texten hämtas från databasen och man lägger till mer text i formulärfältet och sparar. Jag har funderat på att det kan finnas ett otillåtet tecken där, men då borde det väl inte sparats förra gången?
Jag var också inne på att det fanns för många tecken i databasfältet. Jag har inte tillgång till MySQL-administrationenn än och kommer inte ihåg hur många tecken MySQLs motsvarighet till Access PM-fält får innehålla - fast då borde ju felmeddelandet ju vara ett annat. Jag har dessutom provat att plocka bort tecken från fältet och spara om, med samma resultat.
@ndersMedlem sedan juni 200032 969 inlägg Du måste se till att escapea. Det görs automatiskt när du sparar via recordset som du gjorde tidigare.
Skriv ut SQL-frågan med Response.write så ser du (och framför allt -VI) vad den har för innehåll. Att du säger att den innehåller ren text ger oss ingenting.
mvh
Peter SMedlem sedan dec. 20025 483 inlägg Jag tror Gunnar menar att du skall skriva ut innehållet i SQLU för att se hur den färdiga SQL-satsen ser ut när den skickas till MySQL. T.ex. kan det ju vara så att request.form("resultat") innehåller apostrofer och då kommer du att få ett felmeddelande.
Tag därför för vana att alltid eskejpa formulärinput ( replace(foo, "'", "''") ) eller, ännu hellre, kör alltid med parametriserade frågor.
./Red - Annnnderssss! :D
GunnarDMedlem sedan juni 20014 290 inlägg
Koggen skrev:
SQL-satsen ser du ovan, och i request.form finns ren text.
Nej, jag ser hur du bygger upp SQL-satsen, inte hur den färdiga SQL-satsen ser ut.
Får jag liknande fel så är det första jag gör är att skriva ut SQL satsen för att se ur den ser ut och ev. testa den direkt i MySQL.
KoggenMedlem sedan juni 2002169 inlägg Jag förstår vad ni menar, men det funkade faktiskt inte med recordset innan heller. Jag vill inte klistra in hela texten här.
Hur som helst har jag escapat och ersatt enkelcitat med accent och semikolon med mellanslag men får fortfarande fel. Detta gör jag både på formulärsidan, innan det visas i formuläret, och på sidan där allt sparas. Är det fler tecken jag bör ecapa? Jag har gått igenom texten och hittar inget som jag tycker skulle påverka.
När jag försöker spara med recordset får jag ett annat felmeddelande:
Error Type:
ADODB.Recordset.1 (0x80004005)
/edit_resultat2.asp, line 10 - (detta är raden med rsResultat.update)
Peter SMedlem sedan dec. 20025 483 inlägg Om du bara skriver ett "A" i rutan resultat, vad händer då när du sparar?
Eller om du bara kör koden så här:
' SQLU = "UPDATE tblResultat SET resultat = '" & request.form("resultat") & "' WHERE resultat IS NOT NULL"
SQLU = "UPDATE tblResultat SET resultat = 'A' WHERE resultat IS NOT NULL"
Connect.execute(SQLU)
Går den igenom eller blir det fel?
KoggenMedlem sedan juni 2002169 inlägg Bugar och bockar.. jag tror det funkar nu. Vad som var fel vet jag inte, men efter jag tömt formulärfältet och lagrat några bokstäver så funkade det. När jag sen klistrade in gamla innehållet så köpte den det. Måste varit någon otillåtet tecken som spökade, men försvann i hanteringen med mina replace och inklistringen.
Tack för hjälpen