Excel in Access Importieren

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Kalle.

    Excel in Access Importieren

    Hallo zusammen,
    Ich versuche seit zwei Tagen über VB Visual Studio ein Excel-File in eine Access-Database einzulesen.
    Wenn ich es über SELECT versuche, Funktioniert das, es wird eine neue Tabelle angelegt und die Daten werden eingetragen.

    Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim AccessConn As New System.Data.OleDb.OleDbConnection(Artikel_DB)
    3. AccessConn.Open()
    4. Dim AccessCommand As New System.Data.OleDb.OleDbCommand("SELECT * INTO [Tabelle2] FROM [Excel 12.0;DATABASE=C:\Altium\Altium_DB-Tool\Test_Access_Excel\Test_excel.xlsx;HDR=NO;IMEX=1].[Result$]", AccessConn)
    5. AccessCommand.ExecuteNonQuery()
    6. AccessConn.Close()
    7. End Sub


    Soweit, so gut.
    Das ist aber nicht ganz das Ziel: Ich will die Daten in eine vorhandene (leere) Talelle eintragen.
    Wenn ich es mit INSERT... versuche, bekomme ich Fehlermeldungen.

    Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. Dim AccessConn As New System.Data.OleDb.OleDbConnection(Artikel_DB)
    3. AccessConn.Open()
    4. Dim AccessCommand As New System.Data.OleDb.OleDbCommand("Insert INTO [Tabelle1] FROM [Excel 12.0;DATABASE=C:\Altium\Altium_DB-Tool\Test_Access_Excel\Test_excel.xlsx;HDR=NO;IMEX=1].[Result$]")
    5. AccessCommand.ExecuteNonQuery()
    6. AccessConn.Close()
    7. End Sub


    System.InvalidOperationException
    HResult=0x80131509
    Nachricht = ExecuteNonQuery: Connection-Eigenschaft wurde nicht initialisiert.
    Quelle = System.Data
    Stapelüberwachung:
    at System.Data.OleDb.OleDbCommand.ValidateConnection(String method)
    at System.Data.OleDb.OleDbCommand.ValidateConnectionAndTransaction(String method)
    at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
    at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
    at Test_SQL_1.Form1.Button3_Click(Object sender, EventArgs e) in C:\Altium\Altium_DB-Tool\Software\Test_2_Database_1\Test_SQL_1\Test_SQL_1\Test_SQL_1\Form1.vb:line 107
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    at Test_SQL_1.My.MyApplication.Main(String[] Args) in :line 81
    ...
    Diese Ausnahme wurde ursprünglich von dieser Aufrufliste ausgelöst:
    System.Data.OleDb.OleDbCommand.ValidateConnection(string)
    System.Data.OleDb.OleDbCommand.ValidateConnectionAndTransaction(string)
    System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(System.Data.CommandBehavior, string)
    System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
    Test_SQL_1.Form1.Button3_Click(Object, System.EventArgs) in Form1.vb
    System.Windows.Forms.Control.OnClick(System.EventArgs)
    System.Windows.Forms.Button.OnClick(System.EventArgs)
    System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs)
    System.Windows.Forms.Control.WmMouseUp(ref System.Windows.Forms.Message, System.Windows.Forms.MouseButtons, int)
    System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message)
    ...
    [Aufrufliste abgeschnitten]

    Datenbankprogrammierung ist nicht meine Kernkompetenz. Ich wäre für Hilfe ech dankbar ;(

    Danke im Vorraus

    Kalle

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hallo ErfinderdesRades,

    danke für deine Antwort.
    Leider ist dies auch nicht die Lösung.
    auch mit:
    Dim AccessCommand As New System.Data.OleDb.OleDbCommand("Insert INTO [Artikel] FROM [Excel 12.0;DATABASE=C:\Altium\Altium_DB-Tool\Test_Access_Excel\Test_excel.xlsx;HDR=NO;IMEX=1].[Result$]", AccessConn)
    kommt die Fehlermeldung:
    Additional information: Syntaxfehler in der INSERT INTO-Anweisung.
    Diesen Syntaxfehler suche ich seit Tagen. Da der Select-Befehl funktioniert, kann es ja eigentlich nicht an der connection der Database liegen.

    Kalle schrieb:

    Leider ist dies auch nicht die Lösung.
    Doch - dieser Fehler ist gelöst.
    Danach kommt offsichtlich ein weiterer, anderer Fehler.
    Das ist positiv zu bewerten - es zeigt, dass du voran kommst.

    Mit Insert [...] Into From ... kenne ich mich nicht aus. Da würde ich mal eine geeignete Sql-Dokumentation konsultieren. ZB von W3Schools oder zu Access im speziellen gibts sicher auch was.

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

    Kalle schrieb:


    Dim AccessCommand As New System.Data.OleDb.OleDbCommand("Insert INTO [Artikel] FROM [Excel 12.0;DATABASE=C:\Altium\Altium_DB-Tool\Test_Access_Excel\Test_excel.xlsx;HDR=NO;IMEX=1].[Result$]", AccessConn)

    meiner Meinung nach fehlt ein Select *

    das ist ungetestet

    VB.NET-Quellcode

    1. Dim AccessCommand As New System.Data.OleDb.OleDbCommand("Insert INTO [Artikel] Select * FROM [Excel 12.0;DATABASE=C:\Altium\Altium_DB-Tool\Test_Access_Excel\Test_excel.xlsx;HDR=NO;IMEX=1].[Result$]", AccessConn)