OLEDBConnection.Open = AccessViolationException

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von steel75.

    OLEDBConnection.Open = AccessViolationException

    Moin zusammen,
    ich habe hier ein sehr seltsames Verhalten. Ich schreibe gerade an einer Datenbank Anwendung, die mittels OLEDB auf eine *.accdb zugreift. Bei mir zu Hause funktioniert sie auch
    ohne Probleme. Nur hier in der Firma funktioniert sie überhaupt nicht. Jetzt habe ich gerade meinen Firmen PC neu installiert Windows 10 pro 1903 und wieder Office 2016 pro plus + Visual Studio 2017
    + Access Database Engine 2010 installiert und habe schon wieder diesen Fehler...

    System.AccessViolationException : "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist."


    Der Speicher ist vollkommen in Ordnung der wurde letzte Woche ausgetauscht von 2 x 4GB auf jetzt 2 x 8GB, daran kann es nicht liegen. Die Datenbank Datei wird beim ersten Start
    automatisch mit ADOx erstellt, dies funktioniert auch. Die Access Datei kann mit Passwort geöffnet werden, es wird bei Start nur eine Tabelle in der Datenbank erzeugt diese heißt
    LK_Payment_2019. Beim Start werden dann alle Tabellennamen der Datenbank ausgelesen und in eine Combobox gepackt. Ich habe mal manuell die Tabelle in der DB kopiert und
    LK_Payment_2020 genannt und beide Tabellen sind in der Combobox drin.

    Nun soll beim ändern der Combobox also Auswahl (DropDownClosed Event) einer Tabelle der Inhalt geladen werden, der ist natürlich jetzt noch nicht da. Aber normalerweise wird dann einfach der Header
    angezeigt. Ich rufe hier also mit dem Tabellennamen (LK_Payment_2019) die fillLKPayment Methode auf und darin knallt es

    VB.NET-Quellcode

    1. Dim LKDB As New OleDbConnection(getProviderString) '>> holt den DataProvider Provider=Microsoft.ACE.OLEDB.12.0....;
    2. Dim SQLString As String = "SELECT * FROM " & sTablename & ";"
    3. Dim DBDataadapter As OleDbDataAdapter
    4. Dim DBDataset As New DataSet
    5. resetDGV() 'resettet das Datagridview
    6. LKDB.Open() '<<<**********hier knallts************
    7. DBDataadapter = New OleDbDataAdapter(SQLString, LKDB)
    8. DBDataadapter.Fill(DBDataset, sTablename)
    9. DBDataadapter.Dispose()
    10. LKDB.Close()
    11. frmMain.dgv_LKPayment.DataSource = DBDataset.Tables(sTablename)


    Ich habe schon mit Debuggen die Variablen überprüft, ob irgendwas leer ist oder der gleichen, aber DB Pfad und Kennwort sind drin und passen auch und es wird ja auch das Schema ausgelesen und das geht auch über
    den Dataprovider und da knallt nix.

    Das wirklich seltsame ist das es bei mir zu Hause auf meinem iMac Pro mit Windows 10 pro 1903 Visual Studio 2017 pro + Office365 (Office 2016) + Access Database Engine 2010 x86 funktioniert
    kein Fehler kein Absturz, ich wähle nach dem Start, aus der Combobox die Tabelle aus und zack, Tabellen Header wird geladen und angezeigt, nicht der Hauch eines Fehlers und hier bei der Arbeit geht es nicht.

    Jetzt habe ich die *.exe Datei einem Kollegen gegeben, der hat vor meinen Augen die Access Database Engine runtergeladen und installiert und auch dort kommt von net Framework eine Fehlermeldung
    mit Weiter und Beenden. Aber bei ihm wird wenigstens noch der Header angezeigt.

    Ich steh hier vor einem Rätsel und hab mittlerweile keine Idee mehr woran das liegen könnte.
    Hat das schon mal einer gehabt, woran könnte das liegen?!

    Schon mal danke für eure Hilfe
    VG steel
    UMS vorwegzunehmen: Ich weisses auch nicht.
    Früher hatte Access 2 Connectionstrings, mal musste man Jet-OleDB nehmen mal ACE-OleDb. War von System zu System unterschiedlich, also den jeweils anneren mal auszuprobieren hat eine gewisse ErfolgsAussicht.
    Allerding kam da immer eine andere Fehlermeldung - nicht AccessViolation.
    Aber vlt. haben sie sich mit Office365 nochmal was neues überlegt.
    ConnectionStrings findeste auf
    connectionstrings.com/


    Ansonsten, wenn du für eine Single-User-Anwendung codest, kannste die Datenbank evtl. auch ganz weglassen.
    ein Dataset lädt und speichert man viel einfacher mit Dataset.ReadXml/.WriteXml
    ja also ich hab jetzt einfach mal 10 Programme von mir die auch alle nach dem selben System arbeiten untersucht nach Unterschieden, aber bis jetzt nichts gefunden. Auch funktionieren diese Programme
    auf meinem Firmen PC, wenn ich in der Config.ini den DB Pfad anpasse.

    Und wie gesagt zu Hause läufts ohne Probleme. Nur hier auf meinem Firmen PC, dem vom Azubi und meinem Kollegen da geht's nicht und ich krieg System.AccessViolationException. Mein PC hab ich heute morgen
    eben wegen dieses Fehlers platt gemacht. Aber bis heute Morgen dachte ich es liegt daran, dass hier vorher ein Office 2016 Standard drauf war und sich da beim ändern auf Office 2016 professional plus was zerschossen
    hätte. Ich werde den Rechner jetzt noch mal platt machen und das alles testen ohne Domain Beitritt
    VG steel
    Also ich hab den Grund nun gefunden es liegt ganz klar an Office 2016 professional plus im Zusammenspiel mit Access Database Engine 2010.

    nach der Windows 10 pro 1903 Installation nur Visual Studio 2017 community + Access Database Engine installiert und es geht kein Fehler.
    Rechner wieder in die Domäne gebracht, geht immer noch. Office 2016 professional plus installiert, es geht nicht mehr. Beim Event
    Combobox Close DGV soll befüllt werden, Absturz mit der selben Meldung. Jetzt ist auch klar warum es zu Hause geht, andere Office Version
    professional plus vs. Office365

    Mal sehen ob es ein Versionskonflikt bei Access ist und ob es andere Access Database Engine Treiber gibt.

    Was fürn Mist.
    VG steel
    Moin,

    ich habe die Erfahrung gemacht, dass eine Office Installation (> der Access Database Engine 2010), die Database Engine zerstört und diese danach neu installiert werden muss, wenn die ADE vor dem Office installiert wurde.

    Zudem benötigt die ADE 2010 auch die Updates für Office 2010, obwohl davon nichts installiert ist. Installier die ADE mal drüber, danach die Updates übers Windows Update und versuch es nochmal.

    Noch wichtig wäre zu wissen, was für eine Version die Access Datei ist auf die du zugreifen möchtest. MDB oder ACCDB? Je nachdem brauchst du einen anderen Connection String.
    Der ACE.OLEDB Provider kann, theoretisch, sowohl MDB als auch ACCDB. In der Praxis habe ich hierbei aber oft Fehler bekommen. Daher: ACCDB = ACE.OLEDB, MDB JET.OLEDB.

    Was noch ein Stolperstein sein kann, ist ein für die Datenbank festgelegtes Passwort. Ist dies zu lang, kann es auch zu Connection Errors kommen, da die Access Datenbanken nur bestimmte Längen können.

    VB.NET-Quellcode

    1. LKDB.Open() '<<<**********hier knallts************
    2. DBDataadapter = New OleDbDataAdapter(SQLString, LKDB)
    3. DBDataadapter.Fill(DBDataset, sTablename)
    4. DBDataadapter.Dispose()
    5. LKDB.Close()


    Das kannst du auch abkürzen, beim Aufruf des DataAdapters wird automatisch eine Connection aufgebaut und beim Dispose bzw. End Using, wieder geschlossen
    Eine Connection muss man explizit nur beim SqlCommand vor dem Command öffnen.

    VB.NET-Quellcode

    1. Using DBDataadapter As New OleDbDataAdapter(SQLString, LKDB)
    2. DBDataadapter.Fill(DBDataset, sTablename)
    3. End Using


    Grüße

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlueLagoonX“ ()

    Morgen zusammen,
    ich gestern noch getestet, bei dem Rechner des Kollegen war auch nur die Standard Office 2016 drauf (Word, Excel, PowerPoint, Outlook) und im Anschluss wurde Access Database Engine installiert. Aber ok es, ist ein Kollege aus der IT, es könnte noch was anderes drauf gewesen sein.
    Wie gesagt da stürzt .net Framework ebenfalls ab (Weiter und Beenden Dialog), aber es wird zumindest der Spalten Header angezeigt. Bei mir ist schon beim umschalten des Pull-Down Menüs Feierabend, da kommt nicht mal ein Weiter / Beenden Dialog von .net Framework.

    Die Datenbank Datei ist eine *.accdb und das Kennwort mit 12 Zeichen auch nicht zu lang. Ich habe die Access Database Engine 2016 (English) probiert, hilft leider nicht immer noch der selbe Absturz. Die anderen Sachen sind gecheckt und das Programm läuft auch bei mir zu Hause,
    nur hab ich da halt Office365, zwar auch mit Access, aber da geht's ohne Probleme.

    Wir werden es jetzt hier nochmal probieren, einen Rechner neu aufzusetzen mit Matrix42 und Office 2016 Standard und der Installation der Access Database Engine im Anschluss. Den das wäre der Normalzustand am Ende der Entwicklung müsste ein
    normaler Sachbearbeiter den Client an einem normalen Arbeitsplatz Rechner starten können. Wenn das nicht geht, werde ich die Datenbank in den MSSQL Server verlegen müssen. Das Format können wir aus Datenschutz Gründen nicht ändern auch ohne Kennwort
    geht da leider nix, dass sind Vorgaben von ganz oben, da komm ich nicht dran vorbei.

    Ist halt nur ne menge Arbeit, dass Ganze wieder zu ändern.
    VG steel
    Dat gibt es nich…

    Ich habe gerade auf meinem Firmen Rechner Access Database Engine 2016 English deinstalliert, weil bringt ja nix und instinktiv Access Database Engine 2010 wieder installiert und jetzt geht's ?(
    kein Fehler Datagridview wird ganz normal befüllt, dass muss man nich verstehen 8| nur wundern
    VG steel
    ne das war schon die 32Bit, dass ist ein Versionskonflikt in der mso40uiwin32client.dll. Wie gesagt mit Standard Arbeitsplatz Installation Windows 10 pro 1903 + Office 2016 Standard (o. Access) + Access Database Engine 2010 x86 funktionierts.
    Ist nur mein Entwicklungsrechner bei dem es nicht geht. Aber hier ist halt Office 2016 professional plus drauf, dass verursacht das Problem. Bei mir zu Haus Windows 10 pro + Office365 Business + Access Database Engine 2010 x86 funktioniert es
    auch ohne Probleme.
    VG steel

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „steel75“ ()