Access Datenbanken per OpenFileDialog öffnen und einbinden bzw. Binding ändern

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ChrisK.

    Access Datenbanken per OpenFileDialog öffnen und einbinden bzw. Binding ändern

    Hallo Gemeinde.

    Da ich mir die letzten Tage die Augen wund gelesen habe, mit Tut's und Erklärvideos,
    bitte ich euch um eure Hilfe.

    Folgendes möchte ich realisieren:

    Es soll eine .MDB über einen OpenFileDialog göffnet werden, an das DataSet gebunden werden und im DGV angezeigt und bearbeitet werden.

    Die DataTables haben immer den selben Aufbau, nur die Daten in den verschiedenen Datenbanken sind anders.

    Mein erster Ansatz war, einfach den Pfad nebst .mdb im ConnectionString aus dem OpenFileDialog zu übernehmen -> geht aber nicht, weil ReadOnly !

    Nächster Versuch, den ConString auf String setzen, wie im Tut von EDR beschrieben. Hat aber auch nicht so wirklich funktioniert.

    Nach dem Lesen von X Beiträgen bin ich jetzt verwirrt, frustriert und ein Stück weit abgenervt. ?( ?( ?(


    Könnte mir bitte jemand unter die Arme greifen, wie der Code dazu aussehen müsste.


    Vielen Dank schon mal im voraus.

    VG Christian
    Inwieweit ist da was ReadOnly-relevantes dabei?
    Sobald Du den ConnectionString mit New instanziierst, musst Du doch nen String angeben. Probier es doch entsprechend.
    Also vom Prinzip her:

    VB.NET-Quellcode

    1. Private Connection As SqlConnection = Nothing
    2. 'hier der Kram mit dem OpenFileDialog
    3. Connection = New SqlConnection(hier Dein ConnectionString mit dem MDB-Pfad bzw OFD-FileName)

    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 die schnelle Antwort, ABER das hilft mir nicht wirklich weiter, weil:

    - Der ConnectionString ist Typ (Verbindungszeichenfolge) und Bereich Anwendung

    - Momentan steht er auf : Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Test1.mdb;Persist Security Info=True
    also für ne Access-DB Test1.mdb mit 'nem Jet.OLEDB.4.0 -> weil Access 2002

    - das mit SqlConnection versteh' ich nicht. Ist doch Access nicht Sql !??
    Ich habe mal Imports System.Data.SqlClient hinzugefügt, aber er steigt dann bei der Zuweisung aus mit:
    System.ArgumentException: "Das Format der Initialisierungszeichenfolge stimmt nicht mit der Spezifikation überein, die bei Index '0' beginnt."

    ?(

    ChrisK schrieb:

    Ist doch Access nicht Sql
    SQL wird überall verwendet, sowohl bei Access als auch bei SQL Server.
    Das ist nämlich die Abfrage-Sprache.

    Welche ConnectionStrings für Access verwendbar sind, kannst du hier nachlesen:
    connectionstrings.com/access/
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    ok, dass mit SQL leuchtet ein.

    Der ConnectionString passt schon, ist der gleiche wie in der Start-Bindung, eben nur mit anderem Pfad.

    Jetzt bekomm' ich die Ausnahme:
    System.ArgumentException: "Schlüsselwort wird nicht unterstützt: 'provider'."
    https://www.connectionstrings.com/microsoft-jet-ole-db-4-0/standard-alternative/

    Edit:
    Mal eine blöde Frage:
    Du komplierst deine Anwendung im x86-Modus?
    Mit 64 Bit oder AnyCPU funktioniert der Jet-Driver nämlich nicht.
    connectionstrings.com/using-jet-in-64-bit-environments/
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Hatte ich zwar nicht, hab es aber jetzt umgestellt.

    Bringt auch nichts. Er meckert, dass 'Provider' als Schlüsselwort nicht unterstützt wird.
    Seltsam, Seltsam !

    Den neuen ConnectionString hab ich kontrolliert, der passt perfekt.

    Quellcode

    1. Dim constring As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & eventpfad & datenbank
    2. Label2.Text = constring
    3. Connection = New SqlConnection(constring)


    daran kann es auch nicht liegen.

    ?(
    die Ausnahme:
    System.ArgumentException: "Schlüsselwort wird nicht unterstützt: 'provider'."

    in Zeile 3, wenn er den neuen ConnectionString zuweisen soll.
    Der String passt aber, den hab ich mir zur Kontrolle aufs Label schreiben lassen.
    So, zur Sicherheit hab ich das nochmal in einem neuen Projekt gemacht.

    Gleicher Fehler an gleicher Stelle.

    Quellcode

    1. ​Dim constring As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\Test2.mdb"


    Der beim Erstellen des DataSet automatisch generierte unterscheidet sich lediglich im Dateinamen Test1.mdb

    VB.NET-Quellcode

    1. Imports System.Data.SqlClient
    2. Public Class Form1
    3. Private Connection As SqlConnection = Nothing
    4. Private Sub T1BindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles T1BindingNavigatorSaveItem.Click
    5. Me.Validate()
    6. Me.T1BindingSource.EndEdit()
    7. Me.TableAdapterManager.UpdateAll(Me.Test1DataSet)
    8. End Sub
    9. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    10. 'TODO: Diese Codezeile lädt Daten in die Tabelle "Test1DataSet.T1". Sie können sie bei Bedarf verschieben oder entfernen.
    11. Me.T1TableAdapter.Fill(Me.Test1DataSet.T1)
    12. Label1.Text = nochmal_Dataset_manuell.My.Settings.Test1ConnectionString.ToString()
    13. End Sub
    14. Private Sub BeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BeendenToolStripMenuItem.Click
    15. End
    16. End Sub
    17. Private Sub LadenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LadenToolStripMenuItem.Click
    18. Dim constring As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\Test2.mdb" '& eventpfad & datenbank
    19. Label2.Text = constring
    20. Connection = New SqlConnection(constring)
    21. Label3.Text = nochmal_Dataset_manuell.My.Settings.Test1ConnectionString.ToString()
    22. Me.T1TableAdapter.Fill(Me.Test1DataSet.T1)
    23. End Sub
    24. End Class


    korrekte CodeTags gesetzt ~VaporiZed

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

    ChrisK schrieb:

    - das mit SqlConnection versteh' ich nicht. Ist doch Access nicht Sql !??

    Da bist du richtig.
    Für Access Daternbanken (.mdb, .accdb, etc...), verwendet man die OleDbConnection, nicht die SqlConnection (SQL Server).

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

    Hhhmmm.
    Der Meinung war ich auch, aber ich wollte ja nicht als beratungsresistent dastehen.

    Ich habe das Problem jetzt anderweitig gelöst.
    Ob das nun sauber programmiert ist, oder nicht, egal, es funktioniert.

    Visual Basic-Quellcode

    1. Dim constring As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..:\..\...mdb"
    2. Me.T1TableAdapter.Connection.ConnectionString = constring
    3. Me.T1TableAdapter.Fill(Me.Test1DataSet.T1)​