none
OleDB Command Zugriff auf externe MDB RRS feed

  • Frage

  • Ich arbeite in meinem VB.NET-Projekt mit einer OleDbConnection und
    möchte einen UPDATE-Befehl absetzen.
     
    Das besondere ist, daß in dem Update eine Tabelle der aktuellen MDB mit
    einer Tabelle einer externen MDB gejoitn werden soll.
     
    Ich habe folgendes versucht, bekomme aber immer Syntaxfehler:
     UPDATE table1 INNER JOIN t_table1 IN
    'C:\meine.mdb'[';DATABASE=C:\meine.mdb', False, False, ';PWD=pwd'] AS b
    ON table1.ID=b.ID SET table1.Text1=b.Text1 WHERE table1.ID Is Not Null
     
    Eine Ausnahme (erste Chance) des Typs "System.Data.OleDb.OleDbException"
    ist in System.Data.dll aufgetreten.
     UPDATE table1 INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    ';Database=C:\meine.mdb;pwd=pwd;', 'SELECT * FROM table1') AS b ON
    table1.ID=b.ID SET table1.Text1=b.Text1 WHERE table1.MatGrp Is Not Null
     
    Eine Ausnahme (erste Chance) des Typs "System.Data.OleDb.OleDbException"
    ist in System.Data.dll aufgetreten.
     Wie kann ich zwei Tabellen unterschiedlicher Access-Datenbanken in einem
    JOIN zusammenbekommen?
     
    Ich weiß daß SELECTs wie folgender gehen - das muss man doch nutzen
    können!!!
    SELECT * FROM DB_BABR IN
    'C:\Temp\data03.mdb'[';DATABASE=C:\Temp\data03.mdb', False, False,
    ';PWD=pwd'];
     
    Danke für eure Hilfe
     
    Lutz
     
    Mittwoch, 9. Januar 2013 17:11

Antworten

  • Hi Lutz aus Karl-Marx-Stadt : –),
    solche kaum dokumentierten Verrenkungen versuche ich zu vermeiden.
     
    Ich würde in solchem Fall die Tabelle “b” (c:\meine.mdb) zweispaltig (ID,Text1) in das Programm laden (in eine DataTable) und dann in einer Schleife die table1 aktualisieren. Wenn die Anzahl der Datensätze ungünstig ist, dann kann auch noch table1 laden (auch zweispaltig), mit DatRelations in einem DataSet verknüpfen, mit LinQ aktualisieren und dann ein Update absetzen.
     
     
    --
    Peter Fleischer
    Mittwoch, 9. Januar 2013 20:29
  • Hi,
    lade beide Tabellen in Tabellen eines typisiertes DataSet, interiere durch die Menge, die ein Linq-Ausdruck liefert und führe ein Update aus, etwa so als Konsolenanwendung:
    Imports System.Data.OleDb
    
    Module Module1
    
      Sub Main()
        Dim dt1 As New DataSet1.Tab1DataTable
        Dim dt2 As New DataSet1.Tab1DataTable
        Using da1 As New OleDbDataAdapter("SELECT ID,Text1 FROM Table1", My.Settings.cn1)
          da1.Fill(dt1)
          Using da2 As New OleDbDataAdapter("SELECT ID,Text1 FROM Table2", My.Settings.cn2)
            da2.Fill(dt2)
          End Using
          For Each r In From itm1 In dt1.AsEnumerable Join itm2 In dt2.AsEnumerable On itm1.ID Equals itm2.ID
            r.itm1.Text1 = r.itm2.Text1
          Next
          Dim cb As New OleDbCommandBuilder(da1)
          da1.Update(dt1)
        End Using
        Console.ReadKey()
      End Sub
    
    End Module
    

    --
    Viele Gruesse
    Peter

    Donnerstag, 10. Januar 2013 19:26

Alle Antworten

  • Hi Lutz aus Karl-Marx-Stadt : –),
    solche kaum dokumentierten Verrenkungen versuche ich zu vermeiden.
     
    Ich würde in solchem Fall die Tabelle “b” (c:\meine.mdb) zweispaltig (ID,Text1) in das Programm laden (in eine DataTable) und dann in einer Schleife die table1 aktualisieren. Wenn die Anzahl der Datensätze ungünstig ist, dann kann auch noch table1 laden (auch zweispaltig), mit DatRelations in einem DataSet verknüpfen, mit LinQ aktualisieren und dann ein Update absetzen.
     
     
    --
    Peter Fleischer
    Mittwoch, 9. Januar 2013 20:29
  • Am 09.01.2013 21:29, schrieb Peter Fleischer [MVP]:
    > Hi Lutz aus Karl-Marx-Stadt : –),
    > solche kaum dokumentierten Verrenkungen versuche ich zu vermeiden.
    > Ich würde in solchem Fall die Tabelle “b” (c:\meine.mdb) zweispaltig
    > (ID,Text1) in das Programm laden (in eine DataTable) und dann in einer
    > Schleife die table1 aktualisieren. Wenn die Anzahl der Datensätze
    > ungünstig ist, dann kann auch noch table1 laden (auch zweispaltig), mit
    > DatRelations in einem DataSet verknüpfen, mit LinQ aktualisieren und
    > dann ein Update absetzen.
     
    Hast du dafür mal ein Beispiel? Hab noch nicht viel mit DataTables,
    DataSets und DataRelations gearbeitet .... und hab grad ein kleines
    Zeitproblem ;)
     
     
    Donnerstag, 10. Januar 2013 06:59
  • Hi,
    lade beide Tabellen in Tabellen eines typisiertes DataSet, interiere durch die Menge, die ein Linq-Ausdruck liefert und führe ein Update aus, etwa so als Konsolenanwendung:
    Imports System.Data.OleDb
    
    Module Module1
    
      Sub Main()
        Dim dt1 As New DataSet1.Tab1DataTable
        Dim dt2 As New DataSet1.Tab1DataTable
        Using da1 As New OleDbDataAdapter("SELECT ID,Text1 FROM Table1", My.Settings.cn1)
          da1.Fill(dt1)
          Using da2 As New OleDbDataAdapter("SELECT ID,Text1 FROM Table2", My.Settings.cn2)
            da2.Fill(dt2)
          End Using
          For Each r In From itm1 In dt1.AsEnumerable Join itm2 In dt2.AsEnumerable On itm1.ID Equals itm2.ID
            r.itm1.Text1 = r.itm2.Text1
          Next
          Dim cb As New OleDbCommandBuilder(da1)
          da1.Update(dt1)
        End Using
        Console.ReadKey()
      End Sub
    
    End Module
    

    --
    Viele Gruesse
    Peter

    Donnerstag, 10. Januar 2013 19:26
  • Hallo LutzChemnitz,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 14. Januar 2013 12:36
    Moderator