Autoincrement Werte sind gelentlich doppelt

  • VB.NET

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

    Autoincrement Werte sind gelentlich doppelt

    Hallo Zusammen,

    ich habe ein Dataset und dort unter anderem eine Tabelle Angebote. Diese Tabelle Angebote enthält u.a. eine Spalte Nummer. Bei dieser Spalte verwende ich Autoincrement um die Angebotsnummer immer um 1 zu erhöhen. Leider mussten wir jetzt feststellen, dass es gelegentlich vorkommt, dass Angebotsnummern doppelt vergeben werden.

    Wie kann ich so etwas vermeiden bzw. wo kann hierbei ein Fehler liegen?

    Zur Info, die Daten liegen auf einem SQL-Server und mit dem Programm arbeiten mehrere Leute zur gleichen Zeit. Die ID des Angebots wird immer eindeutig vergeben. Kann es sein, dass Angebotsnummern doppelt vergeben werden mit Autoincrement, wenn 2 Benutzer gleichzeitig ein neues Angebot erstellen?

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

    Die Tabelle Angebote hat unter anderem die Spalte ID, Nummer usw. (siehe Bild laut Anlage). Die Spalte ID hat den Primary Key bereits. Wenn ich jetzt bei Nummer mit der rechten Maustaste drauf und Primary-Key festlegen drücke, dann verschiebt er natürlich den Primärschlüssel von ID zu Nummer. Das glaube ich ist auch nicht so gut. Ich könnte zwar einen zusätzlichen Schlüssel einfügen, das dürfte jedoch in meinem Fall leider auch nicht funktionieren habe ich soeben festgestellt, weil es sein kann, dass es mal ein Änderungsangebot gibt, d.h. es wird das alte Angebot dupliziert und dabei bleibt die Angebotsnummer gleich.
    Bilder
    • Unbenannt.png

      44,21 kB, 1.920×1.160, 116 mal angesehen

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

    Kann es sein, dass 2 Spalten auf Primary Key = True stehen?
    Dann muss nur die Kombination beider verschieden sein, was Deinen Effekt erklären würde.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Auf AdressenID ist der Key nicht gesetzt. Der Key ist nur bei der ID gesetzt wie im Bild zu sehen, sonst nirgends.



    Wieso ich Adressen im Angebot speichere hat folgenden Grund:

    Wenn z.B. vor 2 Jahren ein Angebot an den Kunden X aus Y geschrieben wurde und beim Kunde ändert sich danach was an der Adresse, dann ist es ja so, wenn Das Angebot mit der Kundentabelle verknüpft ist, dass wenn ich jetzt die Adresse ändere und das alte Angebot nochmals öffne, dann hat das alte Angebot auch die aktuelle geänderte Adresse. Das wollten wir vermeiden, so dass die Adresse des Kunden bei alten Angeboten nicht verändert wird, wenn Sie die Kundendaten ändern. Das ist der Grund, wieso wir das so gemacht haben. Gibt es bestimmt auch eine elegantere Lösung, mir ist leider keine bessere eingefallen.
    Ist auf dem SqlServer nicht ebenfalls AutoIncrement für die ID-Spalte aktiviert?

    Edit:
    Na, da hast du ja was komisches gebastelt.
    Doppelungen kommen nun vor, wenn du deine Anwendung mehrmals startest. Weil beim Start beginnt der AutoIncrement-Zähler des Datasets mit 0.
    Bzw. mit dem Maximal-Wert der Datensätze, die seit dem Start geladen wurden. Das muss nicht der Gesamt-höchste Wert inne DB sein.
    Da habe ich wirklich was komisches gebastelt. Aber bis auf die paar doppelten Angebotsnummern funktioniert das Programm überraschenderweise sehr gut und es sind auch bereits mehrere 1000 Angebote gemacht worden.



    Auf dem SQL müsste bei der ID-Spalte AutoIncrement aktiviert sein. (Siehe Bild)

    Ich dachte mir eigentlich, wenn ich ein neues Angebot erstelle und nach dem Erstellen sofort ein Update mache, dass dann dieses Problem nicht auftauchen kann.


    VB.NET-Quellcode

    1. Public Sub NeuesAngebot()
    2. AngebotBindingSource.AddNew()
    3. Me.AngebotBindingSource.EndEdit()
    4. Me.AngebotTableAdapter.Update(Me.AngeboteGranitwerkeDataSet.Angebot)


    Anscheinend habe ich mich da geirrt.
    Bilder
    • Unbenannt.png

      162,74 kB, 1.920×1.160, 130 mal angesehen
    Hast du an der Tabelle einmal versucht etwas Manuell zu verändern?
    Anders kann ich mir dies nicht vorstellen den ich arbeite nun einige Zeit damit und bei meinen DB`s ist dies noch nie passiert.

    Andernfalls würde ich die Relationen einmal überprüfen.
    Könnte mich nicht daran erinnern, was manuell geändert zu haben.

    Die ID mit dem Primary Key des Angebots ist ja auch nie doppelt. Nur die Angebotsnummer ist gelegentlich doppelt (auch bei keinem Änderungsangebot). Die Angebotsnummer hat keinen Primary Key, da ja diese wie bereits erwähnt unter Umständen doppelt vorkommen kann, wenn z.B. ein Änderungsangebot gemacht wird. Wenn ein neues Angebot erstellt wird, so soll die ID (das passt auch) und die Angebotsnummer (passt nicht immer) um 1 erhöht werden.
    Die ID passt, das lassen wir mal so stehen würde ich sagen. Der Angebotsnummer kann ich ja keinen Primary Key zuweisen, weil wenn es ein Änderungsangebot ist, dann gibt es tatsächlich 2 Angebote (mit unterschiedlicher ID, weil es ja 2 Angebote sind, jedoch mit der gleichen Angebotsnummer). Somit kann ich keinen Primary Key der Angebotsnummer zuweisen, wenn ich da auf dem richtigen Dampfer bin.