Benutzer mit den meisten Antworten
Access Datenbank lässt sich nicht öffnen

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:- Bearbeitet Robert BreitenhoferModerator Mittwoch, 21. Juli 2010 11:37 Formatierung
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- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. Juli 2010 11:40
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- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. Juli 2010 11:40
-
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 vornehmeConnectionstring 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- Bearbeitet Robert BreitenhoferModerator Mittwoch, 21. Juli 2010 11:46 Formatierung
-
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