Positionsnummer um eins erhöhen

  • VB.NET

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

    Positionsnummer um eins erhöhen

    Hallo Zusammen,

    ich habe mir eine SQL-Datenbank angelegt und im VB eine Dataset erzeugt. Die Datenbank enthält unter anderem eine Tabelle Rechnungen und eine Tabelle Rechnungspositionen. Ich habe mir aus den Datenquellen als Textboxen die Tabelle Rechnungein in eine Form gezogen, daraufhin wurde ein funktionierender Bindingnavigator erzeugt. Außerdem habe ich mir die Rechnungspositionen als Datagridview aus den Datenquellen auf die Form gezogen und einen manuellen Bindingnavigator für die Rechnungspositionen erstellt. Jetzt möchte ich gerne, wenn ich beim Navigotr bei den Rechnungspositionen auf Neu klicke, dass die Positionsnummer immer bei 1 beginnt und wenn ich mit Neu eine weitere Position einfügen möchte sich automatisch um 1 erhöht.

    Ich habe mal folgendes versucht, jedoch ohne Erfolg:

    VB.NET-Quellcode

    1. NummerTextbox.text = nummertextbox.text +1




    Hat jemand eine Ahnung?
    Option Strict On.

    VB.NET-Quellcode

    1. Private MyNumber As Integer = 0
    2. Private Sub xxx()
    3. MyNumber += 1
    4. NummerTextbox.text = MyNumber.ToString
    5. End Sub
    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!
    Das mit dem Autoincrement habe ich bereits versucht gehabt. Er zählt zwar bei der Positionsnummer immer +1 eins, jedoch fängt er bei einer neuen Rechnung nicht bei 1 an. Hatte die erste Rechnung z.B. 4 Positionen und jetzt erstellt man eine zweite Rechnung, dann sollte hier eigentlich wieder mit Position eins begonnen werden. Er beginnt aber leider dann mit Position 5.
    Grad das AutoIncrement-Problem ist in DBExtensions nicht gut gelöst.

    Zunächst mal, @TE: AI ist nicht deine Sache, dich drum zu kümmern, sondern das stellt man sowohl im Dataset als auch inne DB an der ID-Spalte ein, und hat im weiteren keinen Einfluß darauf, welche ID genau generiert wird. Tatsächlich werden auf oder absteigende Zahlenfolgen generiert, aber wenn IDs verfallen, weil ein Datensatz gelöscht wurde, so wird die entstehende Lücke nicht geschlossen - aber nicht dein Problem.

    Also das AI-Problem ist, dass beide - DB und Dataset AI-Werte generieren. Das Dataset generiert üblicherweise negative Werte, die DB positive. Das letzte Wort dabei hat die DB, also der vom Dataset generierte Wert ist immer nur vorläufig. Dieses muß so sein, weil 2 verschiedene Datasetse könnten u.U. unabhängig voneinander denselben AI-Wert als ID für einen Datensatz generieren, und das gäbe dann inne DB einen Verstoß gegen die Eindeutigkeits-Bedingung für Schlüsselspalten.
    Also, beim Abspeichern eines neuen Datensatzes ("INSERT") ignoriert die DB den Dataset-AI-Wert, und setzt ihren eigenen ein. Nun - und dassis umständlich - muß sofort nachm Abspeichern diese endgültige ID wieder abgefragt werden, um sie wiederum ins Dataset einzupflegen.
    Diese "Feedback-Requery" wird je nach DB-System unterschiedlich gelöst - in Access muß wirklich ein Extra-Select abgefahren werden - gugge Autowerte inserten.

    Eine allgemeine Lösung des AI-Problems für alle möglichen DBs ist in DBExtensions mit eingearbeitet.