*.accdb Zugriff nach Veröffentlichung auf anderer Maschine

  • VB.NET
  • .NET 4.5

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Eppo4Plus.

    *.accdb Zugriff nach Veröffentlichung auf anderer Maschine

    Hallo,

    Ich bin momentan ein Wenig am Verzweifeln.
    Mir stellt sich folgendes Problem:

    Ich habe eine Anwendung geschrieben die auf eine Datenbank zugreift.
    Diese Funktioniert auf dem Entwicklungs PC (Win10 64bit) fehlerfrei. Wenn ich die Anwendung jedoch veröffentliche und auf einem Win7(64bit)-PC installiere bekomme ich in meinen Try funktionen immer den "errObject" Fehler ausgelöst der mit meiner Datenbank zusammen hängt.

    Folgende Grundlagen:
    Datenbank: *accdb-Datei
    Code: ACE.OleDB.12.0 (Treiber sind auf beiden Geräten installiert)
    Veröffentlicht ist die Anwendung auf x86 (32-Bit)
    Die Datenbank liegt im Anwendungsordner (My.Application.Info.DirectoryPath & \Database\DB.accdb bzw. Data Source=|DataDirectory|\Database\DB.accdb)
    Anwendung wurde auf dem Win7 PC sowohl mit als auch ohne Administrator-Rechte getestet. Beide liefern das gleiche Fehlerbild

    Vielen Dank für eure Aussagekräftigen Hilfestellungen :)

    Eppo4Plus schrieb:

    immer den "errObject" Fehler
    Kannst Du das ein wenig präzisieren?
    Welches DB-Tool ist auf diesem Rechner installiert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Eppo4Plus

    Kannst du die Datenbank auf dem System wo die Fehler auftreten in Access normal öffnen?

    Eppo4Plus schrieb:

    Veröffentlicht ist die Anwendung auf x86 (32-Bit)

    Und die OLEDb Treiber sind auch für x86?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Also auf beiden Rechnern ist Micrsoft Office 2016 Prof. Plus
    Zusätzlich ist auf beiden PC's Microsoft Access Database Engine 2010 (x86) installiert (auch schon mit x64 und der 2016 Version versucht keine Änderung am Ergebnis)
    Access Datenbank kann auf beiden Geräten geöffnet und editiert werden mit Access.

    Hier mal als Beispiel eine Function die beim Laden einen errObject auslöst:

    VB.NET-Quellcode

    1. Public Function FilterCheck()
    2. Dim FC As Boolean = False
    3. Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database\LocalConfig.accdb")
    4. Dim sql As String = "SELECT Filter FROM AppConfig;"
    5. Dim cmd As New OleDbCommand(sql, conn)
    6. Try
    7. conn.Open()
    8. Dim exec As OleDbDataReader = cmd.ExecuteReader
    9. While exec.Read
    10. If exec("Filter") = True Then
    11. FC = True
    12. End If
    13. End While
    14. Catch ex As Exception
    15. MessageBox.Show(Err.ToString)
    16. MessageBox.Show("Fehler bei FilterCheck() | " & sql)
    17. Finally
    18. conn.Close()
    19. End Try
    20. Return FC
    21. End Function

    Hallo @Eppo4Plus

    Als erstes -> Visual Studio - Empfohlene Einstellungen
    Dann wirst du bemerken, dass
    - die As-Klausel der Funktion fehlt
    - ein Object mit einem Boolean ohne Typenkonvertierung nicht verglichen werden kann.
    - das Err-Objekt veraltet ist und die Exception Class oder Exception.Message Property verwended werden sollte.
    @HenryV

    Hallo HenryV,

    vielen Dank für deine Informationen.
    - Die As Klausel fehlt hier ganz bewusst, da diese Function alleine Steht und nicht durch ein Event oder Handle ausgelöst wird, ich werde dies Aber gern ergänzen und testen.
    - Der Wert der in der oleDB geprüft wird in meinem Beispiel ist ebenso in der DB ein Boolean Wert. Meines Wissens convertiert VB beide automatisch in einen String. (Der Fehler besteht jedoch ebenso bei einem String vergleich, Andere Stelle im Quellcode selber Aufruf, selbes Fehlerbild)
    - Ja ich arbeite nicht mit "Strict On" <-- auch Absicht. (Danke für die Information, ich verzichte an dieser Stelle darauf da ich das Programm eigentlich "nur mal so dahin klatschen" wollte)

    Das mit der Exception-Class ist sehr Hilfreich und hatte ich so noch nicht auf dem Schirm. Werd ich mal ausprobieren. Danke. :)

    Das erklärt aber alles nicht warum es auf Win10Pro. läuft und auf Win7Pro nicht. ?(

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

    Wäre es möglich das du die Fehlermeldung hier postest? Sonst fischen wir nur im trüben...

    p.s. Strict Off mit Absicht und jetzt geht was nicht... Ich täte direkt Strict On programmieren. Weiß doch keiner genau was .NET so treibt. Das ist alles auf gut Glück und kann für dubioses Verhalten sorgen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo An alle,

    Dank HenryV und seiner Empfehlung zur Exception Class konnte ich den Fehler eingerenzen.

    Der Befehl

    VB.NET-Quellcode

    1. conn.open
    löst den Fehler aus.
    Es wird folgende Fehlermeldung zurück gegeben:

    Error: Microsoft.VisualBasic.errObject
    Error Number: 5
    Error Source: System.Data
    Error Description: Der 'MICROSOFT.ACE.OLEDB.12.0' - Provider ist nicht auf dem lokalen Computer registriert.

    Das Problem steckt also im Treiber auf dem Gerät.
    Obwohl ich jetzt nochmal die AccessDatabaseEngine deinstalliert und neu installiert habe stellt sich mir weiterhin das gleiche Problem.
    Ich denke jedoch das dies nicht mehrin die Problematik dieses Forums fällt, oder?

    Ich werde den Thread noch offen lassen bis ich eine Lösung posten kann.

    Vielen Dank an alle Helfer.

    p.s. @HenryV der Pfad wurde schon mit

    VB.NET-Quellcode

    1. My.Application.Info.DirectoryPath
    statt |DataDirectory| getestet. Hatte das selbe Fehlerbild


    EDIT:

    Hab jetzt ganz fix ne Lösung gefunden. :D

    Mit dem AccessDatabaseEngine2007 Treiber geht alles wunderbar.

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