Gæstebog og access-database
Hej.Roder lidt med min første ASP-gæstebog og har lidt problemer. Har nu hentet adskillige gæstebøger men problemet lader til at være det samme.
Jeg kan sagtens se startside med indtastningsfelter mv. men så snart jeg vil skrive disse data til database(guestbook.mdb) så laver den fejl.
I nuværende tilfælde siger den:
------------------------
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only.
/guestbook.asp, line 36
------------------------
Jeg kan sagtens skrive til databasen manuelt(altså fra Access), men via IE virker det tydeligvis ikke.
Hvad mangler jeg at gøre med databasen så det fungerer?
Jeg har min guestbook.mdb til at ligge sammen med guestbook.asp i C:\Inetpub\wwwroot
På forhånd tak
Mads
Koden er venligst lånt af nedenstående ophavsmand.
<%
' --------------------------------------------------------------------------------
' Dette eksempel er skrevet af Dennis Knappe ( info@activeserverpages.dk )
' Eksemplet kan downloades fra http://www.activeserverpages.dk
' Scriptet kan frit anvendes til ikke kommercial brug, ønsker du at bruge scriptet
' i et kommercial sammenhæng kontakt da venligst Dennis Knappe
' --------------------------------------------------------------------------------
Const adOpenKeyset = 1
Const adLockOptimistic = 3
strMode = Request.QueryString("mode")
tempConn = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("guestbook.mdb") & ";UID=admin;PWD=;"
If Request.Form("Gem") <> "" Then
strError = ""
strNavn = Trim(Request.Form("Navn"))
strEmail = Trim(Request.Form("Email"))
strKommentar = Trim(Request.Form("Kommentar"))
If Len(strNavn) = 0 Then
strError = "<li>Du skal skrive dit navn!</li>"
ElseIf validateEmail(strEmail) = False Then
strError = "<li>Du skal skrive en gyldig e-mail adresse!</li>"
ElseIf Len(strKommentar) = 0 Then
strError = "<li>Du skal skrive en kommentar!</li>"
End If
If Len(strError) = 0 Then
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM Guestbook WHERE (ID = 0)"
rs.Open strSQL, tempConn, adOpenKeyset, adLockOptimistic
If (rs.BOF Or rs.EOF) Then
rs.AddNew
rs("Navn") = Server.HTMLEncode(strNavn)
rs("Email") = Server.HTMLEncode(strEmail)
rs("Kommentar") = Server.HTMLEncode(strKommentar)
rs("Dato") = Now()
rs.Update
End If
rs.Close
Set rs = Nothing
Else
strError = "<p><ul><font color=#FF0000>" & strError & "</font></ul></p>"
strMode = "add"
End If
End If
%>
<html>
<head>
<title>Gæstebogen</title>
</head>
<body>
<div align="center"><center><table border="0" width="600" cellspacing="0" cellpadding="3" style="border-left: 1px solid rgb(0,0,0); border-right: 1px solid rgb(0,0,0); border-top: 1px solid rgb(0,0,0); border-bottom: 2px solid rgb(0,0,0)">
<tr>
<td width="100%" bgcolor="#000000"><p><font face="verdana" size="4" color="#FFFFFF"><strong>Gæstebogen</strong></font></td>
</tr>
<tr>
<td width="100%">
<%
Select Case strMode
Case "add"
%>
<form method="POST" action="guestbook.asp">
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td valign="middle" align="left" colspan="2"><font face="verdana" size="2"><br>Indtast venligst oplysningerne i følgende felter:<strong>
<%=strError%></td>
</tr>
<tr>
<td valign="middle" align="left"><div align="right"><p><strong><font face="verdana" size="2">Navn</font></strong></td>
<td valign="middle" align="left"><input type="text" name="Navn" size="40" value="<%=strNavn%>"></td>
</tr>
<tr>
<td valign="middle" align="left"><div align="right"><p><strong><font face="verdana" size="2">E-mail</font></strong></td>
<td valign="middle" align="left"><input type="text" name="Email" size="40" value="<%=strEmail%>"></td>
</tr>
<tr>
<td valign="top" align="left"><div align="right"><p><strong><font face="verdana" size="2">Kommentar</font></strong></td>
<td valign="middle" align="left"><textarea rows="3" name="Kommentar" cols="40"><%=strKommentar%></textarea></td>
</tr>
<tr>
<td valign="middle" align="left" colspan="2"><br>
<input type="submit" value="Gem" name="Gem"> <input type="button" value="Annuller" name="Annuller" onClick="java script:location.href='guestbook.asp'"></td>
</tr>
</table>
</form>
<%
Case Else
strAddLine = "<p><img src=add.gif width=16 height=16> <a href=guestbook.asp?mode=add><strong><font face=verdana size=2>Skriv et indlæg i min gæstebog!</font></strong></a></p>"
Response.Write strAddLine
strSQL = "SELECT * FROM Guestbook ORDER BY Dato DESC;"
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open tempConn
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
Response.Write "<table width=100% border=0 cellpadding=1 cellspacing=1>"
Do While Not rs.EOF
dtmDato = rs("Dato")
dtmDato = FormatDateTime(dtmDato,vbLongDate) & " kl. " & FormatDateTime(dtmDato,vbLongTime)
Response.Write "<tr bgcolor=#C0C0C0><td width=""100%""><font face=verdana size=2>" & dtmDato & "</td></tr>"
If Len(rs("Email")) > 0 Then
Response.Write "<tr><td><font face=verdana size=2><strong><a href=mailto:" & rs("Email") & ">" & rs("Navn") & "</a> skriver:</strong></td></tr>"
Else
Response.Write "<tr><td><font face=verdana size=2><strong>" & rs("Navn") & " skriver:</strong></td></tr>"
End If
Response.Write "<tr><td><font face=verdana size=2>" & rs("Kommentar") & "<br> </td></tr>"
rs.MoveNext
Loop
Response.Write "</table>"
Else
Response.Write "<p><font face=verdana size=2>Der er endnu ikke nogle der har skrevet i gæstebogen</font></p>"
End If
myConn.Close
Set myConn = Nothing
Response.Write strAddLine
End Select
%>
</tr>
<tr align="center">
<td width="100%" bgcolor="#000000"><strong><font face="verdana" size="4"><div align="center"><center><p></font></strong><font face="Verdana" size="1" color="#FFFFFF">Dette
eksempel er skrevet af Dennis Knappe<br>
Eksemplet kan downloades fra <a href="http://www.activeserverpages.dk">http://www.activeserverpages.dk</a></font></td>
</tr>
</table>
</center></div>
</body>
</html>
<script language="VBScript" runat="Server">
Function validateEmail(strEmail)
validateEmail = True
If Len(strEmail) < 6 Then
validateEmail = False
End If
If InStr(1, strEmail, "@", 1) < 2 Then
validateEmail = False
End If
If InStr(1, strEmail, ".", 1) = 0 Then
validateEmail = False
End If
pos = InStr(1, strEmail, "@", 1)
If pos < 2 Then
validateEmail = False
Else
pos = InStr(pos+1, strEmail, "@")
If pos > 0 Then
validateEmail = False
End If
End If
End Function
</script>
