Zugriffsverletzung
Klaus
- datenbank
Habe folgendes Problem:
Ich habe eine Access 97 Datenbank in einem ASP-Skript angebunden ...
<%
Session.timeout = 2
If IsObject(Session("Speiseplan_conn")) Then
Set conn = Session("Speiseplan_conn")
Else
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "Speiseplan","",""
Set Session("Speiseplan_conn") = conn
End If
%>
<%/*SQL Statement*/
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
%>
Während das ASP ausgeführt wird, d.h. jemand die Daten im Browser anschaut, kann die Datenbank nicht unter Access geöffnet werden.
Wie kann ich das verhindern?
Danke für jede Info !
Hi,
auch ohne von ASP Ahnung zu haben...
Probier mal:
Access-Datenbank öffnen. Extras | Optionen | Weitere: Standard-öffnungsmodus auf gemeinsame Nutzung stellen
HTH
Daniel
Hallo Daniel,
<%
Session.timeout = 2
If IsObject(Session("Speiseplan_conn")) Then
Set conn = Session("Speiseplan_conn")
Else
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "Speiseplan","",""
Set Session("Speiseplan_conn") = conn
End If
dieses Konstrukt sollte man nicht verwenden. Warum muß die connection-Objektinstanz in einer Sessionvariablen gespeichert werden?
Wenn das nicht unbedingt nötig ist - und ich sehe keinen Grund - ist es zu vermeiden:
Sessionvariablen dienen der Speicherung userbezogener Informationen und nicht als Objektinstanzaufbewahrungsbehälter. Die Ojektinstanz conn hat als scope(Lebensdauer) die Seite (i.e. Scriptauführungszeit), wenn sie über die Methode server.createobject() erzeugt wurde, die Variable "Speiseplan_conn" 'lebt' hingegen mindestens bis zum session-timeout. Danach ist unklar, ob die Objektinstanz nach session-Ende sauber freigegeben wird, ein derartiger Automatismus ist mir hier - im Gegensatz zu einer regelrecht erzeugten Instanz bei Seitenende - nicht bekannt. Das gleiche gilt, wenn die Instanz nicht regelrecht erzeugt, sondern aus einer Sessionvariablen geholt wurde.
Während das ASP ausgeführt wird, d.h. jemand die Daten im Browser anschaut, kann die Datenbank nicht unter Access geöffnet werden.
Genau das kann nun Folge des session-Konstrukts sein (die Verbindung des Servers zur Datenbank ist nicht gelöst).
Zusätzlich zu dem (ebenfalls richtigen) Rat meines Vorredners: verwende mal nur:
set conn = server.createobject("adodb.connection")
conn.open "...","...","..."
---
---
conn.close
set conn = nothing
Grüße
Uwe Nohl