Access Datenbank per Code erstellen mit Datenbankkennwort mit ADOX

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von frifri.

    Access Datenbank per Code erstellen mit Datenbankkennwort mit ADOX

    Hallo,

    ich möchte gerne eine Access Datenbank per Code erstellen.

    VB.NET-Quellcode

    1. Dim catalog As Object
    2. catalog = CreateObject("ADOX.Catalog")
    3. 'catalog.create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " & PfadKasse)
    4. catalog.create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PfadKasse &
    5. "; Jet OLEDB:Database Password=" & MyDbPassword & ";")
    6. catalog = Nothing

    Das geh auch nur wenn ich nun Tabellen aus einer anderen Datenbank dort hinein kopieren will meckert VB das das Passwort nicht korrekt ist.
    Erstelle ich die Datenbank ohne Passwort geht es.

    VB.NET-Quellcode

    1. Private Sub Tabelle_kopieren(QuelleDBName As String, QuelleTabelleName As String, ZielDBName As String, ZielTabelleName As String)
    2. 'Eine Tabelle aus einer mdb in eine andere mdb kopieren ohne Daten, nur die Struktur
    3. ' Verbindung zur Datenbank herstellen
    4. Dim connQuelle As New OleDb.OleDbConnection
    5. Dim connZiel As New OleDb.OleDbConnection
    6. 'Kopieren aus einer "externen" Source-Datenbank heraus
    7. connQuelle.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" &
    8. "Data Source=" & QuelleDBName & ";Jet OLEDB:Database Password=" & MyDbPassword
    9. connZiel.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " &
    10. "Data Source=" & ZielDBName & "; Jet OLEDB:Database Password=" & MyDbPassword
    11. Try
    12. connQuelle.Open()
    13. connZiel.Open()
    14. ' SelectCommand erstellen
    15. Dim cmdQuelle As New OleDb.OleDbCommand
    16. Dim cmdZiel As New OleDb.OleDbCommand
    17. cmdQuelle.Connection = connQuelle
    18. cmdZiel.Connection = connZiel
    19. cmdQuelle.CommandText = "SELECT * INTO [" & ZielDBName & "].[" & ZielTabelleName &
    20. "] FROM [" & QuelleDBName & "].[" & QuelleTabelleName & "]"
    21. cmdQuelle.ExecuteNonQuery()
    22. connQuelle.Close()
    23. connZiel.Close()
    24. Catch ex As OleDbException
    25. MessageBox.Show(ex.Message, "OleDbException", MessageBoxButtons.OK,
    26. MessageBoxIcon.Exclamation)
    27. ' Return False
    28. Catch ex As Exception
    29. MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK,
    30. MessageBoxIcon.Exclamation)
    31. ' Return False
    32. Finally
    33. connQuelle.Close()
    34. connZiel.Close()
    35. End Try
    36. connQuelle.Close()
    37. connZiel.Close()
    38. End Sub


    wenn ich die Datenbank ohne Passwort erstelle und nachträglich ein Passwort erstellen möchte bekomme ich die Fehlermeldung, dass die Datenbank noch geöffnet ist.

    VB.NET-Quellcode

    1. Private Sub PasswortSetzen(DatenBank As String)
    2. Dim sDatabasePath As String = DatenBank & ";"
    3. Dim conPaasswort As New OleDbConnection
    4. Dim cmdPaswort As New OleDb.OleDbCommand
    5. conPaasswort.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &
    6. sDatabasePath & ";Jet OLEDB:Database Password=" & MyDbPassword
    7. cmdPaswort.Connection = conPaasswort
    8. cmdPaswort.CommandText = "ALTER Database Password " & MyDbPassword & " " & MyDbPassword & ";"
    9. conPaasswort.Open()
    10. cmdPaswort.ExecuteNonQuery()
    11. conPaasswort.Close()
    12. MsgBox("Passwort geändert zu " & MyDbPassword)
    13. End Sub


    Ich habe das Gefühl, dass nach

    VB.NET-Quellcode

    1. Dim catalog As Object
    2. catalog = CreateObject("ADOX.Catalog")
    3. 'catalog.create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " & PfadKasse)
    4. catalog.create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PfadKasse &
    5. "; Jet OLEDB:Database Password=" & MyDbPassword & ";")


    die Datenverbindung nicht geschlossen wird und VB deswegen meckert. In dem Verzeichniss in dem die Datenbank erstellt wird steht auch immer noch eine .ldb Datei und die stehen ja, soweit ich weiß, nur dort wenn noch eine offene Verbindung exitstiert.
    ich habs gelöst. Nach Stunden des suchens.


    erstens muss man noch ein paar Sachen vorher machen.
    docs.microsoft.com/de-de/sql/a…asic?view=sql-server-2017

    und
    support.microsoft.com/de-de/he…using-adox-and-visual-bas

    VB.NET-Quellcode

    1. Imports ADOX
    2. Imports ADODB
    3. Dim DB As New ADOX.Catalog()
    4. 'DB.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PfadKasse)
    5. DB.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PfadKasse &
    6. "; Jet OLEDB:Database Password=" & MyDbPassword & ";")
    7. Dim con As ADODB.Connection
    8. con = CType(DB.ActiveConnection, Connection)
    9. con.Close()

    damit erstellt man eine neue, Passwortgeschütze, Datenbank und schließt danach die Verbindung.


    und in Zeile 26 bis 29 habe ich einen ganz blöden Fehler gemacht. Quelle und Ziel verwechselt. Ich könnte mir selber....

    VB.NET-Quellcode

    1. cmdZiel.CommandText = "SELECT * INTO [" & ZielDBName & "].[" & ZielTabelleName &
    2. "] FROM [" & QuelleDBName & "].[" & QuelleTabelleName & "]"
    3. cmdZiel.ExecuteNonQuery()


    so geht es