Inledning: Problem 1, är just det som alla skriver ett rättighetsproblem, kolla att IUSR_DatorNamn har de rättigheter som krävs. Tack för snabbt svar. Om du inte har tillgång till serverns själv så är det webbhotellet som skall fixa detta åt dig. UPDATESkapa nya medlemmar och uppdatera befintlig kontaktinfo.
Håller på att göra ett litet administrations system åt en lokal förening. Tanken är att de skall själva kunna lägga till, ta bort, samt uppdatera respektive medlems kontaktinformation. Allt går bra och smidigt, fram till att man skall skapa en ny medlem samt uppdatera befintlig kontaktinformation.
Systemet görs i: ASP
Databas: Access 2000, både databasen och db-mappen har korrekta rättigheter satta.
Typ av connectionstring: Microsoft.Jet.OLEDB.4.0
Server: Webbhotell med Windows 2000 Server
Problem 1: Skapa ny medlem:
Först kommer man till ett vanligt html dokument med ett vanligt formulär, inga konstigheter så här långt. Se nedan:
<form action="skapamedlem.asp" method="post" name="skapamedlem">
<table width="400" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="48%"><strong>Företag</strong></td>
<td width="52%"> </td>
</tr>
<tr>
<td width="48%"><input name="foretag" type="text"></td>
<td width="52%"> </td>
</tr>
<tr>
<td width="48%"><strong>Förnamn</strong></td>
<td width="52%"><strong>Efternamn</strong></td>
</tr>
<tr>
<td width="48%"><input name="fornamn" type="text"></td>
<td width="52%"><input name="efternamn" type="text"></td>
</tr>
<tr>
<td width="48%"><strong>Gatuadress</strong></td>
<td width="52%"> </td>
</tr>
<tr>
<td width="48%"><input name="gatuadress" type="text"></td>
<td width="52%"> </td>
</tr>
<tr>
<td width="48%"><strong>Postnr</strong></td>
<td width="52%"><strong>Ort</strong></td>
</tr>
<tr>
<td width="48%"><input name="postnr" type="text"></td>
<td width="52%"><input name="ort" type="text"></td>
</tr>
<tr>
<td width="48%"><strong>Telefon</strong></td>
<td width="52%"><strong>Fax</strong></td>
</tr>
<tr>
<td width="48%"><input name="telefon" type="text"></td>
<td width="52%"><input name="fax" type="text"></td>
</tr>
<tr>
<td width="48%"><strong>E-post</strong></td>
<td width="52%"><strong>Hemsida</strong></td>
</tr>
<tr>
<td width="48%"><input name="epost" type="text"></td>
<td width="52%"><input name="hemsida" type="text"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><input name="btnSkicka" type="submit" value=" Skapa medlem "></td>
</tr>
</table></form>
ASP koden i filen skapamedlem.asp.
<%
Dim foretag, fornamn, efternamn, gatuadress, postnr, ort, telefon, fax, epost, hemsida
foretag = Request.Form("foretag")
fornamn = Request.Form("fornamn")
efternamn = Request.Form("efternamn")
gatuadress = Request.Form("gatuadress")
postnr = Request.Form("postnr")
ort = Request.Form("ort")
telefon = Request.Form("telefon")
fax = Request.Form("fax")
epost = Request.Form("epost")
hemsida = Request.Form("hemsida")
objConn.Execute("INSERT INTO medlemmar(foretag, fornamn, efternamn, gatuadress, postnr, ort, telefon, fax, epost, hemsida) VALUES ('"& Request.Form("foretag") &"','"& Request.Form("fornamn") &"','"& Request.Form("efternamn") &"','"& Request.Form("gatuadress") &"','"& Request.Form("postnr") &"','"& Request.Form("ort") &"','"& Request.Form("telefon") &"','"& Request.Form("fax") &"','"& Request.Form("epost") &"','"& Request.Form("hemsida") &"')")
objConn.Close
Set objConn = Nothing
%>
Ovanstående ASP kod genererar detta fel:
Microsoft JET Database Engine fel '80004005'
Operationen måste använda en fråga som kan uppdateras.
/admin/secure/webdocs/skapamedlem.asp, line 19
Rad 19 är hela kodblocket med objConn.Execute.
Jag har läst en del olika inlägg i forum om detta och de flesta säger att det har med rättigheter att göra. Men nu är det så att både databasfilen och mappen som den ligger i har både läs- och skrivrättigheter, och webbhotellet har de senaste drivrutinerna för bl a ADO och JET. Har pratat med min kompis som äger webbhotellet, och han har kollat både databasen och mappen, och rättigheterna är korrekta. Han hävdar att det antagligen är något fel i koden. Frågan är då, var?
Problem 2: Nästa problem är att uppdatera befintlig kontaktinformation.
Första sidan är ett formulär som hämtar informationen i databasen för den valda medlemmen och visar detta i textfält, detta fungerar utan problem. Se nedan:
ASP kod som hämtar informationen till formuläret:
<%
Dim objRS 'Recordset
Dim strSQL 'SQL förfrågan
Dim id 'ID numret som skall uppdateras
'Läs in idnumret som skall uppdateras
id = Request.QueryString("id")
'Skapa ett ADO recordset objekt
Set objRS = Server.CreateObject("ADODB.Recordset")
'Gör en förfrågan till databasen
strSQL = "SELECT * FROM medlemmar WHERE id=" & id
objRS.Open strSQL, objConn
%>
Formuläret med informationen som skall uppdateras
<form action="uppdatera_medlem.asp" method="post" name="uppdateramedlem">
<table width="400" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="48%"><strong>Företag</strong></td>
<td width="52%"><strong>ID</strong> <%=objRS("id")%></td>
</tr>
<tr>
<td width="48%"><input name="txtForetag" type="text" id="txtForetag" value="<%=objRS("foretag")%>"></td>
<td width="52%"> </td>
</tr>
<tr>
<td width="48%"><strong>Förnamn</strong></td>
<td width="52%"><strong>Efternamn</strong></td>
</tr>
<tr>
<td width="48%"><input name="txtFornamn" type="text" id="txtFornamn" value="<%=objRS("fornamn")%>"></td>
<td width="52%"><input name="txtEfternamn" type="text" id="txtEfternamn" value="<%=objRS("efternamn")%>"></td>
</tr>
<tr>
<td width="48%"><strong>Gatuadress</strong></td>
<td width="52%"> </td>
</tr>
<tr>
<td width="48%"><input name="txtGatuadress" type="text" id="txtGatuadress" value="<%=objRS("gatuadress")%>"></td>
<td width="52%"> </td>
</tr>
<tr>
<td width="48%"><strong>Postnr</strong></td>
<td width="52%"><strong>Ort</strong></td>
</tr>
<tr>
<td width="48%"><input name="txtPostnr" type="text" id="txtPostnr" value="<%=objRS("postnr")%>"></td>
<td width="52%"><input name="txtOrt" type="text" id="txtOrt" value="<%=objRS("ort")%>"></td>
</tr>
<tr>
<td width="48%"><strong>Telefon</strong></td>
<td width="52%"><strong>Fax</strong></td>
</tr>
<tr>
<td width="48%"><input name="txtTelefon" type="text" id="txtTelefon" value="<%=objRS("telefon")%>"></td>
<td width="52%"><input name="txtFax" type="text" id="txtFax" value="<%=objRS("fax")%>"></td>
</tr>
<tr>
<td width="48%"><strong>E-post</strong></td>
<td width="52%"><strong>Hemsida</strong></td>
</tr>
<tr>
<td width="48%"><input name="txtEpost" type="text" id="txtEpost" value="<%=objRS("epost")%>"></td>
<td width="52%"><input name="txtHemsida" type="text" id="txtHemsida" value="<%=objRS("hemsida")%>"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<input type="hidden" name="id" value="<%=objRS("id")%>">
<input name="btnSkicka" type="submit" id="btnSkicka" value=" Uppdatera medlem "></td>
</tr>
</table>
</form>
Inga konstigheter så här långt. Nedanstående kodblock är det som skall uppdatera kontaktinformationen. Och den ger mig lite huvudbry. Den genererar fölande felmeddelande:
Microsoft JET Database Engine fel '80040e14'
Syntaxfel (operator saknas) i frågeuttrycket 'id='.
/admin/secure/webdocs/uppdatera_medlem.asp, line 21
Rad 21 är hela kodblocket med ”UPDATE medlemmar SET…”
<%
Dim id, foretag, fornamn, efternamn, gatuadress, postnr, ort, telefon, fax, epost, hemsida
Dim strSQL
id = Request.QueryString("id")
foretag = Request.Form("foretag")
fornamn = Request.Form("fornamn")
efternamn = request.Form("efternamn")
gatuadress = request.form("gatuadress")
postnr = request.form("postnr")
ort = request.form("ort")
telefon = request.form("telefon")
fax = request.form("fax")
epost = request.form("epost")
hemsida = request.form("hemsida")
strSQL = ("UPDATE medlemmar SET nyhetstext='" & Replace(foretag,"'","''") & "', fornamn='" & Replace(fornamn,"'","''") & "', efternamn='" & Replace(efternamn,"'","''") & "', gatuadress='" & Replace(gatuadress,"'","''") & "', postnr='" & Replace(postnr,"'","''") & "', ort='" & Replace(ort,"'","''") & "', telefon='" & Replace(telefon,"'","''") & "', fax='" & Replace(fax,"'","''") & "', epost='" & Replace(epost,"'","''") & "', hemsida='" & Replace(hemsida,"'","''") & "' WHERE id=" & Request.QueryString("id"))
objConn.Execute(strSQL)
objConn.Close
Set objConn = Nothing
%>
Det här var visserligen en hel del information men jag tyckte att det var lika bra att ta med allt från början, då det kanske blir lite lättare för er att förstå det hela.
Det är viktigt för mig att jag får en klarhet i dessa problem och vad som är fel och om det går att lösa. Det är antagligen väldigt simpla problem, men ibland är det lätt att bli ”hemmablind”.
Tacksam för all hjälp.
-TomasSv: Skapa nya medlemmar och uppdatera befintlig kontaktinfo.
Problem 2, det står i felmeddelandet att ID inte har något värde, du får kolla varför den inte har det för, oftast har man stavat fel på något ställe.
//Anna-KarinSv: Skapa nya medlemmar och uppdatera befintlig kontaktinfo.
En dum fråga bara, ang rättigheter för IUSR_DatorNamn är detta något som jag skall ta upp med webbhotellet eller är det något som jag kan göra själv med databasfilen, och i sådana fall hur?Sv: Skapa nya medlemmar och uppdatera befintlig kontaktinfo.
Oftast så har de flesta webbhotell en mapp som ligger ovanför rootmappen där man ska lägga sina databasen.
//Anna-KarinSv: Skapa nya medlemmar och uppdatera befintlig kontaktinfo.
I UPDATE-strängen finns ett fältnamn som inte verkar vara rätt. Det står 'nyhetstext' där du lägger in företagsnamnet. Ska det vara så?
Svenne