Probleme bei der Verbindung zur Access DB

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Panter.

    Hallo zusammen,

    jetzt wurde das Programm mal auf einem anderen rechner benutzt,
    leider tritt wieder dieser Fehler auf.
    Weiß da vllt jemand abhilfe? Ich kann auf diesen Rechner nichts weiter installieren, da fehlen mir die Rechte für.
    Bilder
    • 2023-03-17 11_12_18-ePro - Schuhe.png

      44,28 kB, 438×409, 84 mal angesehen
    Gruß Matze 8-)
    Auf dem PC muss Access in der Version passend zu deinem Programm sein. Wenn ein 64 Bit Office installiert ist, muss deine Anwendung ebenfalls auf 64 Bit gestellt sein.
    Wenn kein Office installiert ist, muss die Access Database Engine installiert werden (2010 oder 2016, auch passend zu deinem Programm mit x86/x64).
    hey nochmal,
    kann ich das programm für x86 und x64 schreiben?
    wenn ich z.B. in unterschiedlichen Form andere Provider nutze?
    Leider sind hier Laoptop mit X86 Office und ThinClient mit X64 Office,
    ich würde gern beides in einem Programm ermöglichen.
    Gruß Matze 8-)

    VB.NET-Quellcode

    1. If Environment.Is64BitOperatingSystem then
    2. 'Verbindungszeichenfolge mit ... Provider=Microsoft.Jet.OLEDB.12.0
    3. Else
    4. 'Verbindungszeichenfolge mit ... Provider=Microsoft.Jet.OLEDB.4.0
    5. End If
    Und Project mit 'AnyCPU' erstellen - Ich hab's aber nicht ausprobiert...

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

    leider funktionirt das nicht so wie gewünscht
    es wird mir ein Fehler angezeigt.
    die Variable, die in der If zeile benutzt wird, ist nicht deklariert.

    als was muss ich sie denn deklarieren?

    Dim con As ...
    Gruß Matze 8-)
    @VB1963

    ich habe mir den Laptop, auf dem es nicht funktioniert, einmal genauer angesehen.
    es ist ein x64 mit einer x86 Access Version.

    da bringt mir die abfrage des Operating System gar nichts
    hast du vllt noch eine Idee wie ich das gelöste bekomme?
    Gruß Matze 8-)
    @VB1963
    danke für den Versuch

    ich muss irgendwie abfragen welche Access Version ich habe, um den richtigen Provider auszuwählen

    kann ich das nicht durch abfangen des Fehlers sogar machen?
    also beim Programmstart kurz Verbindung testen und wenn der Fehler auftritt den anderen Provider wählen.
    aber wie genau fange ich solchen Fehler ab?
    Gruß Matze 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „matze.tele“ ()

    matze.tele schrieb:

    ich muss irgendwie abfragen welche Access Version ich habe, um den richtigen Provider auszuwählen
    Das habe ich jetzt gerade aus dem I-Net gefunden...

    VB.NET-Quellcode

    1. Dim enumerator = New OleDb.OleDbEnumerator
    2. Dim tbl = enumerator.GetElements
    3. '
    4. Dim providers = tbl.AsEnumerable.Select(Function(r) r.Item("SOURCES_NAME")).ToList 'Liste der Namen aller verfügbaren Provider
    5. DataGridView1.DataSource = tbl 'oder die gelistete Tabelle gleich als Datasource für eine DGV hernehmen
    6. Dim isJetOleDb4 = tbl.AsEnumerable.Any(Function(r) r.Item("SOURCES_NAME") = "Microsoft.Jet.OLEDB.4.0")'so kannst du deinen Provider auf Vorhandensein prüfen...

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

    Hallo Zusammen

    Ich habe das mal für mich getestet - sollte eigentlich auch für den TE funktionieren. Ich habe übrigens beide Treiber installiert. für mich ist der 4.0 einfach der ältere Treiber, ich glaube das hat nichts mit 32bit oder 64bit zu tun. Die einzige Erklärung wäre, dass der TE einen Terminalserver betreibt auf dem eben nur 4.0 installiert ist. Für mich bleibt es jedenfalls ein Rätsel, weshalb auf einmal der 12.0 Treiber weg ist.

    @VB1963 Cooler Beitrag, das mit dem Linq werde ich wohl nie begreiffen, ich gebe aber die Hoffnung nicht auf.

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Imports System.DateTime
    3. Public Class Form1
    4. Dim ConnectionStr As String
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. Dim enumerator = New OleDb.OleDbEnumerator
    7. Dim tbl = enumerator.GetElements
    8. Dim isJetOleDb12 = tbl.AsEnumerable.Any(Function(r) r.Item("SOURCES_NAME") = "Microsoft.ACE.OLEDB.12.0")
    9. If isJetOleDb12 Then
    10. ConnectionStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\matkroll\Desktop\test.accdb"
    11. Else
    12. ConnectionStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\matkroll\Desktop\test.accdb"
    13. End If
    14. End Sub
    15. Private Sub Btn()
    16. Dim con As New OleDbConnection(ConnectionStr)
    17. con.Open()
    18. Dim s As String = "INSERT INTO test ( MA, TEST, Datum ) Values ( ? , ? , now() )"
    19. Dim cmd As New OleDbCommand
    20. cmd.Connection = con
    21. With cmd
    22. .CommandText = s
    23. .Parameters.Clear()
    24. .Parameters.AddWithValue("?", SystemInformation.UserName.ToString)
    25. .Parameters.AddWithValue("?", TextBox1.Text)
    26. End With
    27. cmd.ExecuteNonQuery()
    28. con.Close()
    29. Label2.Text = TextBox1.Text
    30. TextBox1.Clear()
    31. End Sub
    32. Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    33. If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
    34. e.Handled = True
    35. Call Btn()
    36. End If
    37. End Sub
    38. End Class

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Panter“ ()