none
Access Datenbank (accdb) verwenden ohne Accessinstallation RRS feed

  • Frage

  • Hallo

    Einleitung:

    Also ich habe vor glaube mehr als 10 Jahren mal ein Programm geschrieben auf damals noch VB (6.0).
    Dieses Programm verwaltet seine Daten in einer Access-Datanbank.
    Wohl angemerkt, prinzipiell funktioniert dieser Programm auch heute noch!
    Allerdings fallen halt immer mehr Funktionalitäten aus und die Kompatibilität zu aktuellen
    Windowsversionen wird halt immer schlechter.
    Eine Überarbeitung / Bearbeitung in VB6 habe ich ausgeschlossen und nun beschlossen,
    das Programm halt neu aufzusetzen.
    Hierzu soll nun also C# (x64) und die neueste Version von Access dienen.

    Bei der damaligen Entwicklung habe ich darauf geachtet,
    dass das Programm auf "jedem" Windowsrechner läuft
    ohne etwas am Rechner zu ändern, also nach zu installieren für den Datenbankzugriff.
    Soweit ich mich glaube zu erinnern, habe ich das ganz normal über DAO gemacht gehabt.
    Also keine Jet-Verbindung, weil der Provider ja nur vorhanden ist wenn Office/Access installiert ist.
    Hat sehr gut funktioniert und damit war ich dann auch voll zufrieden.

    Heutiges Problem:

    So, nun wollte ich das gerne auch beim neuen Programm so haben, stoße aber auf das Problem,
    dass ich selbst auf meinem Rechner (mit Entwicklungsumgebung und Office) eine AccessDatabaseEngine
    installieren muss, um auf meine Accessdatenbank zugreifen zu können.
    Hierbei wird halt dann für OleDB ein passender Provider installiert.
    Da OleDB im Framework ist, habe ich hier natürlich keine DLL, die ich einfach im Projekt einbinden kann,
    um sie direkt mit zu liefern, damit der Zugriff dann auch auf anderen Windowsrechner funktioniert.
    (Oder sagen wir ehrlicher Weise, ich wüsste wenn es geht nicht wie.)
    Sprich ich müsste an jedem Rechner wo das Programm laufen soll erst mal die AccessDatabaseEngine installieren.

    Das würde ich halt gerne verhindern!
    Ich möchte eine Verbindung zur Datenbank haben, die standardmäßig auf jedem Windowsrechner vorhanden sein SOLLTE.

    Ich habe das ganze auch schon mit ODBC versucht, aber weder auf x64 noch auf x84 habe ich hier eine Verbindung zustande gebracht. Fehler: Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben.
    Wobei ich wirklich schon einige ConnectionStrings probiert habe.
    Ehrlicher Weise wüsste ich aber auch gar nicht, ob ODBC überhaupt standardmäßig auch für Access accdb auf Windowsrechnern vorhanden ist. (Habe halt im Moment nur meinen einen Rechner hier zum testen leider)


    Fragen:

    Ist es heute überhaupt (noch) möglich auf Access mit den Standardmitteln von Windows (ohne Nachinstallation) zuzugreifen, oder gibt es eine Möglichkeit die Zugriffsmöglichkeit mir dem Programm mitzuliefern, also ins Projekt einzubinden? (Wie z.B. den Connector bei MySQL)

    Was hätte ich sonst noch für Möglichkeiten, wenn ich eine "einzelne" Datei als Datenbank haben/mitliefern möchte, die ohne weitere Installation am Zielrechner einen Zugriff ermöglicht und sich "vernünftig" verwalten lässt?

    Ich wäre für jeglicher Hilfe und Rat dankbar, wie ich das Problem lösen kann,
    oder was ich für alternativen habe.
    Habt also schon vielen Dank im Voraus für eure Mühe.

    Gruß
    Christian



    Sonntag, 12. November 2017 14:04

Antworten

  • Hallo Christian,

    Ist es heute überhaupt (noch) möglich auf Access mit den Standardmitteln von Windows (ohne Nachinstallation) zuzugreifen, oder gibt es eine Möglichkeit die Zugriffsmöglichkeit mir dem Programm mitzuliefern, also ins Projekt einzubinden?

    Wenn Deine Access-Datenbank die .accdb-Erweiterung hat, kommst Du um die Installation von Microsoft Access Database Engine Redistributable oder Microsoft Access Runtime nicht herum. Ich führe mal den relevanten Auszug aus dem MSDN-Artikel an, der auch für Access 2013 und Access 2016 gilt: 
    Wie erhalte ich das Access-Datenbankmodul?

    Zum Ausführen der Codebeispiele in diesem technischen Artikel muss das Access-Datenbankmodul auf Ihrem Computer vorhanden sein, was bedeutet, dass Sie eine der folgenden Access 2010-Versionen (oder Office Access 2007) auf installieren müssen:
    • Microsoft Access 2010 – Verfügbar in den folgenden Office 2010-Editionen: Professional, Professional Academic, Professional Plus oder eigenständiges Microsoft Access
    • Microsoft Access 2010-Runtime - Verfügbar als kostenloser Download
    • Microsoft Access Database Engine 2010 Redistributable

    Was hätte ich sonst noch für Möglichkeiten, wenn ich eine "einzelne" Datei als Datenbank haben/mitliefern möchte, die ohne weitere Installation am Zielrechner einen Zugriff ermöglicht und sich "vernünftig" verwalten lässt?

    Wenn Du unbedingt auf weitere Installationen verzichten möchtest, so ist das mit der älteren (.mdb) Erweiterung möglich. Auch in neueren Access-Versionen kann die Datenbank als .mdb gespeichert werden. Wie man die Verbindung einstellt, wird in folgendem Artikel (allerdings Visual Studio 2008) beschrieben:
    Gewusst wie: Herstellen einer Verbindung zu Daten in einer Access-Datenbank

    Ich habe es gerade in Visual Studio 2013 und 2017 ausgetestet und führe die einzelnen Schritte der Vollständigkeit halber an, weil sie sich von Visual Studio 2008 unterscheiden:
    Wähle Ansicht -> Weitere Fenster -> Datenquellen, oben links "Neue Datenquelle hinzufügen", Datenbank -> DataSet -> Neue Verbindung. Im Fenster "Verbindung hinzufügen" wähle andere unter Datenquelle, .NET Framework-Datenanbieter für OLE DB als Datenquelle, Microsoft Jet 4.0 OLE DB Provider als OLE DB-Anbieter und gib den Pfad zur .mdb-Datei in Server- oder Dateiname ein (siehe ersten Screenshot). Dann kannst Du im nächsten Dialogfenster auch das Kopieren der Datendatei in Dein Projekt bestätigen (siehe zweiten Screenshot). Weiter geht es mit der Auswahl der Datenobjekte für das DataSet.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 13. November 2017 13:56
    Administrator
  • Hallo Christian,

    Ich habe die beschriebene Vorgehensweise auf zwei 64-Bit-Systemen (ohne die Installation von Office/Access) getestet und die Verbindung zur Datenbank (.mdb) wird erfolgreich aufgebaut und Daten werden in einem DataGridView geladen. In den Projekteinstellungen (Build/Erstellen -> Zielplattform) ist AnyCPU gewählt. Auch wenn ich x86 wähle, läuft das Programm auf den zwei 64-Bit-Systemen reibungslos und nur bei x64 tritt eine Ausnahme auf.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 15. November 2017 14:53
    Administrator

Alle Antworten

  • Hallo Christian,

    Ist es heute überhaupt (noch) möglich auf Access mit den Standardmitteln von Windows (ohne Nachinstallation) zuzugreifen, oder gibt es eine Möglichkeit die Zugriffsmöglichkeit mir dem Programm mitzuliefern, also ins Projekt einzubinden?

    Wenn Deine Access-Datenbank die .accdb-Erweiterung hat, kommst Du um die Installation von Microsoft Access Database Engine Redistributable oder Microsoft Access Runtime nicht herum. Ich führe mal den relevanten Auszug aus dem MSDN-Artikel an, der auch für Access 2013 und Access 2016 gilt: 
    Wie erhalte ich das Access-Datenbankmodul?

    Zum Ausführen der Codebeispiele in diesem technischen Artikel muss das Access-Datenbankmodul auf Ihrem Computer vorhanden sein, was bedeutet, dass Sie eine der folgenden Access 2010-Versionen (oder Office Access 2007) auf installieren müssen:
    • Microsoft Access 2010 – Verfügbar in den folgenden Office 2010-Editionen: Professional, Professional Academic, Professional Plus oder eigenständiges Microsoft Access
    • Microsoft Access 2010-Runtime - Verfügbar als kostenloser Download
    • Microsoft Access Database Engine 2010 Redistributable

    Was hätte ich sonst noch für Möglichkeiten, wenn ich eine "einzelne" Datei als Datenbank haben/mitliefern möchte, die ohne weitere Installation am Zielrechner einen Zugriff ermöglicht und sich "vernünftig" verwalten lässt?

    Wenn Du unbedingt auf weitere Installationen verzichten möchtest, so ist das mit der älteren (.mdb) Erweiterung möglich. Auch in neueren Access-Versionen kann die Datenbank als .mdb gespeichert werden. Wie man die Verbindung einstellt, wird in folgendem Artikel (allerdings Visual Studio 2008) beschrieben:
    Gewusst wie: Herstellen einer Verbindung zu Daten in einer Access-Datenbank

    Ich habe es gerade in Visual Studio 2013 und 2017 ausgetestet und führe die einzelnen Schritte der Vollständigkeit halber an, weil sie sich von Visual Studio 2008 unterscheiden:
    Wähle Ansicht -> Weitere Fenster -> Datenquellen, oben links "Neue Datenquelle hinzufügen", Datenbank -> DataSet -> Neue Verbindung. Im Fenster "Verbindung hinzufügen" wähle andere unter Datenquelle, .NET Framework-Datenanbieter für OLE DB als Datenquelle, Microsoft Jet 4.0 OLE DB Provider als OLE DB-Anbieter und gib den Pfad zur .mdb-Datei in Server- oder Dateiname ein (siehe ersten Screenshot). Dann kannst Du im nächsten Dialogfenster auch das Kopieren der Datendatei in Dein Projekt bestätigen (siehe zweiten Screenshot). Weiter geht es mit der Auswahl der Datenobjekte für das DataSet.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 13. November 2017 13:56
    Administrator
  • Hallo Dimitar

    Erst ein mal vielen Dank für deine ausführliche und bebilderte Antwort!
    Irgend wie habe ich mir das schon gedacht, als ich gestern noch bis spät rumprobiert und gegoogelt habe. War sogar schon so weit, das ich mal ein wenig mit SQL Server Express rumprobiert habe.
    Ich hatte es sogar schon geschafft, eine Datenbank als Datei einzubinden und auch mich zu verbinden. Allerdings gelang es mir gestern nicht mehr, die Datenbank mit einem Passwort zu schützen, welches man eben beim Verbinden angeben sollen müsste.
    Ehrlich gesagt heute auch noch nicht. Geht alles irgend wie über die Windowsrechte, was mir erst mal gar nicht gefällt. (Auch die angebliche Möglichkeit, die DB zu verschlüsseln hat noch nicht funktioniert.)

    Aber gut, zurück zu Access. Eine Frage ist mir bei deinen Ausführungen jetzt noch gekommen, nämlich dass du in deinem Beispiel den Jet Provider nimmst. Ist der nicht auch nur auf Windows
    installiert, wenn man auch Office/Access installiert hat, oder gehört der inzwischen schon zur Standardausstattung!? Weil wenn ich den auch erst an den Zielrechnern einbinden muss, kann ich auch die "Neue" Version nehmen. Ich habe da leider zu wenig Erfahrung, was wirklich heute alles schon bei einer Standardinstallation von Windows vorinstalliert ist und was nicht.

    Na ja, ich werde vielleicht erst mal noch ein zwei Stunden in SQL Express investieren und schauen,
    ob ich da das erreiche was ich brauche und es mir dann auch gefällt. Ansonsten muss ich mich halt entscheiden ob ich die alte Accessvariante verwende. Vorausgesetzt, hier kann ich wirklich davon ausgehen, dass der Provider auch vorhanden sein sollte. Wenn du oder wer anders da vielleicht Erfahrungswerte hat, wäre ich echt dankbar. Dann kann ich meine Entscheidung vielleicht einfacher/besser treffen.
    In jedem Fall schon mal vielen lieben Dank für die tollen Ausführungen!

    Danke und Gruß
    Christian




    Montag, 13. November 2017 18:49
  • Hallo Christian,

    Eine Frage ist mir bei deinen Ausführungen jetzt noch gekommen, nämlich dass du in deinem Beispiel den Jet Provider nimmst. Ist der nicht auch nur auf Windows installiert, wenn man auch Office/Access installiert hat, oder gehört der inzwischen schon zur Standardausstattung!?

    Ansonsten muss ich mich halt entscheiden ob ich die alte Accessvariante verwende. Vorausgesetzt, hier kann ich wirklich davon ausgehen, dass der Provider auch vorhanden sein sollte.

    Auf dem Rechner, wo ich die Screenshots gemacht und diese Vorgehensweise getestet habe, ist kein Office/Access installiert. Deshalb gehe ich davon aus, dass der Microsoft JET 4.0 OLE DB Provider standardmäßig verfügbar ist. Ich bin auf einige Threads gestoßen, die über Besonderheiten bei 64-Bit-Systemen berichten. Soll Deine Anwendung auch auf 64-Bit-Systemen laufen?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 14. November 2017 15:02
    Administrator
  • Hallo Dimitar

    Also geplant sind schon 64 Bit ja, ist zwar kein Zwang, aber fände ich schon gut.
    So gesehen ja, die Anwendung sollte schon mit 64 Bit laufen.

    Danke und Gruß
    Christian

    Dienstag, 14. November 2017 16:19
  • Hallo Christian,

    Ich habe die beschriebene Vorgehensweise auf zwei 64-Bit-Systemen (ohne die Installation von Office/Access) getestet und die Verbindung zur Datenbank (.mdb) wird erfolgreich aufgebaut und Daten werden in einem DataGridView geladen. In den Projekteinstellungen (Build/Erstellen -> Zielplattform) ist AnyCPU gewählt. Auch wenn ich x86 wähle, läuft das Programm auf den zwei 64-Bit-Systemen reibungslos und nur bei x64 tritt eine Ausnahme auf.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 15. November 2017 14:53
    Administrator
  • Hallo Dimitar

    Also riesen Dank, dass du das in wohl weiser Voraussicht gleich mit angesprochen hast.
    Darüber wäre ich jetzt bestimmt gestolpert.
    Ich muss zugeben, ich musste jetzt auch erst mal den Modus "Any CPU" nachlesen,
    weil ich den noch nie explizit gewählt habe sondern wenn nur unbewusst genutzt, weil Standard.

    Ich frage mich jetzt nur, was das System dann wählt für meine Anwendung an sich!?
    Läuft die Anwendung dann dank dem zwangsweise Zugriff in 32 Bit auf die DB komplett
    in 32 Bit, oder kann das System rein für den Zugriff auf die DB umstellen bzw. das unterteilen?

    Also, dass das Programm auf 32 und 64 Bit so laufen wird habe ich verstanden,
    nur kann mein Programm dann bei 64 Bit auch die 64 Bit - Vorteile nutzen,
    oder läuft es einfach nur auch auf 64 Bit Systemen, aber eben in 32 Bit.

    Also rein vom logischen würde ich denken die ganze Anwendung läuft in 32 Bit,
    kann aber eben auch ohne Probleme auf reinen 64 Bit Systemen laufen.

    Ich sehe schon meine Liste Pro und Kontra wie ich die DB einbinde wird immer umfangreicher.
    Da ich aber zum jetzigen Zeitpunkt gedenke bei Access zu bleiben werde ich da wohl mir nun
    ernsthaft Gedanken machen müssen. Wobei ich eigentlich immer denke, wenn  man schon was neu macht,
    dann sollte man wenn möglich (und "sinnvoll") auch das "Neueste" bzw. Zukunftsorientierteste nutzen.

    Ach ja schwere Frage...

    Hab vielen Dank für deine tolle Hilfe!
    Ich hoffe ich komme jetzt für mich irgend wie zu einer Entscheidung,
    vor allem zu einer, die ich nicht in ein paar Monaten bereue.


    Danke und Gruß
    Christian

    Mittwoch, 15. November 2017 19:20