Access-Tabellen kopieren, aus *.accdb wird *.mdb

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    Access-Tabellen kopieren, aus *.accdb wird *.mdb

    Guten Abend,
    möchte eine Tabelle aus einer Access-Datenbank in eine andere Datenbank kopieren.
    Ich habe Office 365 und damit Access 2016 installiert. Betriebssystem Windows 10 (32 bit).

    Programm meldet nun, dass die Datei .....mdb nicht vorhanden sei. Ist auch Ok, da meine Datenbanken alle das Suffix .accdb haben.
    Habe ein Suchlauf im Programm gestartet. mdb wird nicht angegeben.

    Hier mal die Sub

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Update Service (Kopiert Tabelle von DATA\MBSYST.accdb nach MBSYSTEM\MBSOFT_Setup.accdb
    3. ''' </summary>
    4. ''' <param name="Systemtabellennamen"></param>
    5. Public Sub Setuptabellen_Kopieren(ByVal Systemtabellennamen As String)
    6. If Not IO.File.Exists(Pfade.MBSystem.Pfad & Programm.Setupbankname) Then Exit Sub
    7. If Not IO.File.Exists(Pfade.DATA.Pfad & Programm.Updatebankname) Then Exit Sub
    8. MsgBox("Beide Datenbanken stehen zur Verfügung.")
    9. ' Hier nochmals die Zuordnung
    10. Programm.Setupbankname = "MBSOFT_Setup.accdb"
    11. Programm.Updatebankname = "MBSYST.accdb"
    12. Try
    13. Me.Verbindung_MBUPDA.Open()
    14. Dim CMD As New OleDbCommand
    15. CMD.Connection = Me.Verbindung_MBUPDA
    16. CMD.CommandText = "Select * Into [" & Pfade.MBSystem.Pfad & Programm.Setupbankname & "].[" & Systemtabellennamen & "] From " _
    17. & Pfade.DATA.Pfad & Programm.Updatebankname & Chr(34)
    18. MsgBox(CMD.CommandText)
    19. CMD.ExecuteNonQuery()
    20. Verbindung_MBUPDA.Close()
    21. ' Fehlermeldung: Kann die Datei ...\DATA\MBSYST.mdb nicht finden mdb !!!!
    22. Catch ex As Exception
    23. Verbindung_MBUPDA.Close()
    24. MessageBox.Show("Fehler beim Kopieren/Einfügen einer Datentabelle." & vbNewLine & vbNewLine &
    25. ex.Message, "Updateservice" & Programm.Copyright_Messagebox, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    26. End Try
    27. End Sub


    Public Provider As String = "Provider=Microsoft.ACE.OLEDB.12.0;"

    Nutze ich vielleicht den falschen Provider? Obwohl mit diesem Provider alle Datenbankanwendungen laufen.

    Hier noch ein wenig Code:

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Private Passwort As String = ""
    2. Public Provider As String = "Provider=Microsoft.ACE.OLEDB.12.0;"
    3. Public Verbindung_MBUPDA As New OleDbConnection
    4. Public Verbindungsstring_MBUPDA As String = Me.Provider & " Data Source="
    5. Private PWBefehl As String = ";Jet OLEDB:Database Password=" & Passwort
    6. Public Sub Initalisieren()
    7. Me.Verbindungsstring_MBUPDA = Me.Verbindungsstring_MBUPDA & Programm.SystemUpdateVerbindung & Me.PWBefehl
    8. Me.Verbindung_MBUPDA.ConnectionString = Me.Verbindungsstring_MBUPDA
    9. End Sub
    10. ' Klasse Programm
    11. Me.Setupbankname = "MBSOFT_Setup.accdb"
    12. Me.Updatebankname = "MBSYST.accdb"
    13. Me.SystemUpdateVerbindung = Me.StartLaufwerk & "MBSOFT\DATA\MBSYST.accdb"
    14. Me.MeineSetupVerbindung = "C:\MBSYSTEM\MBSOFT_Setup.accdb"

    Gruß Markus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Westerwälder“ ()

    *.accdb ist das neuere Format. Speichere standardmäßig deine Access-Datenbanken als *.MdB-Datei durch das Programm MS Access selbst ("Speichern unter" und dann bei Typ "*.MdB" auswählen). Soweit ich weiß gehen dabei keine Funktionen verloren (zumindest bei mir nicht). VB kann nur *.mdb ansteuern.
    Hallo und vielen Dank,

    VB kann wohl wirklich nur *.mdb ansteuern. (nicht zu glauben, Access und VB kommen aus einem Haus)
    Wenn ich auf mdb umstelle (gehe ich chronologisch wieder zurück) muss ich den Provider anpassen.

    Möchte ich eigentlich nicht, da die restliche Datenbankverarbeitung in der aktuellen Form gut läuft.
    Gibt es denn keine andere Möglichkeit eine Tabelle zu kopieren?
    Gruß Markus
    Der Thread ist etwas alt, aber eine Anpassung des Connection-Strings könnte helfen:
    Access connection Strings
    Und auf vbforums findet man:
    You can't use Jet to connect to ACCDB files. You have to use ACE. Visit connectionstrings.com
    and check the format for Access 2007. Note that Jet is basically part
    of Windows while ACE is not, so users who don't have Office 2007 or
    later installed may not have it. A standalone version is available as a
    free download from Microsoft.

    Das hast, ein separater Treiber muss installiert werden, solange kein Office >= 2010 installiert ist.
    Microsoft Access Database Engine 2010 Redistributable

    Weiter geht's dann wie in Exemplarische Vorgehensweise: Herstellen einer Verbindung mit Daten in einer Access-Datenbank (Windows Forms) beschrieben.

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

    Hallo us4711, danke dir für deinen Beitrag, habe nicht mehr mit einer Antwort gerechnet.
    Der richtige Treiber ist bereits installiert. Die Verbindung zur Datenbank stelle ich manuell her, da sich der Pfad zur Datenbank ändern kann.

    Vielleicht gibt es ja einen ganz anderen weg.
    Mein Programm läuft bei mir im Haus auf 3 Rechner, die über das Netzwerk verbunden sind. Davon darf ein Rechner (nenne ihn mal Host) Daten verändern und die anderen zwei
    Rechner (nenne sie mal Client) Daten betrachten. Der Client erhält die aktuellen Daten beim Start des Rechners aus dem Netzwerk. Jeder Client hat ein Setupverzeichnis, wo in einer Datenbank anwenderspezifische Daten hinterlegt sind.
    Mein Gedanke war nun:
    Möchte ich diese anwenderspezifische Datenbank um eine Tabelle erweitern, erstelle ich im Netzverzeichnis eine neue Datenbank, mit dieser neuen Tabelle. Der Client erkennt die Neuerung und kopiert diese neue Tabelle mit Inhalt in seine Setup-Datenbank.
    Gruß Markus
    Wenn Du den Pfad zu Deinen Dateien in den Settings der jeweiligen Instanz hinterlegt hast. kanns Du dies dynamisch bei Bedarf anpassen:

    VB.NET-Quellcode

    1. Namespace My
    2. Partial Friend NotInheritable Class MySettings
    3. Inherits Global.System.Configuration.ApplicationSettingsBase
    4. Public Sub SetUserOverride(ByVal BezeichnungDesSettings As String, ByVal Value As String)
    5. Me(BezeichnungDesSettings) = Value
    6. End Sub
    7. End Class
    8. End Namespace