webForumDet fria alternativet

Ändra medlemmars behörighetsnivå

ASP

10 svar · 537 visningar · startad av PixelFix

Medlem sedan juni 200045 inlägg
Frågan#1

Har kikat runt på forumet men inte hittat något inlägg som kan vara till hjälp.
Har en tabell i en access-databas med registrerade medlemmar.
Medlemmar som har registrerat sig får automatiskt behörighets-
nivå 3, som i det här fallet är den lägsta nivån.

På min administrationssida vill jag kunna ändra behörighets-
nivå på en specifik användare.

Sidan där jag ändrar användarens behörighet ser ut enligt följande:

<!-- #INCLUDE FILE="checksessionstatus.asp" -->

<%
IdNr = TRIM( Request( "pid" ) )

Set Con = Server.CreateObject( "ADODB.Connection" )
Set RS = Server.CreateObject("ADODB.Recordset")

Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\dbq\klypan.mdb"
SqlString = "SELECT * FROM Members WHERE IdNr=" & IdNr
RS.Open sqlString, Con
%>

<link rel=stylesheet href="mall_1.css" type="text/css">
<form method="post" action="adm_edit_members.asp?pid=<%=RS("Idnr")%>">
<br>
			<a href="adm_visa_members.asp" target="middleframe"><img src="bilder/pil-v.gif" border="0"></a>
			<a href="logout.asp" target="middleframe"><img src="bilder/kryss.gif" border="0" alt="Logga ut"></a>
				
<table border="1" cellpadding="0" cellspacing="0">

	<tr>
		<td colspan="2">
			<b>Ändra behörighet</b></td>
	</tr>
	<tr>
		<td>
			Användarnamn:</td>
		<td>
			<%=RS("UserName")%></td>
	</tr>
	<tr>
		<td>
			Lösenord:</td>
		<td>
			<%=RS("Password")%></td>
	</tr>
	<tr>
		<td>
			Behörighet:</td>
		<td>
			<input name="level" size="5" value="<%=RS("Level")%>"></td>
	</tr>
	<tr>
		<td>
			&nbsp;</td>
		<td>
			<input type="submit" value="Uppdatera"></td>
	</tr>

</table>
</form>

<%
Con.Close
Set Con = Nothing
%>

Sidan där själva ändringen i databastabellen ska utföras ser ut enligt följande:

<%
FUNCTION fixQuotes( theString )
fixQuotes = REPLACE( theString, "'", "''" )
END FUNCTION

pid = TRIM( Request( "pid" ) )
level = TRIM( Request( "level" ) )

If level = "" THEN
level = "3"
End If

Set Con = Server.CreateObject( "ADODB.Connection" )
Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\dbq\klypan.mdb"
SQLString = "UPDATE Members SET " &_
	"level='" & fixQuotes(level) & "' WHERE IdNr=" & pid
response.write "SQL>" & SQLString & "<br>"

Con.Execute SQLString

Con.Close
Set Con = Nothing
Response.Redirect( "adm_administrerings.asp" )
%>

Men det är här allt slutar att fungera.
Får följande felmeddelande:

HTTP 500.100 - Internal Server Error - ASP error
Internet Information Services
--------------------------------
Error Type:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement.
/klypan/adm_edit_members.asp, line 19

Page:
POST 7 bytes to /klypan/adm_edit_members.asp

POST Data:
level=2

------------------
:q
Vad har jag missat? Vad har jag gjort fel?
Vilken ytterligare information behöver ni?

Medlem sedan juni 200032 967 inlägg
#2

Skriv ut den färdiga SQL-frågan, så är det lättare att felsöka. Istället för att exekvera, response.write sqlstring alltså.

Medlem sedan juni 200045 inlägg
#3

Hmm... men det har jag ju gjort. Eller har jag skrivit det på fel ställe?

Medlem sedan dec. 19996 721 inlägg
#4

Kör en response.end direkt efter utskriften, så borde det lösa sig.

Gör gärna så här:

pid = cInt(trim(Request("pid")))
Medlem sedan juni 200045 inlägg
#5

Lade till response.end och fick följande resultat:
SQL > UPDATE Members SET level='2' WHERE IdNr=65

Det löste sig så tillvida att jag fick utskriften. Men "Syntax error in UPDATE statement" kvarstår.

Medlem sedan dec. 19996 721 inlägg
#6

Är level verkligen ett strängvärde i databasen?

Medlem sedan juni 200045 inlägg
#7

Tabellen Members i min databas har fälten:
IdNr...........Räknare
UserName...Text
Password....Text
Level..........Tal (Heltal)

Medlem sedan feb. 2004230 inlägg
#8

Ska det inte vara:

SQL > UPDATE Members SET level=2 WHERE IdNr=65

Dvs inte level="2" utan level=2

Medlem sedan juni 200045 inlägg
#9

Jo, jag skulle också vilja att det såg ut så.
Har även provat att ha fältet Level i textformat eftersom inga beräkningar ska göras. Jag skulle ju t.ex. kunna köra med behörighetsnivåerna Guld, Silver eller Brons. Men utan framgång.

Medlem sedan juni 200032 967 inlägg
#10

Level är ett reserverat ord i Access. Byt namn på fältet.

http://support.microsoft.com/kb/209187/

Mvh

Medlem sedan juni 200045 inlägg
#11

Jag tackar och bockar. Det var ordet Level som ställde till det.

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)