Avatar billede viden Nybegynder
16. oktober 2002 - 10:55 Der er 19 kommentarer

Syntax error

I min rettefunktion i mit nyhedsmodul får jeg denne fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement.

/admin/administrator/ret.asp, line 112

Jeg har så prøvet at  response.write(strSQL)

og får så denne besked: Update News Set Date='', Subject= '', Text= '' Where ID=;

Er der nogen der kan hjælpe mig?
Koden på hele siden er:


<!-- #INCLUDE FILE="../brugercheck.inc" -->
<!--------#include file="../pro-lag.inc"----->
<%
'Option Explicit
Dim Conn, DSN, retid, strSQL, rs, frmRetid, strDate, strSubject, strText
Response.Buffer=false
%>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
connString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../log/safarinews.mdb")
Conn.Open connString
%>
<html>
<head>
<title>Ret Menu</title>
</head>

<body background="../images/t.gif" topmargin="15">
<br><br>
      <div align="center">
        <center>
      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber3">
        <tr>
          <td width="150" style="border-bottom: 1px solid #000000" >&nbsp;</td>
          <td width="500" style="border-bottom: 1px solid #000000" ><font face="verdana" size="2">Administration i det valgte område
          = <font color="#FF0000">Nyheder</font></font></td>
          </tr></table>

        </center>
</div>

<div align="center">
  <center>
 
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber2">
    <tr>
      <td width="150" valign="top"><!---#include file="menu_includ.asp"---></td>
      <td width="500">

<%

If Request.Querystring("retid") <> "" Then

  retid = Request.Querystring("retid")

  strSQL ="Select * From News Where ID =" & retid
  Set rs = Conn.Execute(strSQL)

  do while not rs.eof
%>

   
                <FORM method="post" name="ret" action="ret_main.asp">

<div align="center">
  <center>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="500" id="AutoNumber1">
  <tr>
    <td width="100%" align="left">&nbsp;</td>
  </tr>
  </table>
  </center>
</div>
<div align="center">
  <center>
<table border="0" cellpadding="0" cellspacing="0" width="500" height="106"  bordercolor="#111111" >
  <tr>
    <td width="100" height="25" ><font face="verdana" size="2"><b>&nbsp; Ændret den:</b></font></td>
    <td width="400" height="25" colspan="2" ><INPUT name="Dato" size="40" value="<%Response.Write rs("Date")%>"></td>
  </tr>
  <tr>
    <td width="100" height="25" ><font face="verdana" size="2"><b>&nbsp; Overskrift:</b></font></td>
    <td width="400" height="25" colspan="2" ><INPUT name="Navn" size="40" value="<%Response.Write rs("Subject")%>"></td>
  </tr>
  <tr>
    <td width="100" height="25" valign="top" ><font face="verdana" size="2"><b>&nbsp; Tekst:</b></font></td>
    <td width="400" height="25" colspan="2" ><textarea rows="4" cols="30"  name="Tekst"><%Response.Write rs("Text")%></textarea></td>
  </tr>
  <tr>
    <td width="100" height="25" ><font face="verdana" size="2"><b>&nbsp;</b></font></td>
    <td width="156" height="25" >
<align="center">
    <input type="hidden" NAME="frmRetid" value="<%Response.Write Request.Querystring("retid")%>">
    <INPUT type="submit" value="UPDATE" style="font-family: Verdana; font-size: 8pt"></td>
    <td width="244" height="25" >
&nbsp;</td>
  </tr>
  <tr>
      <td width="100">
<align="center">&nbsp;&nbsp;
    </td>
  </tr>
</table>
  </center>
</div>
</td>
</FORM>
<%
  rs.MoveNext
  loop

Elseif Request.Querystring("retid") = "" Then
  frmRetid = Request.Form("frmRetid")

  strDate = Replace(Request.Form("Date"), vbcrlf, "<br>")
' strDate = Replace(strDate, "'", "''")
  strSubject = Replace(Request.Form("Subject"), "'", "''")
  strText = Replace(Request.Form("Text"), "'", "''")
 
  strSQL = "Update News Set Date='" & strDate & "', Subject= '" & strSubject & "', Text= '" & strText & "' Where ID=" & frmRetid & ";"
  response.write(strSQL)
  'Conn.Execute(strSQL)

'Response.Redirect ("ret_main.asp")
 
End if
%>
</td>
    </tr>
  </table>
  </center>
</div>

</body>
</html>
Avatar billede hbhansen Nybegynder
16. oktober 2002 - 11:01 #1
Prøv at rette din update til:
strSQL = "Update News Set Date='" & strDate & "', Subject= '" & strSubject & "', Text= '" & strText & "' Where ID=" & frmRetid
Avatar billede viden Nybegynder
16. oktober 2002 - 11:08 #2
Resultatet er det samme
Avatar billede neteffect Nybegynder
16. oktober 2002 - 11:10 #3
"Date" og "Text" kunne godt være reserverede ord, derfor klammer om.
Hvis Date er et datofelt i databasen, skal det se således ud:

strSQL = "Update News Set [Date]=#" & strDate & "#, Subject= '" & strSubject & "', [Text]= '" & strText & "' Where ID=" & frmRetid

Datoen i strDate skal være i amrikansk format (mm-dd-yyyy)
Avatar billede viden Nybegynder
16. oktober 2002 - 11:17 #4
skal jeg sætte (mm-dd-yyyy) ind i SQL stringen altså:
[Date]='" & str(mm-dd-yyyy)
Avatar billede neteffect Nybegynder
16. oktober 2002 - 11:37 #5
Indholdet i strDate skal være en dato i amerikansk format. I dag er fx "10-16-20002". Og der skal # om i stedet for '

Se også mit svar på http://www.eksperten.dk/spm/246418
Avatar billede viden Nybegynder
16. oktober 2002 - 12:04 #6
Det giver ikke det store resultat:
Efter  response.write(strSQL)

Update News Set [Date]=##, Subject= '', [Text]= '' Where ID=
Avatar billede neteffect Nybegynder
16. oktober 2002 - 12:47 #7
feltet i din form hedder Dato, ikke date. Tilsvarende med feltet Tekst (ikke text)
Avatar billede viden Nybegynder
16. oktober 2002 - 13:16 #8
Ja det var da noget af en brøler:)

Jeg har nu prøvet at rette det til, men jeg er ikke sikker på at jeg forstår det rigtig:

<table border="0" cellpadding="0" cellspacing="0" width="500" height="106"  bordercolor="#111111" >
  <tr>
    <td width="100" height="25" ><font face="verdana" size="2"><b>&nbsp; Ændret den:</b></font></td>
    <td width="400" height="25" colspan="2" ><INPUT name="Dato" size="40" value="<%Response.Write rs("Date")%>"></td>
  </tr>
  <tr>
    <td width="100" height="25" ><font face="verdana" size="2"><b>&nbsp; Overskrift:</b></font></td>
    <td width="400" height="25" colspan="2" ><INPUT name="Overskrift" size="40" value="<%Response.Write rs("Subject")%>"></td>
  </tr>
  <tr>
    <td width="100" height="25" valign="top" ><font face="verdana" size="2"><b>&nbsp; Tekst:</b></font></td>
    <td width="400" height="25" colspan="2" ><textarea rows="4" cols="30"  name="Tekst"><%Response.Write rs("Text")%></textarea></td>
  </tr>
  <tr>
    <td width="100" height="25" ><font face="verdana" size="2"><b>&nbsp;</b></font></td>
    <td width="156" height="25" >
<align="center">
    <input type="hidden" NAME="frmRetid" value="<%Response.Write Request.Querystring("retid")%>">
    <INPUT type="submit" value="UPDATE" style="font-family: Verdana; font-size: 8pt"></td>
    <td width="244" height="25" >
&nbsp;</td>
  </tr>
  <tr>
      <td width="100">
<align="center">&nbsp;&nbsp;
    </td>
  </tr>
</table>
  </center>
</div>
</td>
</FORM>
<%
  rs.MoveNext
  loop

Elseif Request.Querystring("retid") = "" Then
  frmRetid = Request.Form("frmRetid")

' strDate = Replace(Request.Form("Date"), vbcrlf, "<br>")
  strDato = Replace(strdato, "'", "''")
  strOverskrift = Replace(Request.Form("overskrift"), "'", "''")
  strTekst = Replace(Request.Form("tekst"), "'", "''")
  strSQL = "Update News Set Date='" & strDato & "', Subject= '" & strOverskrift & "', Text= '" & strTekst & "' Where ID=" & frmRetid
'response.write(strSQL)
  Conn.Execute(strSQL)

Response.Redirect ("ret_main.asp")
 
End if
%>

Jeg får stadig samme fejlbeskrivelse?
Avatar billede viden Nybegynder
16. oktober 2002 - 13:18 #9
Jeg har også prøvet med denne SQL string:
strSQL = "Update News Set [Date]=#" & strDate & "#, Subject= '" & strSubject & "', [Text]= '" & strText & "' Where ID=" & frmRetid

men samme resultat?
Avatar billede viden Nybegynder
16. oktober 2002 - 13:25 #10
strSQL = "Update News Set [Date]=#" & strDato & "#, Subject= '" & strOverskrift & "', [Text]= '" & strTekst & "' Where ID=" & frmRetid
Avatar billede neteffect Nybegynder
16. oktober 2002 - 13:29 #11
Nu får du vist ikke datoen fra formen med (linien er rem'et ud)

Jeg må erkende jeg ikke helt kan følge flow'et

Du har en side med en form. Når form'en subittes, skal kontrollen  gives videre til en ny asp-side (den nævnt i action=), som opdaterer databasen.
Avatar billede viden Nybegynder
16. oktober 2002 - 13:33 #12
Det er samme side
Avatar billede viden Nybegynder
16. oktober 2002 - 13:38 #13
Sluder, det er mig der er ved at køre helt vild i det

ret_main.asp ser sådan ud:

<!--------#include file="../pro-lag.inc"----->
<!-- #INCLUDE FILE="../brugercheck.inc" -->
<%
Dim Conn, DSN, sltid, strSQL, rs
Response.Buffer=false
%>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
connString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../log/safarinews.mdb")
Conn.Open connString
%>
<%
sltid = Request.Querystring("sltid")

If sltid <> "" Then
  SQL = "Delete From News Where ID = " & Request.Querystring("sltid")
  Conn.Execute(SQL)
  Response.Redirect ("ret_main.asp")
  Response.Write ("Den valgte nyhed er nu slettet!")
 
  Else

end if
%>
<html>

<head>
<title>Ret menukortet - ret.asp</title>
<LINK href="../style_test.css" type=text/css rel=stylesheet>
<script language="JavaScript">
function erdusikker() {
  sikker = confirm('Er du helt sikker??? Du kan ikke fortryde dit valg!');
       
  if(sikker == true) {
    return true;
  } else {
    return false;
  }
}
</script>
</head>

<body BACKGROUND="../IMAGES/T.GIF" bgproperties="fixed" topmargin="15">


<br><br>
      <div align="center">
        <center>
      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber3">
        <tr>
          <td width="150" style="border-bottom: 1px solid #000000" >&nbsp;</td>
          <td width="500" style="border-bottom: 1px solid #000000" ><font face="verdana" size="2">Administration i det valgte område
          = </font><font face="verdana" size="2" color="#FF0000">Nyheder</font></td>
          </tr></table>

        </center>
</div>


   


<div align="center">
  <center>
 
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber2">
    <tr>
      <td width="150" valign="top"><!---#include file="menu_includ.asp"---></td>
      <td width="500" valign="top">

     
 
<FORM method="get" name="navn" action="ret_main.asp">

     
      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3">
        <tr>
          <td width="26" bgcolor="#FFCC66"><p align="center"><b><font face="Verdana" size="1">|&nbsp;RET&nbsp;|</font></b></td>
          <td width="32" bgcolor="#FFCC66"><p align="center"><b><font face="Verdana" size="1">&nbsp;SLET&nbsp;|</font></b></td>
          <td width="325" bgcolor="#FFCC66"><b><font face="Verdana" size="1">TEKST</font></b></td>
          <td width="81" bgcolor="#FFCC66"><b><font face="Verdana" size="1">|&nbsp;ÆNDRING</font></b></td>
        </tr>
       
<%
    If Request.QueryString("Id") = "tom" Then
        ElseIf Request.QueryString("Id") = "" Then
%>

    <%   
  Set rs = Conn.Execute("SELECT * FROM " & Request.QueryString("tabel"))
  Do While Not rs.EOF
%> 
        <tr>
          <td width="26"><font face="Verdana" size="1" color="#FFFFFF"><p align="center"><a href="ret.asp?id=<%=rs("ID")%>"><img name="p2" border="0" src="ret.gif" onMouseover="changeImg('ret1.gif', 'p2')" onMouseout="changeImg('ret.gif', 'p2')"></a></font></td>
          <td width="32"><font face="Verdana" size="1" color="#FFFFFF"><p align="center"><%Response.Write "<a href='ret_main.asp?sltid=" & rs("ID") & "' onclick='return(erdusikker())')><img border=0 src=delete.gif></a>"%></font></td>
          <td width="325" valign="top"><b><font face="Verdana" size="1" color="#000000"><%=rs("Subject")%></b><br><%Response.Write rs("Text")%></font></td>
          <td width="81" valign="bottom"><font face="Verdana" size="1" color="#000000"><p align="center"><%=rs("Date")%></font></td>
        </tr>
        <tr>
          <td width="519" colspan="4">
          <p align="center"><font style="font-size: 6pt"></font></p><hr color="#FFCC66" width="91%" size="1"></td>
        </tr>
       
<%
rs.MoveNext
loop       
    End if
'        End if
Conn.Close
Set Conn = Nothing

%>

       
      </table>
  </FORM>
      </td>
    </tr>
  </table>
  </center>
</div>
</body>

</html>
Avatar billede neteffect Nybegynder
16. oktober 2002 - 13:59 #14
Der er nok ingen vej uden om, at du sætter dig grundigt ind i, hvad der foregår.

Indsæt
<%
response.write "linie nnn - nu er værdien af xxx:" & xxx & "<br>"
%>
på passende steder i koden, så du kan følge med. Ret det til trin for trin, så kommer til at virke. Sådan gør de fleste andre.
Avatar billede viden Nybegynder
16. oktober 2002 - 14:02 #15
Jeg for søger virkelig, men det har svær ved at trænge ind i mit hoved:)

Jeg prøver!
Avatar billede rasmusmoller Nybegynder
16. oktober 2002 - 14:13 #16
Er det rigtigt forstået at du forsøger at afvikle følgende SQL mod databasen:

"Update News Set [Date]=##, Subject= '', [Text]= '' Where ID="

Hvis det er tilfældet, skyldes syntaks fejlen at der ikke er angivet et ID, hvilket så igen vel skyldes at du ikke får hentet de korrekte form-felter med i din SQL.

Håber det hjælper...
Avatar billede neteffect Nybegynder
16. oktober 2002 - 14:25 #17
<%
response.write SQL & "<br>"
%>

lige før eksekvering af en query er altid nyttig ved test. Masser af spørgsmål ville aldrig blive stillet her på eksperten, hvis folk bare huskede dét.
Avatar billede rasmusmoller Nybegynder
16. oktober 2002 - 14:26 #18
Hej igen.

Efter lige at have kigget i din kode, vil jeg mene at du skal være varsom med følgende linje:

Set rs = Conn.Execute("SELECT * FROM " & Request.QueryString("tabel"))

Eftersom en ondsindet person kunne give dig følgende url:

ret_main.asp?table=news;drop table news;

hvilket medfører følgende SQL:

SELECT * FROM News; drop table News;

(som dog ikke kan afvikles på en Access database, men uden videre kan afvikles mod f.eks. MS SQL Server)
Avatar billede viden Nybegynder
16. oktober 2002 - 14:51 #19
Jeg prøver at fumle mig frem med jeres forslag og vender tilbage senere.
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