In Listbox Werte aus zwei seperaten mdb Datenbanken eintragen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von mmgg.

    In Listbox Werte aus zwei seperaten mdb Datenbanken eintragen

    Hallo zusammen,

    ich bin gerade dabei ein altes Programm von mir anzupassen. In dem in einer Form Werte aus einer mdb Datenbank in eine Listbox eingetragen werden,
    nun muss ich das Programm etwas umschreiben so das in der Listbox die Einträge aus zwei Datenbanken in einer Zeile enthalten sind.
    In der sehen Geräte, deren Informationen und eine PersonenID , in der anderen Datenbank stehen eine ID die PeronenID und deren Namen , die in der Listbox
    an die Geräte angehängt werden sollen.

    VB.NET-Quellcode

    1. Private Sub cmbV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbV.SelectedIndexChanged
    2. If cmbV.SelectedValue > 0 Then
    3. Try
    4. con.Open()
    5. cmd.CommandText = "select * from V where ID = " &
    6. cmbV.SelectedValue
    7. reader = cmd.ExecuteReader()
    8. reader.Read()
    9. Variablen.var_AktuellAusgewählterVnummer = reader("Vnummer")
    10. reader.Close()
    11. Catch ex As Exception
    12. MessageBox.Show(ex.Message)
    13. End Try
    14. con.Close()
    15. con2.ConnectionString =
    16. "Provider=Microsoft.Jet.OLEDB.4.0;" &
    17. "Data Source=C:\datenbank\db_" & var_AktuellAusgewählterVnummer & ".mdb"
    18. cmd2.Connection = con2
    19. con3.ConnectionString =
    20. "Provider=Microsoft.Jet.OLEDB.4.0;" &
    21. "Data Source=C:\datenbank\db_Personen.mdb"
    22. cmd3.Connection = con3
    23. Try
    24. con2.Open()
    25. cmd2.CommandText = "select * from Personen"
    26. Ausgabe()
    27. Catch ex As Exception
    28. MessageBox.Show(ex.Message)
    29. End Try
    30. con2.Close()
    31. End If
    32. End Sub
    33. Private Sub Ausgabe()
    34. reader2 = cmd2.ExecuteReader()
    35. ListBox1.Items.Clear()
    36. Do While reader2.Read()
    37. ListBox1.Items.Add(
    38. reader2("PersonenID") & " | " &
    39. reader2("S"))
    40. Hier müssten die Einträge aus der zweiten Datenbank "db_Personen.mdb" stehen
    41. Loop
    42. reader2.Close()
    43. End Sub


    Leider stehe ich gerade auf dem Schlauch und komme nicht weiter, alle versuche das Problem zu lössen funktionieren nicht und über
    die Suchmaschinen finde ich auch keinen Lösungsansatz.

    Hat einer von euch eine Idee?

    MFG DotNetBeginner
    paramter brauchst du nicht.
    DataAdapter schon
    mit blick auf deinen code gehe ich davon aus, dass dir DataAdapter bekannt ist

    Wenn es sich nicht mergen lässt(zieh ich jetzt mal in erwägung weil es um zwei versch. DBs geht), dann mach eine lokale datatable und zieh die Daten aus den Dataset.Tables dahinein.
    und dann eben
    myListB.DataSource = dt

    Nur ein Update wird dann schwierig.
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    Danke euch beiden für die Tips.

    Ich hab gestern noch ein wenig im
    Internet gesucht und habe auch was gefunden glaub ich, nebenbei hab ich
    mich noch dafür entschieden von der Listbox
    auf ein Listview
    umzusteigen. Der Umstieg von Listbox auf ein Listview hat auch
    funktioniert nur mit dem DataTable hab ich noch Problemme.

    Folgendes hab ich im gefundne:

    VB.NET-Quellcode

    1. ' ============================
    2. ' .NET-Code-Beispiel in Visual Basic .NET
    3. ' Verknüpfung von Tabellen innerhalb eines DataSet-Objekts
    4. ' (C) Holger@Schwichtenberg.de
    5. ' ============================
    6. Sub ADONET_join1()
    7. Dim DS As System.Data.DataSet
    8. Dim Conn As System.Data.OleDb.OleDbConnection
    9. Dim Com As System.Data.OleDb.OleDbCommand
    10. Dim DT As System.Data.DataTable
    11. Dim DR1 As System.Data.DataRow
    12. Dim DR2 As System.Data.DataRow
    13. Dim DR3 As System.Data.DataRow
    14. Dim DRel1 As System.Data.DataRelation
    15. Dim DRel2 As System.Data.DataRelation
    16. Dim DC1 As System.Data.DataColumn
    17. Dim DC2 As System.Data.DataColumn
    18. Dim SQL As String
    19. ' --- Verbindung öffnen
    20. Conn = New System.Data.OleDb.OleDbConnection(CONNSTRING)
    21. Conn.Open()
    22. ' --- DataSet erzeugen
    23. DS = New System.Data.DataSet()
    24. ' --- 1. Tabelle einlesen
    25. SQL = "SELECT * FROM Produkte"
    26. AddToDS(DS, "Produkte", Conn, SQL)
    27. ' --- 2. Tabelle einlesen
    28. SQL = "SELECT * FROM Bestellungen"
    29. AddToDS(DS, "Bestellungen", Conn, SQL)
    30. ' --- 3. Tabelle einlesen
    31. SQL = "SELECT * FROM Kunden"
    32. AddToDS(DS, "Kunden", Conn, SQL)
    33. ' --- 1. Verknüpfung erstellen
    34. DC2 = DS.Tables("Bestellungen").Columns("KundenID")
    35. DC1 = DS.Tables("Kunden").Columns("KundenID")
    36. DRel1 = New System.Data.DataRelation("Kunden mit Bestellungen", DC1, DC2)
    37. DS.Relations.Add(DRel1)
    38. ' --- 2. Verknüpfung erstellen
    39. DC2 = DS.Tables("Bestellungen").Columns("PID")
    40. DC1 = DS.Tables("Produkte").Columns("ID")
    41. DRel2 = New System.Data.DataRelation("Produkte mit Bestellungen", DC1, DC2)
    42. DS.Relations.Add(DRel2)
    43. DT = DS.Tables("Kunden")
    44. ' --- Schleife über alle Kunden
    45. For Each DR1 In DT.Rows
    46. out(DR1!KundenName)
    47. ' --- Schleife über alle zugeordneten Bestellungen
    48. For Each DR2 In DR1.GetChildRows(DRel1)
    49. Dim d As DateTime
    50. d = CType(DR2!Datum, DateTime)
    51. ' Ermitteln des Produktdatensatzes
    52. DR3 = DR2.GetParentRows(DRel2)(0)
    53. ' Ausgabe
    54. out("Bestellung vom " & _
    55. d.ToShortDateString() & ":" & _
    56. DR2!menge.ToString() & "x " & _
    57. DR3!Name.ToString())
    58. Next
    59. Next
    60. ' --- Verbindung schließen
    61. Conn.Close()
    62. End Sub


    Den obrigen Code hab ich versucht auf meine Bedürfnisse anzupassen:

    VB.NET-Quellcode

    1. Dim verbindung1 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\datenbank\db_" & var_AktuellAusgewählterVnummer & ".mdb")
    2. Dim verbindung2 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\datenbank\db_Personen.mdb")
    3. Dim strsql1 = "select * from Personen"
    4. Dim strsql2 = "select * from Personen"
    5. Dim ausfuehren1 As New OleDbCommand(strsql1, verbindung1)
    6. Dim ausfuehren2 As New OleDbCommand(strsql2, verbindung2)
    7. Dim ds As New DataSet
    8. AddToDS(da, "Vnummer", verbindung1, strsql1)


    Leider erkennt Visual Basic das AddToDS nicht.

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

    Listview ist ein Holzweg. Unterstützt keine Typisierung, kein Databinding, keine Filter, keine Sortierung, keine relationalen Verknüpfungen, keine berechneten Spalten...
    Der ListView-Holzweg

    Also Holzweg heisst das, weils anfänglich gut begehbar aussieht, aber je weiter man kommt, desto schlechter wirds, und iwann stehste mitten im Dickicht.
    also gleich mit 2 Datenbanken einzusteigen ist echt ein total blöder Spezialfall. Technisch glaub beste Lösung wäre, im typisierten Dataset die 2 Tabellen ganz normal anzulegen, und dann halt von verschiedenen Dbs aus befüllen. Da kann man auch ganz normal eine DataRelation im typDataset definieren, und ganz normal programmieren wie in vier Views-Videos gezeigt.
    Ich würd eh während der Entwicklung die Datenbank(en) weglassen.
    So jetzt bin ich schon ein ganzes Stück vorrangekommen.
    Mitllerweile kann ich die zwei Datenbanken in ein DataSet laden und auch die Anzeige im DataGridView funktioniert (zumindest je DataGridView eine Tabelle).
    Nur das mit der Relation zwichen den beiden Tabellen funktioniert nicht.

    Mein Code schaut mitlerweile so aus (Info zur Verinfachung des Code lade ich zum finden des Fehlers die Daten in eine Listbox, das änderich später wieder
    wenn die Relation funktioniert.

    VB.NET-Quellcode

    1. Dim DC1 As System.Data.DataColumn
    2. Dim DC2 As System.Data.DataColumn
    3. Dim DRel1 As System.Data.DataRelation
    4. Dim verbindung1 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\atenbank\db_" & var_AktuellVnummer & ".mdb")
    5. Dim verbindung2 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\datenbank\db_Personen.mdb")
    6. Dim strsql1 = "select * from Personen"
    7. Dim strsql2 = "select * from Personen"
    8. Dim ausfuehren1 As New OleDbCommand(strsql1, verbindung1)
    9. Dim ausfuehren2 As New OleDbCommand(strsql2, verbindung2)
    10. Dim ds As New DataSet
    11. Dim da1 As OleDbDataAdapter = New OleDbDataAdapter(ausfuehren1)
    12. Dim da2 As OleDbDataAdapter = New OleDbDataAdapter(ausfuehren2)
    13. ds.Tables.Add("AV")
    14. ds.Tables.Add("Personen")
    15. da1.Fill(ds.Tables("AV"))
    16. da2.Fill(ds.Tables("Personen"))
    17. DC1 = ds.Tables("AV").Columns("PersonenID")
    18. DC2 = ds.Tables("Personen").Columns("ID")
    19. DRel1 = New System.Data.DataRelation("AV mit Personen", DC2, DC1)
    20. ds.Relations.Add(DRel1)
    21. For Each row As DataRow In ds.Tables("AV").Rows
    22. REM For Each row As DataRow In ds.Tables("Personen").ChildRelations
    23. DataGridView1.Rows.Add(row("PersonenID"), row("StNr"))
    24. Next
    25. ListBox1.Items.Clear()
    26. For Each PersonenID As DataRow In ds.Tables("AV").Rows
    27. ListBox1.Items.Add(PersonenID("StNr"))
    28. For Each ID As DataRow In PersonenID.GetChildRows(DRel1)
    29. ListBox1.Items.Add(ID("Vorname"))
    30. Next
    31. Next


    Es sollte in der Listbox in der ersten Zeile eine Nummer erscheinen und in der nächsten der Name dazu, wiederum in der nächten Zeile eine Nummer, usw...
    Bei Mir in der Listbox erscheint leider nur die erste Zahl dann nichts mehr und es folgt die Fehlermeldung:

    "GetChildRows erfordert eine Zeile, deren Tabele Personen ist. Die Table der
    angegebenen Zeile ist jedoch AV"

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

    @beginner,

    ich hab solch eine relation nie verwendet, deshalb basiert folgendes auf den Grundprinzipien, ist aber schon lang her, dass ich mich intensiv damit beschäftigt hab.

    Du hast zwar nur ein dataset, und ein dataset ist zunächst auch erstmal ein eigenständiges object. Es bleibt aber eine 'Beziehung' bestehen, zwischen Adapter und Dataset. Wenn du jetzt über zwei versch. Adapter, und zwei versch. Command-Objecte, Tabellen ziehst, in deine Dataset, dann könnte eben das einer Relation Weg stehen.

    Du brauchts keine zwei Adapter für zwei versch DBs, du brauchts auch nur ein Command.
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    @mmgg

    Wenn du jetzt über zwei versch. Adapter, und zwei versch. Command-Objecte, Tabellen ziehst, in deine Dataset, dann könnte eben das einer Relation Weg stehen.


    das müsste schon so passen, ich hab jetzt schon die wildesten Kombinationen durch und wenn ich Teile des obrigen Code auf folgendes abändere:

    VB.NET-Quellcode

    1. ListBox1.Items.Clear()
    2. For Each ID As DataRow In ds.Tables("Personen").Rows
    3. ListBox1.Items.Add(ID("Vorname"))
    4. For Each PersonenID As DataRow In ID.GetChildRows(DRel1)
    5. ListBox1.Items.Add(PersonenID("StNr"))
    6. Next
    7. Next


    erhalte ich in der Listbox folgendes:

    Quellcode

    1. Name A
    2. 380
    3. Name B
    4. 270
    5. Name C
    6. 250
    7. Name D
    8. Name E
    9. Name F
    10. Name G
    11. 120
    12. Name H

    hier stimmt auch die Realation und das die Einträge "Name D, Name E, Name F, Name G" keine Zahlen haben ist auch richtig, da ich für diese in der zweiten Tabelle keine Werte zugewiesen habe
    und da ich in diesem geänderten Code als Haupttabelle die Personen angegeben habe ist auch richtig das alle Personen angzeigt werden und die Zahlen nur unter den Personen stehen die auch
    einen Bezug zur anderen Tabelle haben.
    Ich versteh leider nur nicht wiso das es so funktioniert und nicht anders herum, wenn ich den Code wieder zurück ändere auf:

    VB.NET-Quellcode

    1. ListBox1.Items.Clear()
    2. For Each PersonenID As DataRow In ds.Tables("AV").Rows
    3. ListBox1.Items.Add(PersonenID("StNr"))
    4. For Each ID As DataRow In PersonenID.GetChildRows(DRel1)
    5. ListBox1.Items.Add(ID("Vorname"))
    6. Next
    7. Next

    erhalte ich in der Listbox wieder nur folgendes:

    Quellcode

    1. 380

    und die Fehlermeldung:
    GetChildRows erfordert eine Zeile, deren Tabele Personen ist. Die Table der angegebenen Zeile ist jedoch AV

    Die Zahl 380 passt auch an dieser Stelle, nur mir fehlt der Name dazu und die folgenden 3 Werte und Namen.
    @beginner: Von den vier Views-Videos scheint nichts bei dir angekommen zu sein.
    • Film1 zeigt doch, wie man eine Relation designed
    • im gesamten Tut, in jedem Film ist ununterbrochen davon die Rede, die Typisierung des typisierten Datasets zu nutzen - Was machst du?

      VB.NET-Quellcode

      1. Dim ds As New DataSet
      2. '...
      3. ds.Tables.Add("AV")
      4. '...
      5. da1.Fill(ds.Tables("AV"))
      Ein Crap nach dem anderen.
    Was stört dich an typisiertem Dataset? Warum willst du nicht mit geeigneten Klassen programmieren, warum kein Databinding verwenden, warum Oberflächen nicht mit Wysiwyg-Designern gestalten?

    Zu deiner Vorstellung: iwie willst du aus einem Datensatz zwei machen, die dann in verschiedenen Zeilen einer Listbox anzugucken wären. Das ist auch Crap. Datensätze sind eine Einheit.

    Achso, und scheinbar braucht ihr beide (zumindest beginner) den Begriff "Relation" in einem anderen Sinne, als er eigentlich als Fachwort der Datenbänkerei definiert ist.
    Lasses dir nochmal erklären: die relationale GrundIdee
    @ErfinderDesRades

    ich hab mir deine Filme schon angeschaut und ich weiß auch was Relationen in Datenbanken sind.
    warum Oberflächen nicht mit Wysiwyg-Designern gestalten


    wie an der Codezeile:

    VB.NET-Quellcode

    1. Dim verbindung1 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Datenbank\db_" & var_AktuellVnummer & ".mdb")

    ist später eine der beiden Datenbanken eine von mehreren und es kann vorkommen das neue erstellt werden, dann ist es für mich einfacher eine leere mdb-Datei welche nur die Tabellen
    mit den Spalten enthält nach "C:\Datenbank\" zu kopieren als Visal Basic zu öffnen dort eine neue Tabelle zu erstellen das Programm neu zu kompilieren und das geänderte Programm
    wieder auf alle Rechner zu installiren. Welche es genau ist lese ich vorher über eine Combobox ein die wiederum den genauen Datenbanknamen aus einer anderen Tabelle holt, darum
    war/ist für mich der Weg über den Code die "bessere" Wahl, da deine Filme die Datenbank- und Relationserstellung über den Wysiwyg-Designer zeigen waren sie zwar intressant aber
    für mich in diesen Fall nicht zu verwenden, also habe ich im Internet nach andern Möglichkeiten gesucht, die obrige gefunden und versucht sie an meine Verwendungsart anzupassen.

    Zu deiner Vorstellung: iwie willst du aus einem Datensatz zwei machen, die dann in verschiedenen Zeilen einer Listbox anzugucken wären


    Wie oben schon oben erwähnt:
    Mein Code schaut mitlerweile so aus (Info zur Verinfachung des Code lade ich zum finden des Fehlers die Daten in eine Listbox, das ändere ich später wieder wenn die Relation funktioniert.

    Wie ich den Beispielcode gefunden habe, wusste ich noch nicht richtig wie ich über den Code ein DataGridView bearbeiten kann (das hat sich mittlerweile geändert) also habe ich um zu testen ob der
    Code um die beiden Tabellen zu verbinden funktioniert und um Fehler zu beheben, eine einfache ListBox erstellt, die wenn der Code zum erstellen der Relation durch ein DataGridView ersetzt wird.


    Achso, und scheinbar braucht ihr beide (zumindest beginner) den Begriff "Relation" in einem anderen Sinne, als er eigentlich als Fachwort der Datenbänkerei definiert ist


    Das steht doch auch hier wie du es im Beispiel "die relationale GrundIdee" beschrieben hast

    VB.NET-Quellcode

    1. DC1 = ds.Tables("AV").Columns("PersonenID")
    2. DC2 = ds.Tables("Personen").Columns("ID")
    3. DRel1 = New System.Data.DataRelation("AV mit Personen", DC2, DC1)
    4. ds.Relations.Add(DRel1)

    in diesen Code-Zeilen aus dem im Internet gefundenen Beispiel wird hier die Relation der PersonenID z.b. "1" aus der Tabelle AV mit der ID "1" aus der Tabelle Personen erstellt.

    Und wie du im 10ten Beitrag dieses Themas lesen kannst funktioniert der Code auch nur leider falsch herum. Wenn ich die Tabelle Personen als Haupttabelle benutze fügt mir
    der Code auch zu den jeweigen Personen die richtigen Werte aus der zweiten DB hinzu. Leider kann ich machen was ich will richtig herrum funktioniert es einfach nicht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DotNetBeginner“ ()

    ok - da entsteht tatsächlich eine Datarelation. mmg irrt übrigens, wenn er annimmt, dass verschiedene DataAdapter eine DataRelation (jetzt als .Net-Klasse verstanden) verhindern soll.

    Bleibt noch die Fragen offen, warum du unbedingt alles im Code lösen willst, statt in Wysiwyg-Designern, inklusive warum du kein Databinding im FormDesigner nutzen willst, und warum du unbedingt mit untypisierten Werten arbeiten willst.

    Ich weiß auch nicht, was an deiner DataRelation nicht funktioniert, also was das erwartete Ergebnis wäre. Ich vermute, du willst einen JoiningView erzeugen - also wenn das so ist: dein untypisierter Ansatz verbaut dir das von vornherein.
    (Naja, nicht ganz: evtl. findest du auch Codes im Internet, mit denen man zur Laufzeit DatagridviewComboboxColumns ins DataGridView einfügt, und so weiter.
    Das geht halt in tausende unnötiger Zeilen Code und ist unwartbar - aber technisch möglich, und so Zeugs findest du bestimmt auch im Internet.)

    ErfinderDesRades schrieb:

    ok - da entsteht tatsächlich eine Datarelation. mmg irrt übrigens, wenn er annimmt, dass verschiedene DataAdapter eine DataRelation (jetzt als .Net-Klasse verstanden) verhindern soll.

    Gut, weiss ich das auch wieder.

    Auch wenn das nicht direct zum Thema gehört, aber er braucht keine zwei Adapter, keine zwei Command, keine zwei Connection - Objecte. Scheint mir hier nicht nur ein Comfort Frage zu sein.

    Den Code guck ich mir später nochmal an , fand was auf galileo, sollte schon so gehen.
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    Du hast dich nicht vertippt oder vercopiert an der Stelle "GetChildRows" in der For schleife?
    Der Error von dem du schreibst ist ein typischer, wenn man mit der MasterTabelle über GetChildRows laufen will und umgekehrt.

    Übrigens so gehts auch, mit jeweils nur einem Object
    Ab Zeile
    DC1 = ds.Tables("AV").Columns("PersonenID")
    ist es wieder gleich

    VB.NET-Quellcode

    1. ' der connectionstring zeigt in beiden fällen auf dieselbe db, wird sich er jeder leicht anpassen können
    2. Dim DC1 As System.Data.DataColumn
    3. Dim DC2 As System.Data.DataColumn
    4. Dim DRel1 As System.Data.DataRelation
    5. Dim myCnn As OleDbConnection
    6. Dim myCmd As OleDbCommand
    7. Dim da1 As OleDbDataAdapter
    8. Dim ds As DataSet
    9. Dim myCnnString As String = ""
    10. Dim strPathNorth As String = ""
    11. Dim txt As String = ""
    12. Dim strSQL As String = ""
    13. strPathNorth = System.IO.Path.GetDirectoryName(Application.ExecutablePath)
    14. If System.IO.File.Exists(strPathNorth & "\NordOrg.mdb") Then
    15. strPathNorth = (strPathNorth & "\NordOrg.mdb")
    16. Else
    17. txt = "Die Datei: NordOrg.mdb, ist nicht im Pfad: " & strPathNorth
    18. MessageBox.Show("")
    19. Exit Sub
    20. End If
    21. Try
    22. myCnn = New OleDbConnection()
    23. myCmd = New OleDbCommand
    24. da1 = New OleDbDataAdapter
    25. ds = New DataSet
    26. '////////////////////////////////
    27. 'ABSCHNITT FÜR C:\atenbank\db_"
    28. myCnnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strPathNorth
    29. myCnn.ConnectionString = myCnnString
    30. strSQL = "select * from Customers"
    31. myCmd.CommandText = strSQL
    32. myCmd.Connection = myCnn
    33. myCnn.Open()
    34. da1.SelectCommand = myCmd
    35. da1.Fill(ds, "tCustomers")
    36. '////////////////////////////////
    37. 'ABSCHNITT FÜR db_Personen
    38. myCnn.Close() ' Verbindung muss geschlossen werden, wenn der connectionstr sich ändern soll
    39. myCnnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strPathNorth
    40. myCnn.ConnectionString = myCnnString
    41. strSQL = "select * from CustomersCopy"
    42. myCmd.CommandText = strSQL
    43. myCmd.Connection = myCnn
    44. myCnn.Open()
    45. da1.SelectCommand = myCmd
    46. da1.Fill(ds, "tOrders")
    47. myCnn.Close()

    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    DC1 = ds.Tables("AV").Columns("PersonenID")
    DC2 = ds.Tables("Personen").Columns("ID")
    DRel1 = New System.Data.DataRelation("AV mit Personen", DC2, DC1)
    ds.Relations.Add(DRel1)

    Noch ein Zusatz
    DC2 wird hier als master übergeben, wenn das trotzdem geht, dann ist das hier eine 1:1 beziehung, wäre es 1:n, dann: "Die beiden Spalten haben momentan keine eindeutigen werte"

    Die übergabe beeinflusst auch die For-Schleifen
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.