Fehler beim Hinzufügen eines weiteren Eintragen in einem Personalisiertem DataSet

  • VB.NET
  • .NET (FX) 4.0

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

    Fehler beim Hinzufügen eines weiteren Eintragen in einem Personalisiertem DataSet

    Guten Morgen,

    Ich Bekomme folgende Fehlermeldung wenn ich einen Weiteren Eintrag in mein DataSet hinzufügen Möchte.

    Spoiler anzeigen
    Ein Ausnahmefehler des Typs "System.Data.ConstraintException" ist in System.Data.dll aufgetreten.

    Zusätzliche Informationen: Die Spalte 'Revier 1' hat die Einschränkung, dass sie eindeutig sein muss. Der Wert '1' ist bereits vorhanden.


    Der Dazugehörige Source wäre der:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim newCustomersRow As DataSet2.MitarbeiterRow
    3. newCustomersRow = DataSet2.Mitarbeiter.NewMitarbeiterRow()
    4. #Region "Text Boxen"
    5. 'Vorname
    6. If VornameTextBox1.Text = "" Then
    7. MessageBox.Show("Bitte geben Sie einen Vornamen ein.")
    8. Else
    9. newCustomersRow.Vorname = VornameTextBox1.Text
    10. End If
    11. 'Nachname
    12. If NachnameTextBox1.Text = "" Then
    13. MessageBox.Show("Bitte geben Sie einen Nachnamen ein.")
    14. Else
    15. newCustomersRow.Nachname = NachnameTextBox1.Text
    16. End If
    17. 'Personalnummer
    18. If PersonalnummerTextBox1.Text = "" Then
    19. MessageBox.Show("Bitte geben Sie eine Personalnummer an.")
    20. Else
    21. newCustomersRow.Personalnummer = PersonalnummerTextBox1.Text
    22. End If
    23. 'Geburtstag
    24. If GeburtstagTextBox1.Text = "" Then
    25. MessageBox.Show("Bitte geben Sie Geburtstag an.")
    26. Else
    27. newCustomersRow.Geburtstag = GeburtstagTextBox1.Text
    28. End If
    29. 'Telefon Nummer
    30. If TelefonnummerTextBox1.Text = "" Then
    31. MessageBox.Show("Bitte geben Sie eine Telefonnummer ein.")
    32. Else
    33. newCustomersRow.Telefonnummer = TelefonnummerTextBox1.Text
    34. End If
    35. 'Straße
    36. If StraßeTextBox1.Text = "" Then
    37. MessageBox.Show("Bitte geben Sie die Straße an.")
    38. Else
    39. newCustomersRow.Straße = StraßeTextBox1.Text
    40. End If
    41. 'Postleitzahl
    42. If PostleitzahlTextBox1.Text = "" Then
    43. MessageBox.Show("Bitte geben Sie die Postleitzahl ein.")
    44. Else
    45. newCustomersRow.Postleitzahl = PostleitzahlTextBox1.Text
    46. End If
    47. 'Wohnort
    48. If WohnortTextBox1.Text = "" Then
    49. MessageBox.Show("Bitte geben Sie den Wohnort ein.")
    50. Else
    51. newCustomersRow.Wohnort = WohnortTextBox1.Text
    52. End If
    53. 'Maximale Arbeitstage im Monat
    54. If Max_Arbeitstage_im_MonatTextBox1.Text = "" Then
    55. MessageBox.Show("Bitte geben Sie die Maximalen Arbeitstage im Monat ein.")
    56. Else
    57. newCustomersRow.Max_Arbeitstage_im_Monat = Max_Arbeitstage_im_MonatTextBox1.Text
    58. End If
    59. #End Region
    60. #Region "Checkboxen"
    61. 'revier 1
    62. If CheckBox1.Checked = False Then
    63. newCustomersRow.Revier_1 = "0"
    64. Else
    65. newCustomersRow.Revier_1 = "1"
    66. End If
    67. 'Revier 2
    68. If CheckBox2.Checked = False Then
    69. newCustomersRow.Revier_2 = "0"
    70. Else
    71. newCustomersRow.Revier_2 = "1"
    72. End If
    73. 'Revier 3
    74. If CheckBox3.Checked = False Then
    75. newCustomersRow.Revier_3 = "0"
    76. Else
    77. newCustomersRow.Revier_3 = "1"
    78. End If
    79. 'Revier 4
    80. If CheckBox4.Checked = False Then
    81. newCustomersRow.Revier_4 = "0"
    82. Else
    83. newCustomersRow.Revier_4 = "1"
    84. End If
    85. 'Alarm Verfolger
    86. If CheckBox5.Checked = False Then
    87. newCustomersRow.Alarm_Verfolger = "0"
    88. Else
    89. newCustomersRow.Alarm_Verfolger = "1"
    90. End If
    91. 'Tag Revier Frühschicht
    92. If CheckBox6.Checked = False Then
    93. newCustomersRow.Tag_Revier_Früh = "0"
    94. Else
    95. newCustomersRow.Tag_Revier_Früh = "1"
    96. End If
    97. 'Tag Revier Spätschicht
    98. If CheckBox7.Checked = False Then
    99. newCustomersRow.Tag_Revier_Spät = "0"
    100. Else
    101. newCustomersRow.Tag_Revier_Spät = "1"
    102. End If
    103. 'Alarmzentrale Hauptplatz
    104. If CheckBox8.Checked = False Then
    105. newCustomersRow.AZ_Hauptplatz = "0"
    106. Else
    107. newCustomersRow.AZ_Hauptplatz = "1"
    108. End If
    109. 'Alarmzentrale Zweitplatz
    110. If CheckBox9.Checked = False Then
    111. newCustomersRow.AZ_Zweitplatz = "0"
    112. Else
    113. newCustomersRow.AZ_Zweitplatz = "1"
    114. End If
    115. 'Alarmzentrale Drittplatz
    116. If CheckBox10.Checked = False Then
    117. newCustomersRow.AZ_Drittplatz = "0"
    118. Else
    119. newCustomersRow.AZ_Drittplatz = "1"
    120. End If
    121. #End Region
    122. DataSet2.Mitarbeiter.Rows.Add(newCustomersRow)
    123. End Sub



    Wo könnte der Fehler Liegen ? bin so ein Wenig Ratlos :(

    Ich würde mich auch Freuen über einen Ratschlag, wie ich den Code ein wenig Stimmiger gestalten könnte. sind ja schon ne menge If abfragen ...


    Ich Danke schon einmal im Vorfeld für Anregungen und Hilfestellungen :)

    Grüße
    Sonaca

    Sonaca schrieb:

    Der Wert '1' ist bereits vorhanden.
    Das solltest Du mal aufklären.
    Ist die Spalte, die das betrifft, eine Primary-Key-Spalte?
    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!
    Ich versuche es mal zu erklären, ich hoffe ich bekomme das hin.

    Datatable:--- Mitarbeiter ---------------------Revier
    Spalte: -------Revier 1 -----Relation zu -----Revier 1
    ----------------Revier 2 -----Relation zu -----Revier 2

    usw.

    der wert in den Jeweiligen Spalten ist entweder 0 oder 1,


    zweck des ganzen:

    In Mitarbeiter sollen Personaldaten gespeichert werden, die im späteren verlauf weiter verwendet werden ...
    wie es zb. mit dem Datatable Revier Geschieht,

    Ich habe ein Datagridview in einer weiteren Form erstellt Basierend auf Datatable Revier, und die Spalten mit comboboxen bestückt,
    ist der wert bei Mitarbeiter in der spalte Revier 1 "0" so soll der Name in der Combobox nicht auftauchen, ist der wert "1" so soll er Angezeigt werden

    Das ist der zweck des Ganzen...



    ich habe keine Ahnung wie ich des sonst erklären soll

    Liebe Grüße

    Sonaca schrieb:

    ist der wert "1"
    ein String, der als Boolean missbraucht wird?
    Poste mal nen Screenshot Deiner Relationen.
    Erweiterte Bearbeitung -> Dateianhänge -> Hochladen
    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!
    @Sonaca Mitarbeiter hat mir etwas zu viele Primary Keys. :/
    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!
    @RodFromGermany Die angezeigten Schlüssel entstehen immer dann, wenn ich eine Relation erstelle, aber keiner davon ist als Primary Schlüssel angegeben :-/ der Einzige Primary-Key ist ID ... :/

    Falls es Weiterhilft, die Meldung kommt bei egal welcher art von Eintägen, also auch bei ja oder Nein ...

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

    Wie's aussieht ist das Datenmodell rundüberholungs-bedürftig.

    Allerdings siehts auch so aus, als sei dir das relationale Prinzip nicht klar. Ich ahne jdfs. dass "WunschFrei" iwie modellieren soll, dass Mitarbeiter bestimmte Tage im Monat gerne frei hätten - aber wenns das ist, dann ist das sehr falsch modelliert - und warum hat ein WunschFrei-Datensatz auch einen Namen?
    Die Namen der einen WunschFrei wünschenden Mitarbeiter werden auf andere Weise zum Auftauchen gebracht.

    Ein sinnvolles Modell des Wünschens wäre:
    Mitarbeiter => FreiWunsch

    Somit könnte einem Mitarbeiter mehrere FreiWünsche zugeordnet werden.
    Dabei wird mittels Fremdschlüssel auf den Mitarbeiter verwiesen, und deshalb wird grad nicht ein Name im FreiWunsch eingetragen. Denn den Namen des wünschenden Mitarbeiters kann man ja jederzeit über die Relation abrufen.

    Versuch mal Die relationale Grundidee zu verstehen, oder
    codeproject.com/Articles/10309…l-Datamodel-for-Beginners
    Letzteres ist auf englisch, hat aber den Vorteil, dass es in darauf aufbauenden Artikeln weiter-entwickelt wird bis zu einer nicht ganz uninteressanten Beispiel-Anwendung.
    Danke @ErfinderDesRades werde mir das mal Anschauen :D

    hättest du vll. auch noch eine Lösung für mich, wie ich die 20+ If Abfragen daoben Eleganter gelöst bekomme ? :/


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

    mit Databinding

    brauchst du dir noch keine Gedanken drüber zu machen, solange dein Datenmodel nicht funktioniert.

    Das wird übrigens auch im gegebenen englischen Tut entwickelt - datengebundener Eingabe-Dialog.

    Auf deutsch etwas ähnliches kannste hier angugge - sogar mit Videos: vier Views-Videos
    Das baut aber nicht so systematisch auf, sondern setzt richtiges Daten-modellieren einfach voraus.


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

    Gibt es eine Möglichkeit dir einmal alles zu Zeigen ?

    Habe Irgendwie das Gefühl als würde ich es nicht schaffen das so zu erklären wie es am ende sein soll :-/


    Anhang:

    Habe die Relationen erstmal alle entfernt, nun kann ich auch mehrer Einträge in Mitarbeiter einfügen =)

    Hat nur ein Schönheitsfehler irgendwie ...

    Der erste Eintrag ändert sich immer mit ...

    also ID -1 ändert sich immer in die Daten die erneut eingefügt werden ... erst ab ID -2 gibt es Fortlaufende Einträge :-/
    ich werde mit dem Gezeigten nicht viel anfangen können, wenn du es nicht erklären kannst.
    Auch kann man glaub nix programmieren, was man nicht erklären kann - das mag mit ein Grund sein, warum ich so oft so nervtötend nachfrage.
    Weil oft nimmt der Plan, den man hat, überhaupt erst letztlich Gestalt an, wenn man ihn versucht zu erklären.

    Sonaca schrieb:

    Der erste Eintrag ändert sich immer mit ...
    Das ist Absicht, PrimaryKeys sollen sich so verhalten.

    Ich verweise nochmal auf die gegebenen Tuts, denn wenn du die relationale GrundIdee nicht wirklich verstehst, dann kannst du kein relationales Datenmodell erstellen.
    Und ohne Datenmodell kein Databinding und auch sonst keine Aussicht auf irgendeine Lösung.
    Alles klärchen, giebt es eine Möglichkeit den primary key in der listbox auszublenden, bzw den Eintrag mit der ID "0", damit keine Verwirrungen entstehen ?

    Werde mir zudem die Videos nach Feierabend nochmal zusammen mit dem Frühstück schmecken lassen, sowie eine hoffentlich verständliche Erklärung verfassen :)

    Bis dahin dir erstmal noch eine hoffentlich entspannte Nacht :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sonaca“ ()

    jo - natürlich werden IDs dem User nicht angezeigt. Weder Primary- noch Foreign-Keys sollte der User jemals ühaupt zu Gesicht bekommen. Meist werden auch weitere Spalten ausgeblendet.

    Verwunderlich, dass du von Listbox sprichst, denn eine Listbox kann ja nur eine Spalte anzeigen - die wird als "Displaymember" festgelegt. Und wie gesagt: die ID-Spalte wird kaum jemals als Displaymember hergenommen.
    Noch mal von Vorne *lach*

    Ich Hinterlege im DataSet: Mitarbeiter Personaldaten und Tätigkeiten zu die Sie Später Eingeteilt werden können.

    Also Vorname, Nachname, Personalnummer über Textboxen und über CheckBoxen ob Folgende Tätigkeit Bekannt ist.

    In der ListBox Lasse ich die Nachnamen Anzeigen. So kann man im Späteren verlauf nochmals Daten gezielt ändern.

    Nun zu dem was ich wissen wollte:

    Gibt es eine Möglichkeit, den ersten Eintrag im Dataset Sprich ID 0 aus der Listbox ausblenden kann,
    so das erst ab ID 1 der Nachname in der ListBox auftaucht , da sich der Erste eintrag beim hinzufügen von neuen Daten immer mitändert.

    2 Bilder zum Veranshaulichen:

    Bild 1: So wird das Programm zzt. gestartet
    Bild 2: So schaut es dann aus wenn ich einen Eintrag mit hinzufüge
    Bilder
    • 1.jpg

      97,19 kB, 1.339×672, 128 mal angesehen
    • 2.jpg

      113,78 kB, 1.339×672, 100 mal angesehen