bin noch ziemlich unerfahren in C# mit Visual Studio 2005.
Bin im Moment dabei ein Lizenzveraltungsprogramm zu erstellen.
Im Hintergrund läuft ein SQL Server, in dem die nötigen Tabellen stehen.
Jede Tabelle hat einen Primärschlüssel, der unveränderbar ist und automatisch hochzählt.
Ich habe über die Datenquellen Ansicht eine Tabelle in eine Windows Form eingefügt.
Es wurde automatisch eine Tabelle und eine Leiste erstellt.
Nun mein Problem:
In der Tabelle steht ein Probedatensatz.
Wenn ich nun einen neuen Datensatz erstellen will, zählt der PS automatisch hoch.
So ist alles ok. Aber wenn ich den Datensatz verlasse (nicht erstellt!) und wieder einen neuen erstellen will, ist der PS wieder eins höher (also statt 2 eine 3) obwohl ich ja keinen mit der 2 erstellt habe. Dies geht immer so weiter.
Bilder dazu im Anhang
Wie bekomme ich es hin, dass er immer wieder beim kleinsten nicht benutzten Wert anfängt?
Gruß
MChief
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von MChief am .
Ruf beim Verlassen ohne zu Speichern für die entsprechende DataRow mal die RejectChanges Methode auf. Wenn das nicht funktioniert, musst du wohl manuell den Start zurücksetzen.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
das verhalten ist eigentlich schon so korrekt. wird ein autoincrement schlüssel von der db abgerufen, steht dieser nie wieder zur verfügung. dabei ist es egal, ob er verwendet wird oder ob der eintrag nicht gespeichert wird. das muss so sein. stell dir mal vor, mehrere benutzer legen gleichzeitig ein datensatz an. würden alle die 2 bekommen, gewinnt am ende der, welcher als erstes speichert. das darf ja nicht sein. ist ne sicherheitsfunktion.
was hier noch nicht richtig läuft, ist das feedback der db. stelle mal in deinem dataset das autoincrement auf negative werte. diese werden dann bei einem speichern in der db (update mittels dbadapter) automatisch richtig vergeben.
habe diesen Code nun nacheinander in RowLeave, RowRemoved und Zurücksetzen_Click(Button) eingesetzt, aber das einzige was sich ändert ist, dass er aus der zweiten Zeile in die Erste springt.
Mache ich etwas falsch?
Gruß
MChief
edit: habe den neuen Post gesehen und werde dies auch mal testen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MChief am .
Du kannst mal gucken, obde mit "Datenbank in 10 Minuten" auf Movie-Tuts klarkommst.
Was Generalissimo sagt, wundert mich - nach meiner Erfahrung geht das Updaten per dbAdapter nur bei client-seitiger Primkey-Generierung problemlos.
Aber werdich nochmal ausprobieren.
Problem ist dank ErfinderDesRades denk ich mal gelöst. Habe mir das Tutorial angeguckt und da wird genau mein Problem behandelt. Muss es noch bei meinem Projekt ausprobieren.
Gebe dann Bescheid, ob das Thema geschlossen werden kann.
NummerColumn ist mein PS
in der SQL Datenbank ist auto_increment ausgeschaltet und im Programm auch. Es sollte damit wieder aktiviert werden, wenn die Daten geladen werden.
Dies ist aber nicht der Fall. Ich bekomme nicht wie vorher eine Zahl vorgegeben, sondern kann sogar selber eine festlegen, was aber nicht Sinn der Sache ist.
Werde noch etwas rumprobieren, aber es ist genau wie im Tutorial, nur es geht nicht...
Gruß
MChief
Edit: Habe gerade mal das fertige Projekt von dem Tutorial ausgeführt und die haben den gleichen Fehler, wie ich die ganze Zeit.... Also hat das nix gebracht. Alles umsonst.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MChief am .
Ok, habe das Problem halbwegs gelöst.
Es wird zwar immernoch hochgezählt, ohne dass ein Datensatz erstellt wurde,
aber es wird richtig in der Datenbank gespeichert!!!!
Habe nun die Nummer Spalte unsichtbar gemacht.
Und nun sieht es für den Anwender aus es würde alles funktionieren.
Also falls keiner noch ein richtige Lösung hat, kann das Thema geschlossen werden.
Äh, das ist die richtige Lösung, jedenfalls eine mögliche, nämlich eine mit clientseitiger Primkey-Generierung.
Natürlich werden die Schlüsselspalten vorm Anwender verborgen, das sind Datenverarbeitungs-Interna, die ihn nix angehen, wo er nur Blödsinn mit machen könnte.
Anforderung an eine Primkey-Generierung ist nicht, dass fortlaufende Nummern erzeugt werden, sondern nur, daß sich die Nummern nicht wiederholen.
Für Multiuser-Datenbanken müsste man dann System.Guid als Datentyp der Schlüsselspalten nehmen, jedenfalls bei clientseitiger Primkey-Generierung.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ErfinderDesRades am .