Spalte von DB1 nach DB2 kopieren

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Roberto.

    Spalte von DB1 nach DB2 kopieren

    Hallo zusammen,

    ich arbeite hier mit der SQL-Jet
    Ich möchte gerne eine Spalte mit Inhalt von der DB1 in die DB2 kopieren.
    Beide Spalten in beiden DB's sind gleich aufgebaut.
    Bisher hatte ich die Daten von der DB1 sequentiell gelesen und in eine Datei gespeichert.
    Dann aus der Datei die Daten gelesen und in die DB2 eingefügt.
    Das alles immerZeile für Zeile.
    Nun hatte ich eine größere Datei und musste ca. 15 Minuten warten bis die
    Übertragung durchgeführt war.
    Tja, das ist mein Problem.
    Wie könnte ich es beschleunigen?

    VG Roberto

    *Topic verschoben*

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

    SQL Statements „sammeln“ und in Paketen (z.b. 500) gesammelt absenden.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Schicke das hier gesammelt an die DB, statt 3 mal einzeln.

    VB.NET-Quellcode

    1. Dim sql As String = “Insert Into MyTable (Column1,Column2) Values(Foo, Bar)
    2. Insert Into MyTable (Column1,Column2) Values(Foobar, Baz)
    3. Insert Into MyTable (Column1,Column2) Values(Bazbar, FooBaz)“
    4. SendDataToDataBase(sql)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    also, ich arbeite nicht mit Access sondern nur mit der DB von Access.
    Die nennt sich SQL-Jet.
    Im Prinzip wie SQL-Allgemein jedoch mit diversen Einschränkungen.
    Danke schon mal für eure Antworten. Jedoch sagen diese mir nicht soviel, dass ich weiterkommen könnte.
    Ein kleines Beispiel-Code (eine Spalte von der DB1 kopieren und diese Spalte in die DB2 einfügen)
    wäre mir sehr hilfreich.
    Vielleich kann jemand mir damit helfen?

    VG Roberto
    SQL Jet ist ein wenig exotisch.
    Ich weiß nicht, ob das hier jemand kennt.

    Wie du die Conections aufbaust, musst du selbst rausfinden.
    Das SQL-Statement geht dann ungefähr so:

    SQL-Abfrage

    1. INSERT INTO db1.table1 (column1) SELECT column1 FROM db2.table1
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hm...
    da es 2 getrennte Datenbanken sind, muss ja jede davon mit jeweils eigenem ConnectionString versehen werden.
    So weit so gut.
    ' INSERT INTO... ' ist mir bekannt.
    Bisher bin ich davon ausgegangen, dass eine Spalte immer nur in der selben Datenbank kopiert bzw. angelegt werden kann.
    Bei mir sind aber 2 getrennte Datenbanken vorhanden. Die DB1 und die DB2
    Zur Sicherheit nochmal die Frage. Ist das mit deinem Vorschlag möglich?

    VG Roberto
    @Roberto

    versuche es so, kopiere zunächst die Tabelle die du brauchst von quelle nach ziel DB
    dann wie MrMo und Petaod vorgeschlagen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim sSql As String
    3. 'die Tabelle tbl_Artikel aus Db2010 kopieren
    4. Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data source=D:\Db2010.accdb")
    5. con.Open()
    6. 'in die Datenbank N_Backup als Tabelle N_Artikel einfügen
    7. sSql = "SELECT * INTO [;DATABASE=D:\N_Backup.accdb].N_Artikel FROM tbl_Artikel;"
    8. ExecuteSQL(con, sSql)
    9. con.Close()
    10. con = Nothing
    11. End Sub
    12. Public Function ExecuteSQL(ByVal Con As OleDb.OleDbConnection, _
    13. ByVal sSQL As String, _
    14. Optional ByRef ErrMessage As String = Nothing, _
    15. Optional ByVal TransAction As _
    16. OleDb.OleDbTransaction = Nothing) As Integer
    17. ErrMessage = Nothing
    18. Try
    19. Dim Result As Integer = 0
    20. Using Cmd As New OleDb.OleDbCommand(sSQL, Con, TransAction)
    21. Result = Cmd.ExecuteNonQuery
    22. End Using
    23. Return Result
    24. Catch ex As Exception
    25. ErrMessage = ex.Message
    26. Return 0
    27. End Try
    28. End Function