Klaus: Zugriffsverletzung

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 !

  1. Hi,

    auch ohne von ASP Ahnung zu haben...
    Probier mal:
    Access-Datenbank öffnen. Extras | Optionen | Weitere: Standard-öffnungsmodus auf gemeinsame Nutzung stellen

    HTH
    Daniel

  2. 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