Partielle Aktualisierung von Bestandsdaten

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

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Partielle Aktualisierung von Bestandsdaten

    Hallo,

    Anstatt immer einen komplett neuen Datenstand zu laden möchten ich den bestehenden Datenstand aktualisieren mit einem entsprechenden Ausschnitt neuer Daten. Ein großer Teil der Daten ändert sich nämlich wahrscheinlich nicht.
    Kann ich einen PrimaryKey auf Vorhandensein prüfen? Ich mach es jetzt mit einem Try Block

    VB.NET-Quellcode

    1. For Each row In DS1.importData
    2. With row
    3. Try
    4. DS1.baseData.AddbaseDataRow(.PrimaryKeyColumn, .Value)
    5. Catch ex As ConstraintException
    6. DS1.baseData.FindByPrimaryKeyColumn(.PrimaryKeyColumn).Value = .Value
    7. End Try
    8. End With
    9. Next


    Viele Grüße
    Es gibt doch DeineDataTable.FindByID(). Da kannst Du doch sehen, ob es das schon gibt. Oder Du arbeitest mit LINQ: If Not DS1.baseData.Any(Function(x) x.PrimaryKey = Value) Then neuAnlegen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hm … ich weiß gar nicht, wie ich auf FindByID gekommen bin. Der tDS-Designer erstellt mir keine entsprechende Funktion (mehr?). Nuja, Du könntest Dir den Code von FindByID anschauen oder Du probierst es aus. Ich tippe darauf, dass Du Nothing zurückbekommst, daher vermutlich:

    VB.NET-Quellcode

    1. If DS1.baseData.FindByID(Function(x) x.PrimaryKey = Value) Is Nothing Then neuAnlegen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also mir ist FindById durchaus bekannt, und die ist so simpel, dass Haudruff da eiglich keine Fehler machen kann/konnte - ich gehe davon aus, dasser seine Frage inzwischen selbst beantwortet hat.
    Warum dein tDS-Designer nichts dergleichen generiert ist hingegen wunderlich. Hat deine Test-DataTable etwa keinen PK?
    Na, aber sicher doch haben meine TestTables PKs. Ich hab auch in älteren VBP-Projekten diese Funktion in den tDS.Designer.vb-Dateien gefunden. Trotzdem wird nix bei aktuellen Projekten generiert. Nicht, dass es Framework oder VS-abhängig ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hab es soweit erstmal ohne Try block hinbekommen. Hatte erst noch ein Problem die Redundanz rauszukriegen

    VB.NET-Quellcode

    1. For Each row In DS1.importData
    2. Dim find = DS1.baseData.FindByPrimaryKeyColumn(row.PrimaryKeyColumn)
    3. If find is Nothing Then DS1.baseData.AddbaseDataRow(row.PrimaryKeyColumn, row.Value) : Continue For
    4. find.Value = row.Value
    5. Next


    Ich nutze 4.8
    Ich weiß dass der tDS in höheren Versionen bissle rumzickt. Zumindest bei mir.
    Funktioniert das DS sonst einwandfrei? Bei mir hat der da mal immer ein überflüssiges Namespace erzeugt und der FormDesigner konnte deswegen nicht mehr automatisch drauf zugreifen.

    Den Code von FindBy anschauen, das weiß ich nicht wie das geht, die Funktion ist ja quasi auf eine bestimmte Tabelle zugeschnitten, wie googelt man sowas?

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Haudruferzappeltnoch schrieb:

    Den Code von FindBy anschauen, das weiß ich nicht wie das geht
    Auf ein FindByID klicken und dann F12 oder Rechtsklick und Gehe zu Definition
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Welchen Code spuckt der ObjectBrowser für FindBy bei Dir aus? Oder steht da bei Dir, wie FindBy genau funktioniert? Poste mal bitte n Screenshot.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Such-Antwort:

    Daraus wähle ich die Dataset-Methode, drücke dann Alt-links, dann Alt-Rechts und bin bei derselben Methode, nun aber im Gesamtzusammenhang des Datasets

    Code wird nicht ausgespuckt - ich wüsste auch nichts anzufangen mit den Innereien dieser Methode.
    Ansonsten hatte ich auch schon gesagt: Die Methode ist selbsterklärend - ich hätte da keine weitere Frage zu ihrer Funktion.
    Erstens weiß ich immer noch nicht, ob/wie die FindByID-Funktionen in neuen tDS-Projekten erzeugt werden und zweitens ging es ja um die Frage: Was passiert, wenn man eine ID reinwirft, die nicht vergeben ist. Meine Antwort: ausprobieren oder in den Methodencode schauen. Der Objektbrowser liefert nämlich darauf keine Antwort.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ja, du hast recht: Aussprobiern oder in den Code gucken.
    Entweder wie von dir beschrieben, oder per Doppelclick im OB.
    Führt auf folgendes:

    VB.NET-Quellcode

    1. <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
    2. Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")> _
    3. Public Function FindByID(ByVal ID As Integer) As AuftragsdetailRow
    4. Return CType(Me.Rows.Find(New Object() {ID}),AuftragsdetailRow)
    5. End Function
    Also eine Umleitung des Aufrufes in seine untypisierte Entsprechung.
    Auch die findet sich im ObjectBrowser:

    Und da ist nu auch die Antwort auf deine Frage dokumentiert.

    (Dassis übrigens ein allgemeiner Pattern, dass Find-Methoden bei Nicht-Finden Nothing returnen)