Primärschlüssel zweier DataTables auf Gleichheit prüfen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von BillFrankShepard.

    Primärschlüssel zweier DataTables auf Gleichheit prüfen

    Hallo Zusammen,

    Ich habe zwei DataTables mit identischen Spalten in einem DataSet(ds). DataTable1 (dt1) wird durch eine XML-Datei befüllt. DataTable2(dt2) ist über DatabindingSource an ein DataGridView gebunden. Hier sollen Daten in die jeweiligen Spalten vom Nutzer eingetragen werden. Ist das dt2 befüllt worden, sollen die Daten aus dt2 in dt1 übernommen werden.

    Mit

    VB.NET-Quellcode

    1. ds.dt1.Merge(ds.dt2)


    werden die Werte der Zeilen aus dt1, die den gleichen Primärschlüssel(ID) wie die Zeilen aus dt2 haben, von denen aus dt2 überschrieben.

    Das Ziel ist folgendes:

    Ich möchte überprüfen ob ein Primärschlüssel aus dem dt2 in dt1 schon existiert. Ist das der Fall, sollen die IDs der Zeilen aus dt2 so angepasst werden, dass der erste ID Wert aus dt2 gleich dem Inkrement des maximalen ID Wertes aus dt1 ist. Der zweite entspricht dann dem doppeltem Inkrement usw. .

    Hat jemand vielleicht einen Ansatz, wie man von zwei DataTables die Primärschlüssel vergleichen kann?

    Danke und ein schönes Pfingsten! :)

    *Topic verschoben*

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

    OffTopic schrieb:

    Ich habe jetzt so oft erster, zweiter, doppelt usw. gelesen, dass ich nur noch "Bahnhof" verstehe. :D

    Im Grunde geht es Dir also nur darum, 2 Primärschlüssel zu vergleichen und zu prüfen, bei welchem Datentyp sie gelten?
    Im Grunde geht es Dir also nur darum, 2 Primärschlüssel zu vergleichen und zu prüfen, bei welchem Datentyp sie gelten?


    Nein. ^^ Ich hab zwei Tables und die beiden sollen anhand ihres Primärschlüssels verglichen werden. Sind einer oder mehrere Primärschlüssel gleich im zweiten Table gleich denen im ersten, sollen Sie ersetz werden. Mir gehts jetzt hauptschlich darum beide Tables auf identische Primärschlüssel zu vergleichen.

    Besser? :D
    Es scheint mir, als sei Deine 2. Table völlig überflüssig. Denn wenn Du deren Inhalt ersetzen kannst, brauchst Du sie nicht! :thumbsup:


    Doch eben schon. Es geht darum, dass ein Nutzer Eingaben tätigen können soll (zweites DataTable), er aber nicht die jeweiligen ID Werte der ersten DataTable kennt.

    Beispiel:

    In Datatable 1 stehen folgende Werte:

    Spalte1 (pkey) Spalte2

    1 blub
    2 blub2
    3 blub3


    In Datatable 2 trägt der Nutzer dann diese Werte ein:

    Spalte1 (pkey) Spalte2
    1 blub4
    2 blub5

    Dann soll verglichen werden. Hier in dem Fall hätten zwei Zeilen den gleiche Primärkey.
    Der wird dann verändert:


    Spalte1 (pkey) Spalte2
    4 blub4
    5 blub5

    Und dann werden die beiden Tabelen mit der Merge-Methode zusammengeführt, sodass dann Table 1 so aussieht:

    Spalte1 (pkey) Spalte2

    1 blub
    2 blub2
    3 blub3
    4 blub4
    5 blub5

    :thumbsup:
    Ich habe Dir mal eine kleine Application geschrieben (eine Textbox, ein NumericUpDown).

    Du kannst in den Textboxen auch "Hans Wurst" reinschreiben und die Zahl des NumericUpDown ändern. Sobald Du die Bindingscource änderst (Auswählen einer anderen Row), wird die Ansicht im View aktualisiert, nicht aber gespeichert! Speichern musst Du einfach über das MenuStrip. ;)

    Die Änderungen führst Du ganz einfach über die Controls, nicht über das View durch. Diese sind an die Source gebunden...
    Dateien
    Du kannst in den Textboxen auch "Hans Wurst" reinschreiben und die Zahl des NumericUpDown ändern. Sobald Du die Bindingscource änderst (Auswählen einer anderen Row), wird die Ansicht im View aktualisiert, nicht aber gespeichert! Speichern musst Du einfach über das MenuStrip. ;)

    Die Änderungen führst Du ganz einfach über die Controls, nicht über das View durch. Diese sind an die Source gebunden...


    Hey Super Danke!! :thumbup:

    Ich werds mir morgen mal anschauen, wenn ich weiter mache und dann mein resultat posten.

    StormySunshine schrieb:

    Man soll bekanntlich aber klein anfangen.
    Jo, und zwar ohne Sql. Datenbänkerei-Einstieg

    ich kapiere die Anforderung des TEs einfach nicht. Wenn alle Datensätze der Table2 in Table1 hinzugefügt werden sollen, dann soller doch einfach die Daten der Table1 hinzufügen. Ein eindeutiger und neuer Primärschlüssel wird dabei dann doch automatisch generiert.

    Ich persönlich habe DataTable.Merge noch nie nie gebraucht.

    ErfinderDesRades schrieb:

    Ich persönlich habe DataTable.Merge noch nie nie gebraucht.

    Ich auch nicht... :thumbsup:

    BillFrankShepard schrieb:

    Bezweifle ich stark, da ich in dem Gebiet ziemlicher Anfänger bin...! ;)
    Vielleicht lag es auch einfach daran... ?

    Es sollte bestimmt den vergleichbaren Effekt erfüllen: :D

    VB.NET-Quellcode

    1. TextBox1.Text = "Hallo"
    2. TextBox2.Text = TextBox1.Text



    Wir wollen einfach mal sehen, ob er in kleinen Schritten voran kommt. ;)
    @StormySunshine

    Wir wollen einfach mal sehen, ob er in kleinen Schritten voran kommt. ;)


    ganz genau das bin ich ! ;)

    Danke für dein kleines Prgramm. Hat mir geholfen!

    @ErfinderDesRates

    Jo, und zwar ohne Sql. Datenbänkerei-Einstieg


    Ja interessanter Beitrag.

    kann als gelöst ansehen werden!