Access-Datenbank: Wie beginnen?

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Grüter.

    Access-Datenbank: Wie beginnen?

    Hallo Community

    Ich habe einen neuen Firmen-Laptop mit Windows 10 Enterprise und MS Visual Studio Community 2022 bekommen (zuvor Windows 7 Enterprise, Visual Studio Pro 2012). Während das Migrieren meiner alten Nicht-Datenbank-Programme keine grösseren Probleme waren, kann ich mein Access-DB-Programm einfach nicht zum Laufen bringen. Ich habe aktuellstes Office 365 64Bit installiert. Auch .NET Framework 4.8.04084 ist installiert. In Visual Studio habe ich mit "Extras -> Mit Datenbank verbinden..." meine Agenda-Datenbank.accdb verbunden und der Button "Testverbindung" bestätigt dort die Verbindung. Mein Code

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Dim con As New OleDb.OleDbConnection
    5. Dim cmd As New OleDb.OleDbCommand
    6. Dim reader As OleDb.OleDbDataReader
    7. con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Agenda-Datenbank.accdb"
    8. cmd.Connection = con
    9. ...


    scheitert aber schon in der ersten Dim-Zeile (Meldung: Der Typ "OleDb.OleDbConnection" ist nicht definiert). Was mich irritiert ist, dass hinter dem Stichwort Imports der Spacename System.Data.OleDb hellgrau ist, also als nicht benutzt gilt, aber in dieser Zeile doch aufgerufen wird?!

    Natürlich habe ich auch stundenlang nach Lösungen gegoogelt. Ich habe z.B. die accessdatabaseengine_X64.exe installiert, und nachdem das den obigen Fehler nicht behoben hat, wieder deinstalliert. Aber das war kontraproduktiv: Von da an konnte ich die obige Verbindung zu meiner accdb-Datei nicht mehr erstellen, was zuvor ja gelang (Fehler: "Der Microsoft.Jet.OLEDB.4.0-Anbieter kann nicht in Visual Studio verwendet werden, da er nur 32-Bit ist", ich hatte "Microsoft Access-Datenbankdatei" gewählt). Eine zweite Installation von accessdatabaseengine_X64.exe behob diesen weiteren Fehler leider nicht. Erst ein gegoogelter Registry-Hack (Löschen des Schlüssels HKLM\SOFTWARE\Microsoft\Office\16.0\Common\FilesPaths\mso.dll) konnte die DB wieder anwählbar machen.
    Ein anderer User mit der gleichen Fehlermeldung in der ersten Dim-Zeile schrieb, dass die Installation des NugetPackages die Fehlermeldung zum Verschwinden brachte. Aber nach den negativen Erfahrungen mit accessdatabaseengine_X64.exe frage ich jetzt zuerst hier nach, ob jemand die Lösung meines Problems weiss.

    Danke jetzt schon, bin echt ratlos.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Grüter“ ()

    Die ausgegraute Imports-Zeile bedeutet, dass der Compiler nix mit dem Namespace anfangen kann. Er kann ihn in keiner DLL finden, die bei Projekteinstellungen -> Verweise angegeben ist. Poste davon mal bitte einen Screenshot. Vielleicht fehlt erstmal nur der Verweis auf Access.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für den Input, @VaporiZed. Die Verweise sollten meines Erachtens richtig sein (siehe Anhang). Hat da die Installation von accessdatabaseengine_X64.exe etwas zerstört (ist immer noch installiert)? Braucht es diese Installation eigentlich überhaupt?
    Bilder
    • Verweise.png

      21,26 kB, 540×928, 151 mal angesehen
    • Code.png

      71,44 kB, 1.149×588, 137 mal angesehen
    Ver-Wei-Se, also oben die große leere Box! Nicht importierte Namespaces. Wenn Du die Dinger schon bei Importierte Namespaces (Bild#1) hast, brauchst Du die Imports-Zeile im Code nicht mehr.

    Aaaber! Wenn Deine Verweise-Box leer ist, dann hast Du ein .NET 5/6-Projekt. Durchaus möglich, dass es daran scheitert. Teste Deinen Code mal, indem Du ein .NET-Framework (4.8)-Projekt erstellst. Obacht bei der Projekttypwahl
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Sieht mir nach einem Problem mit dem 64 Bit Office aus.
    Wenn du keine 64 Bit Anwendung kompilierst (Projekt > Eigenschaften > Kompilieren > Ziel-CPU), kannst du nicht auf Access Datenbanken zugreifen, wenn ein 64 Bit Office installiert ist.

    Entweder du machst ein 32 Bit Office drauf, oder du stellst dein Projekt auf 64 Bit um. Das setzt dann aber voraus, dass auf allen PCs auf denen die Anwendung laufen soll, ebenfalls ein 64 Bit Office installiert ist.
    Allgemein ist das 64 Bit Office Mist, da viele Addons damit nicht zurechtkommen.

    Zwei Versionen auf einem PC (Office als 64 Bit und die Access Database Engine in 32 Bit) funktionieren nicht.
    Ah, langsam lichtet sich der Nebel, und ich realisiere, dass in den letzten 8 Jahren, während denen ich mit Visual Studio 2012, bzw. den letzten 4 Jahren, während denen ich ausschliesslich nur noch Android programmierte, einiges getan hat: Da gibts noch einen (für mich) neuen "Dialekt" .NET/.NET Core. Und ja, ich hatte im Unwissen davon für meinen DB-Test ".NET 6" gewählt, weil ich mein Programm neu in modernster Ausgabe von Null auf programmieren wollte. Aber für .NET 6 spricht nichts, es soll nur für mich auf Win10 laufen, also ist .NET Framework 4.8 nach wie vor die beste Wahl (bitte korrigieren, wenn ich mich da täusche).

    Wenn ich mein altes Programm starte (es hat keine Imports-Zeilen), stoppt es in der Zeile Con.Open() mit der Fehlermeldung "'Microsoft.ACE.OLEDB.12.0'-Provider ist nicht auf dem lokale Computer registriert.". Habe etwas gegooglet: unter docs.microsoft.com/en-us/answe…0-provider-ist-nicht.html fand ich die gleichen Symptome, Abhilfe war die Installation des 32Bit (!!!) accessdatabaseengine.exe. Soll ich das probieren, oder ist die Fehlermeldung in meinem Fall viel einfacher zu beheben? (Ich bin mir immer noch nicht im Klaren, ob ich die accessdatabaseengine.exe, 64- oder 32-Bit, brauche).

    EDIT: Erst jetzt sehe ich den Beitrag von BlueLagoonX. Das war der entscheidende Tipp. Ich habe auf Ziel-CPU 64 umgestellt, und voila: Die DB läuft. Übrig bleibt für mich immer noch die Frage: Soll ich accessdatabaseengine_x64.exe wieder deinstallieren, hat vermutlich mit meinem Problem gar nichts zu tun. Oder brauchts diese Access Database Engine tatsächlich?

    Danke nochmals an alle, die mithalfen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Grüter“ ()

    BlueLagoonX schrieb:

    Andernfalls kann die weg.


    Offensichtlich doch nicht ganz: Ich habe seit dem letzten erfolgreichen Start meines Programms einzig die Access Database Engine (64Bit) deinstalliert, aber jetzt erscheint beim Aufstart wieder die Fehlermeldung "'Microsoft.ACE.OLEDB.12.0'-Provider ist nicht auf dem lokale Computer registriert.", siehe Bild X(

    Jetzt gibt's zwei Fortsetzungen: Ich installiere halt die Access Database Engine (64Bit) doch wieder und hoffe, dass dann alles wieder läuft, oder: BlueLagoonX wüsste auch eine Lösung für dieses Problem... :D
    Bilder
    • Code2.png

      130,92 kB, 840×671, 143 mal angesehen