none
Access Datenbank lässt sich nicht öffnen RRS feed

  • Frage

  • Hallo,
    ich verwende für meine Website eine Accessdatenbank, da ich die Daten online ebenfalls in Access verwalte und der Import so ewinfacher zu gestalten ist. Ferner wird sich die Datenbank in den nächsten 5 Jahren auf max. 10.000 Datensätze bewegen.

    Mit Aufruf "In Browser anzeigen" geht alles aus Webdeveloper Express 2010. Dei Daten werden über ein Dataset abgerufen. Funktioniert in diesem Fall absolut perfekt. Die Acceess Datenbank liegt im Unterverzeichnis App_Data. Bei Ablage der Site auf einem Homeserver zum Testen über das Intranet und Aufruf von einem anderen PC mit dem IE-Explorer kommt jedoch die Fehlermeldung. Wenn ich dann das ganze wieder aus Web Developer "Im Browser ansehen " öffne funkt wieder alles. Wie kann ich hier vorgehen. Muss ich das Verzeichniss und die Datei explizit freigeben?

    Code des Datenabrufs

    ' Inistialisieren einer neuen Instanz des Datasets PD_Beantragen
    Dim PD_Beantragen As New PD_Beantragen()
    
    ' Neue Instanz der Klasse PD_BeantragenTableAdapters.PD_BeantragenTableAdapter() anlegen
    Dim PD_BeantragenSQLAdapter As New PD_BeantragenTableAdapters.PD_BeantragenTableAdapter
    
    ' Anlegen einer Datentabelle im Dataset PD_Beantragen als neue Klasse DataTable
    Dim PD_BantragenTabelle As New PD_Beantragen.PD_BeantragenDataTable
    
    ' Anlegen neuer Klasse Datarows als PD_Beantragen.PD_BeantragenRow() in welcher der abgerufen Datensatz abgelegt wird
    Dim PDAnwenderDaten As PD_Beantragen.PD_BeantragenRow()
    
    ' Übergeben des Benutzernamen aus der Eingabemaske
    Dim Benutzername As String = _benutzer.Text
    
    ' Abrufen des Datensatz aus der Tabelle in das Dataset im Speicher
    PD_BeantragenSQLAdapter.KundeKomplett(PD_BantragenTabelle, Benutzername)
    
    ' Übertragen der abgerufenen Daten in die Row-Klasse zum Lesen und Bearbeiten. Diese ist ein String, in der die Daten abgerufen könenn mit "PD_Beantragen("Arraynummer z. Bsp. 0 bei einem Datensatz")."Spaltenname"
    PDAnwenderDaten = PD_BantragenTabelle.Select()
    
    Session("PDAnwenderDaten") = PDAnwenderDaten

    Fehlermeldung

    Das Microsoft Jet-Datenbankmodul kann die Datei '\\VIDEOSERVER\Öffentlich\Baufinanz Homepage\App_Data\baufinanz-direkt.mdb' nicht öffnen. Sie ist bereits von einem anderen Benutzer exklusiv geöffnet, oder Sie benötigen eine Berechtigung, um die Daten lesen zu können.

    Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

    Ausnahmedetails: System.Data.OleDb.OleDbException: Das Microsoft Jet-Datenbankmodul kann die Datei '\\VIDEOSERVER\Öffentlich\Baufinanz Homepage\App_Data\baufinanz-direkt.mdb' nicht öffnen. Sie ist bereits von einem anderen Benutzer exklusiv geöffnet, oder Sie benötigen eine Berechtigung, um die Daten lesen zu können.

    Quellfehler:

    Zeile 8745: dataTable.Clear();

    Zeile 8746: }

    Zeile 8747: int returnValue = this.Adapter.Fill(dataTable);

    Zeile 8748: return returnValue;

    Zeile 8749: }


    Quelldatei: c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\36ce1b54\1b928746\App_Code.snmy5p16.0.cs    Zeile: 8747

    Stapelüberwachung:
    Mittwoch, 21. Juli 2010 09:11

Antworten

  • Hallo lothar,

    Ausnahmedetails: System.Data.OleDb.OleDbException: Das Microsoft Jet-Datenbankmodul kann die Datei '\\VIDEOSERVER\Öffentlich\Baufinanz Homepage\App_Data\baufinanz-direkt.mdb' nicht öffnen. Sie ist bereits von einem anderen Benutzer exklusiv geöffnet, oder Sie benötigen eine Berechtigung, um die Daten lesen zu können.

    wie sieht dein ConnectionString für die OleDbConnection aus? Wie ist der Code für die Abfrage der Daten aufgebaut? (Oder verwendest Du da eine der "Blackboxes" wie bspw. AccessDataSource oder ähnliches?)

    Der Pfad \\Videoserver\... deutet auf einen UNC Share auf einem Server hin. Das ist generell keine gute Idee. Die MDB solltest Du nicht in App_Data ablegen, sondern in einem separaten Ordner außerhalb der Website. Wenn benötigt, kann dieser Ordner dann als virtuelles Verzeichnis im IIS wieder in die Website integriert werden.

    Zusätzlich solltest Du die Berechtigungen prüfen: NETZWERKDIENST bzw. NETWORK SERVICE, alternativ IIS_IUSRS, IIS_WPG oder ASPNET sollten das Recht "Ändern" auf das Datenbankverzeichnis haben. Welcher Account genau jetzt verwendet werden muss, hängt von deiner Anwendung, der IIS Version, den Einstellungen, ... ab.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 21. Juli 2010 10:50
    Moderator

Alle Antworten

  • Hallo lothar,

    Ausnahmedetails: System.Data.OleDb.OleDbException: Das Microsoft Jet-Datenbankmodul kann die Datei '\\VIDEOSERVER\Öffentlich\Baufinanz Homepage\App_Data\baufinanz-direkt.mdb' nicht öffnen. Sie ist bereits von einem anderen Benutzer exklusiv geöffnet, oder Sie benötigen eine Berechtigung, um die Daten lesen zu können.

    wie sieht dein ConnectionString für die OleDbConnection aus? Wie ist der Code für die Abfrage der Daten aufgebaut? (Oder verwendest Du da eine der "Blackboxes" wie bspw. AccessDataSource oder ähnliches?)

    Der Pfad \\Videoserver\... deutet auf einen UNC Share auf einem Server hin. Das ist generell keine gute Idee. Die MDB solltest Du nicht in App_Data ablegen, sondern in einem separaten Ordner außerhalb der Website. Wenn benötigt, kann dieser Ordner dann als virtuelles Verzeichnis im IIS wieder in die Website integriert werden.

    Zusätzlich solltest Du die Berechtigungen prüfen: NETZWERKDIENST bzw. NETWORK SERVICE, alternativ IIS_IUSRS, IIS_WPG oder ASPNET sollten das Recht "Ändern" auf das Datenbankverzeichnis haben. Welcher Account genau jetzt verwendet werden muss, hängt von deiner Anwendung, der IIS Version, den Einstellungen, ... ab.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 21. Juli 2010 10:50
    Moderator
  • Hallo Stefan, danke für die schnelle Antwort

    habe mittlerweise den Auslöser gefunden.
    Im Connectionstring ist die Datenbank als Reeller Pfad angegeben. Das Verzeichnis in dem ich die Entwicklung vornehme

    Connectionstring dieser Anbindung lautet jetzt. Physischen Pfad durch DataDirectory ersetzt

    connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\baufinanz-direkt.mdb;Persist Security Info=True"



    Jetzt lädt er den angeforderten Kundensatz und öffnet die Nächste Seite fehlerfrei. Die Felder sin mit den Daten gefüllt. Wenn ich hier jedoch auf den Weiterbutton klicke werden die geänderten oder neu eingegebenen Daten in den Feldern dieser Seite mit der Update SQLfunction in die Datenbank zurückgeschrieben. Das funkt in der Browservorschau auch immer und korrekt. Der Updatestring wurde im Dataset generiert.
    ******* String für Dataset ****
    UPDATE       PD_Beantragen
    SET          VorhabenMitKredit =?, GroesseNeuerKredit =?, RatenzahlNeuerKredit =?, RatenhoeheNeuerKredit =?
    WHERE        (Benutzer = ?)
    *******
    Über das Netz kommt auch hier ein Fehler der mir aber auch gar nichts sagt. Muss gestehen, dass ich bisher nur unser Verwaltungsprogramm unter Visual Foxpro 8 programmiert habe und die Webanweundung Neuland ist. Kann mir aber keinen Programmierer leisten :)

    Dim _PDUpdateKreditart As New PD_BeantragenTableAdapter
    Dim VorhabenMitKredit As String = VerwendungNeuerRatenkredit.SelectedValue
    Dim GroesseNeuerKredit As String = RatenKredithoehe.Text
    Dim RatenzahlNeuerKredit As String = _Rate.SelectedValue
    Dim RatenhoeheNeuerKredit As String = Monatsrate.Text
    Dim AnZahlDatenSaetze As Integer
    Session("VorhabenMitKredit") = VorhabenMitKredit
    Session("GroesseNeuerKredit") = GroesseNeuerKredit
    Session("RatenzahlNeuerKredit") = RatenzahlNeuerKredit
    Session("RatenhoeheNeuerKredit") = RatenhoeheNeuerKredit
    Session("SeitenLadezahl") = 0
    Dim Benutzername As String = Session("benutzer")
    
    AnZahlDatenSaetze = _PDUpdateKreditart.PDUpdateKreditart(VorhabenMitKredit, GroesseNeuerKredit, RatenzahlNeuerKredit, RatenhoeheNeuerKredit, Benutzername)



    **** Fehlermelddung *****

    Operation muss eine aktualisierbare Abfrage verwenden.

    Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

    Ausnahmedetails: System.Data.OleDb.OleDbException: Operation muss eine aktualisierbare Abfrage verwenden.

    Quellfehler:

    Zeile 10069:   int returnValue;
    Zeile 10070:   try {
    Zeile 10071:    returnValue = command.ExecuteNonQuery();
    Zeile 10072:   }
    Zeile 10073:   finally {

    Quelldatei: c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\36ce1b54\1b928746\App_Code.o6hdytmf.0.cs    Zeile: 10071

    Stapelüberwachung:

    [OleDbException (0x80004005): Operation muss eine aktualisierbare Abfrage verwenden.]
     System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +1070856
     System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +247
     System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +194
     System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +58
     System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +167
     System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +113
     PD_BeantragenTableAdapters.PD_BeantragenTableAdapter.PDUpdateKreditart(String VorhabenMitKredit, String GroesseNeuerKredit, String RatenzahlNeuerKredit, String RatenhoeheNeuerKredit, String Original_Benutzer) in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\36ce1b54\1b928746\App_Code.o6hdytmf.0.cs:10071
     ASP.site_ratenkredit_beantragen_startseite_aspx.Button1_Click(Object sender, EventArgs e) in C:\Inetpub\wwwroot\site\ratenkredit_beantragen_startseite.aspx:157
     System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
     System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
     System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
     System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
     System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
     System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
    

     

    Danke und grüße

    Lothar

    Mittwoch, 21. Juli 2010 11:09
  • Hallo Lothar,
    [OleDbException (0x80004005): Operation muss eine aktualisierbare Abfrage verwenden.]

    dagegen hilft dann zu 99% mein Hinweis mit den Berechtigungen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 21. Juli 2010 11:17
    Moderator
  • Hallo Stefan,

    ich verneige mich vor dir. Danke. Jetzt funkts.

    Grüße

    Lothar

    Mittwoch, 21. Juli 2010 11:36