Dataset->Db und das Hinzufügen von Datensätzen

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

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von 100Volt.

    Dataset->Db und das Hinzufügen von Datensätzen

    Hallo,

    mein heutiges Problem ist folgendes:

    Ich möchte mehrere Datensätze zu einer Tabelle CoronaEreignisse hinzufügen.

    Diese hat vier Spalten, mämlich:
    ID (Int32 autoincrement-Primärschlüsselspalte)
    Aktiv (Boolean)
    Bezeichnung_kurz (String)
    Bezeichnung_lang (String)


    Wenn ich es richtig verstanden habe (Thread von neulich) soll ich das nicht so tun:

    VB.NET-Quellcode

    1. 'das Ganze in einer Schleife, um mehrere Datensätze hinzufügen. Die Schleife habe ich mir jetzt hier mal gespart,
    2. 'da es nur um die Darstellung der Art und Weise des Hinzufügens geht.
    3. Dim row = Dts.CoronaEreignisse.NewCoronaEreignisseRow
    4. row.ID = 100000
    5. row.Aktiv = True
    6. row.Bezeichnung_kurz = "<KEINE ANGABE>"
    7. row.Bezeichnung_lang = "<KEINE ANGABE>"
    8. Dts.CoronaEreignisse.AddCoronaEreignisseRow(row)


    sondern so:

    VB.NET-Quellcode

    1. Dts.CoronaEreignisse.AddCoronaEreignisseRow(False, "<KEINE ANGABE>", "<KEINE ANGABE>")
    2. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "Impfnachweis", "Impfnachweis vorgezeigt")
    3. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "Test", "Schnelltest vorgezeigt")
    4. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "PCR", "PCR-Testergebnis vorgezeigt")


    Das Problem bei dieser Variante ist, daß ich für meine Autoincrement-Primärschlüsselspalte ID keinen Wert angeben kann. Solange ich einen hohen Wert angebe (s. Variante 1), wird beim Schreiben in die Datenbank einfach der nächste freie Wert genommen. Gebe ich einen Wert an, den es schon gibt, kracht´s. Genau das passiert hier. Der erste Datensatz wird in die Tabelle (der DB) geschrieben, beim zweiten kommt der Fehler (ID gibt´s schon):
    System.Data.ConstraintException: "Die Spalte 'ID' hat die Einschränkung, dass sie eindeutig sein muss. Der Wert '1' ist bereits vorhanden."




    Wo ist der Fehler? muß ich nach jeder hinzugefügten Row Dts.SaveDts aufrufen? In der Variante 1 brauche ich das nicht.
    --------
    Lieber inkompetent als inkontinent

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

    100Volt schrieb:

    Das Problem bei dieser Variante ist, daß ich für meine Autoincrement-Primärschlüsselspalte ID keinen Wert angeben kann.
    Wieso ist das ein Problem? Sei doch froh, darob!
    Ein Argument mehr für Variante 2.



    Hast du eiglich nochmal in codeproject.com/Articles/10309…l-Datamodel-for-Beginners und Folgeartikel gelesen?
    Da wird ja auch drauf eingegangen, warums eine schlechte Idee ist, Tabellen plural zu benamen. So hast du nun hinbekommen, dass mehr Code lügt als nötig:
    AddCoronaEreignisseRow() sagt vom Wort aus, dass CoronaEreignisse geadded werden.
    Das ist aber nicht der Fall, sondern es wird nur ein CoronaEreigniss geadded.


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

    Die meinst, ob ich diese Funktion angeguckt habe?:

    VB.NET-Quellcode

    1. Public Overloads Function AddCoronaEreignisseRow(ByVal Aktiv As Boolean, ByVal Bezeichnung_kurz As String, ByVal Bezeichnung_lang As String) As CoronaEreignisseRow
    2. Dim rowCoronaEreignisseRow As CoronaEreignisseRow = CType(Me.NewRow,CoronaEreignisseRow)
    3. Dim columnValuesArray() As Object = New Object() {Nothing, Aktiv, Bezeichnung_kurz, Bezeichnung_lang}
    4. rowCoronaEreignisseRow.ItemArray = columnValuesArray
    5. Me.Rows.Add(rowCoronaEreignisseRow)
    6. Return rowCoronaEreignisseRow
    7. End Function


    ..und diese?:

    VB.NET-Quellcode

    1. Public Overloads Sub AddCoronaEreignisseRow(ByVal row As CoronaEreignisseRow)
    2. Me.Rows.Add(row)
    3. End Sub


    Das sieht für mich so aus, als wenn ich es so machen muß, wie ich es nicht machen sollte (Variante 1).
    --------
    Lieber inkompetent als inkontinent
    Auf die Funktionalität hätte nur das Gendersterchen im Tabellennamen Einfluß, oder? ;)

    Wichtig ist doch, daß man sich die Namen leicht merken kann. Ich versuche mich aber künftig dem Mainstream anzupassen...

    ..aber was mache ich bzgl. des echten Problems?
    --------
    Lieber inkompetent als inkontinent

    100Volt schrieb:

    ..aber was mache ich bzgl. des echten Problems?

    hast du einfach mal probiert, deine 4 Rows hinzuzufügen und dann zu speichern und hast geguckt was passiert?

    Scheinbar nicht...
    Alle 4 Rows bekommen ihre entspr. ID automatisch und das soll auch so sein, von der Datenbank zugewiesen und zurück in's DataSet gespielt.
    Da brauchst du nicht nach jeder addrow ein save zu machen.

    Es würde tatsächlich vermutlich sogar ausreichen nach der Funktion zu saven oder gar erst in einer anderen Stelle der Anwendung. Denn die 4 Rows behalten ihren Added-Status, bis sie in der DB persistiert wurden.

    Nachtrag: Und weil es so gewollt ist und die ID ein AutoIncrement ist, wird die Option bei einer AddRow auch garnicht erst angeboten.
    Aber ich schmunzel jetzt schon, du bekommst noch ganz andere Probleme, wenn du eine AddRow mit Fremdschlüsseln hinzufügen willst - das gibt dann den nächsten Thread vermutlich :thumbsup:
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    "OffMainProblem"
    Also ich wurde gestern auch auf:

    ErfinderDesRades schrieb:

    Hast du eiglich nochmal in codeproject.com/Articles/10309…l-Datamodel-for-Beginners und Folgeartikel gelesen?

    hingewiesen.
    Im Ernst, wenn dus gelesen hast, tus dir nochmal rein.
    Dort steht u.a. warum eben die Verwendung von Schlüssel IDs unnötig (und häufig schlecht) ist. Ich ertappe mich auch oft dabei, dass ich z.B. auf eine Parent, oder Childrow per Schlüssel verweise.
    Das tut aber nicht not.
    Außerdem zum Post vom @ErfinderDesRades

    ErfinderDesRades schrieb:

    Da wird ja auch drauf eingegangen, warums eine schlechte Idee ist, Tabellen plural zu benamen.

    Die Table sollte nicht CoronaEREIGNISSE, sondern CoronaEreignis heißen. Jedes mal wenn du auf eine Row in dieser Table zugreifst, impliziert dein Code es seien CoronaEREGNISSE (Plural), aber es ist immer genau EINS (CoronaEreignis).
    ​Dts.CoronaEreignisse.AddCoronaEreignisseRow du addest keine Ereignisse. Du addest ein Ereignis.

    __________________

    Zum Mainthema Ich glaube der TE hat ein Problem mit dem hinzufügen der Rows mit Variante 2:

    100Volt schrieb:

    Das Problem bei dieser Variante ist, daß ich für meine Autoincrement-Primärschlüsselspalte ID keinen Wert angeben kann. Solange ich einen hohen Wert angebe (s. Variante 1), wird beim Schreiben in die Datenbank einfach der nächste freie Wert genommen. Gebe ich einen Wert an, den es schon gibt, kracht´s. Genau das passiert hier. Der erste Datensatz wird in die Tabelle (der DB) geschrieben, beim zweiten kommt der Fehler (ID gibt´s schon):
    System.Data.ConstraintException: "Die Spalte 'ID' hat die Einschränkung, dass sie eindeutig sein muss. Der Wert '1' ist bereits vorhanden


    Ich glaube, dass passiert nach dem ausführen der 4 geposteten Codezeilen:

    VB.NET-Quellcode

    1. ​ Dts.CoronaEreignisse.AddCoronaEreignisseRow(False, "<KEINE ANGABE>", "<KEINE ANGABE>")
    2. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "Impfnachweis", "Impfnachweis vorgezeigt")
    3. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "Test", "Schnelltest vorgezeigt")
    4. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "PCR", "PCR-Testergebnis vorgezeigt")

    Wenn das so stimmt was ich sage? Dann liegt dein Problem glaube ich weitaus tiefer.

    DerSmurf schrieb:

    Ich glaube, dass passiert nach dem ausführen der 4 geposteten Codezeilen:

    wenn das NACH dem Ausführen der 4 Zeilen passiert, dann ist irgendwo mächtig was schief gelaufen - denn in den 4 Zeilen wird nirgends die ID manuell angetastet. Das passiert lokal im DataSet automatisch und beim Rückspeichern in die DB werden
    die "echten" ID's vergeben und zurückgemeldet. Sonst bräuchte man ja kein AutoIncrement ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Der Fehler tritt beim Aufruf von Dts.SaveDts auf, nicht beim Hinzufügen der vier Rows (Dts.CoronaEreignisse.AddCoronaEreignisseRow...).

    DBPersistanceBase.vb, die Codezeile ist mit HIER markiert:

    VB.NET-Quellcode

    1. Public Sub Save()
    2. ' process all tables twice, each time in ranked order. First select and update Addeds and Modifieds
    3. ' After that update the whole tables (where only the Deleteds remain change-tracked) - while temporally all ForeignKeys are set to .AcceptRejectRule.Cascade
    4. _Dts.AcceptVirtualChanges()
    5. Using Connection_EnterOpen()
    6. Const AddedsAndModifieds = DataViewRowState.Added Or DataViewRowState.ModifiedCurrent
    7. _RankedTables.ForEach(Sub(tb) GetAdapter(tb).Update(tb.Select("", "", AddedsAndModifieds))) 'HIER
    8. ' set all FKs.AcceptRejectRule.Cascade. This causes DataAdapters to skip rows, which were deleted by delete-cascade
    9. _ForeignKeyStatui.ForEach(Sub(fk) fk.Item1.AcceptRejectRule = AcceptRejectRule.Cascade)
    10. _RankedTables.ForEach(Sub(tb) GetAdapter(tb).Update(tb)) ' update Deleteds
    11. _ForeignKeyStatui.ForEach(Sub(fk) fk.Item1.AcceptRejectRule = fk.Item2) ' restore FKs.AcceptRejectRule
    12. End Using
    13. End Sub



    Wie geschrieben, werde ich die Benennung meiner Tabellen überdenken bzw. überarbeiten. Das kann aber nicht ursächlich für mein Problem sein.
    --------
    Lieber inkompetent als inkontinent
    Ja, sieht aus wie ein Datenbank-Problem.
    .Update ist immer eine sehr langsame Operation.
    Manchmal dauerts auch besonders lange, weil die DB sich danach reorganisiert.
    Manchmal dauerts auch besonders lange, weil mit der Installation was nicht stimmt.

    Eine andere Möglichkeit ist, dass bei dir im Proggi aus iwelchen Gründen viel zuviele Datensätze als geändert markiert sind.
    Probierma so :

    VB.NET-Quellcode

    1. Public Sub Save()
    2. ' process all tables twice, each time in ranked order. First select and update Addeds and Modifieds
    3. ' After that update the whole tables (where only the Deleteds remain change-tracked) - while temporally all ForeignKeys are set to .AcceptRejectRule.Cascade
    4. _Dts.AcceptVirtualChanges()
    5. Using Connection_EnterOpen()
    6. Const AddedsAndModifieds = DataViewRowState.Added Or DataViewRowState.ModifiedCurrent
    7. for each tb in _RankedTables
    8. dim rows=tb.Select("", "", AddedsAndModifieds)rows
    9. debug.WriteLine(rows.Length.Tostring)
    10. GetAdapter(tb).Update(rows) 'HIER gucken, wieviele rows es sindGetAdapter(tb).Update(rows) 'HIER gucken, wieviele rows es sind
    11. next
    12. ' set all FKs.AcceptRejectRule.Cascade. This causes DataAdapters to skip rows, which were deleted by delete-cascade
    13. _ForeignKeyStatui.ForEach(Sub(fk) fk.Item1.AcceptRejectRule = AcceptRejectRule.Cascade)
    14. _RankedTables.ForEach(Sub(tb) GetAdapter(tb).Update(tb)) ' update Deleteds
    15. _ForeignKeyStatui.ForEach(Sub(fk) fk.Item1.AcceptRejectRule = fk.Item2) ' restore FKs.AcceptRejectRule
    16. End Using
    17. End Sub
    Was passiert denn, wenn ich in eine leere DataTable manuell eine Row mit ID "-4" eintrage.
    Dann trage ich drei weitere ein (ohne Angabe der ID).
    Diese erhalten dann die IDs -1 bis -3.
    Erhält der nächste Wert (den ich ohne ID festzulegen einebe), dann automatisch die -5?
    Oder führt das zum Fehler, weil einfach nur die ID erhöht wird und die -4 gibts ja schon?

    DerSmurf schrieb:

    "OffMainProblem"

    Im Ernst, wenn dus gelesen hast, tus dir nochmal rein.
    Dort steht u.a. warum eben die Verwendung von Schlüssel IDs unnötig (und häufig schlecht) ist. Ich ertappe mich auch oft dabei, dass ich z.B. auf eine Parent, oder Childrow per Schlüssel verweise.
    Das tut aber nicht not.


    also ohne ParentID und ChildID ist die Datenhaltung doch murks (meine Meinung)
    und zu Datensätzeanlegen......

    VB.NET-Quellcode

    1. Public Sub AddRatenzahlungen(ByVal nZahlungen As Integer, _
    2. ByVal RechnungsBetrag As Double, _
    3. ByVal RatenDatum As Date, _
    4. ByVal RechnungsNr As Integer)
    5. Dim sDB As String = "D:\TestCheck.mdb"
    6. Dim sCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    7. "Data Source=" & sDB & ";"
    8. Dim Ratenbetraege As Double = FormatNumber(RechnungsBetrag / nZahlungen, 2)
    9. Dim Con As OleDb.OleDbConnection = New OleDb.OleDbConnection(sCon)
    10. 'Con.Open()
    11. 'command: Insert Ratenzahlungen
    12. 'tabellen Felder:
    13. 'ID = Autoincrement
    14. 'RatenNr = Integer
    15. 'Ratenbeträge = Double
    16. 'RatenDatum = Date
    17. 'RechnungsNr = Integer
    18. For iCounter = 1 To nZahlungen Step 1
    19. Dim sql = <sql>
    20. Insert Into tbl_RatenPlan
    21. (RatenNr,Ratenbetraege,RatenDatum,RechnungsNr) Values (?,?,?,?)
    22. </sql>.Value
    23. Dim cmd As New OleDb.OleDbCommand(sql, Con)
    24. cmd.Parameters.AddWithValue("RatenNr", iCounter)
    25. cmd.Parameters.AddWithValue("Ratenbetraege", Ratenbetraege)
    26. cmd.Parameters.AddWithValue("RatenDatum", RatenDatum.AddMonths(iCounter - 1))
    27. cmd.Parameters.AddWithValue("RechnungsNr", RechnungsNr)
    28. 'cmd.ExecuteNonQuery()
    29. Debug.WriteLine(String.Join(",", iCounter, Ratenbetraege, RatenDatum.AddMonths(iCounter - 1), RechnungsNr))
    30. 'angelegt:
    31. '1,216,87,01.08.2021 00:00:00,123
    32. '2,216,87,01.09.2021 00:00:00,123
    33. '3,216,87,01.10.2021 00:00:00,123
    34. '4,216,87,01.11.2021 00:00:00,123
    35. '5,216,87,01.12.2021 00:00:00,123
    36. '6,216,87,01.01.2022 00:00:00,123
    37. '7,216,87,01.02.2022 00:00:00,123
    38. '8,216,87,01.03.2022 00:00:00,123
    39. '9,216,87,01.04.2022 00:00:00,123
    40. '10,216,87,01.05.2022 00:00:00,123
    41. '11,216,87,01.06.2022 00:00:00,123
    42. '12,216,87,01.07.2022 00:00:00,123
    43. '13,216,87,01.08.2022 00:00:00,123
    44. '14,216,87,01.09.2022 00:00:00,123
    45. '15,216,87,01.10.2022 00:00:00,123
    46. Next
    47. Con.Close()
    48. End Sub
    49. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    50. 'AddRatenzahlungen parameters:
    51. '1) wieviele Raten = 15
    52. '2) RechnungsBetrag = 3253.12
    53. '3) erste Rate fällig = 01.08.2021
    54. '4) RechnungsNr(Fremdschlüssel) = 123
    55. AddRatenzahlungen(15, 3253.12, CDate("01.08.2021"), 123)
    56. End Sub


    ohne fremdschlüssel 123 (die RechnungsNr) versuche mal die Buchhaltung zu erzählen wo diese 216,87 vom 01.10.2022 gebucht werden sollen

    Kasi schrieb:

    ohne fremdschlüssel 123 (die RechnungsNr) versuche mal die Buchhaltung zu erzählen wo diese 216,87 vom 01.10.2022 gebucht werden sollen


    beim Typisierten Arbeiten holt man sich die komplette Fremdschlüssel-Row und übergibt die dann auch. Darin ist die ID doch enthalten.
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Ah - dassis missverständlich.
    Dort steht, dass man im Dataset die IDs und Schlüsselspalten nicht dabei braucht, um Daten zu verarbeiten.
    Die Existenz dieser Spalten ist natürlich nachwievor unabdingbar. Aber sie sind nur noch intern erforderlich.
    Zur expliziten Verarbeitung von Datensätzen stehen diese Datensätze selbst zur Verfügung - ist also unsinnig und nachteilhaft, nur mit deren Spaltenwerten zu arbeiten.
    Aufgrund der Nachfragen und Anregungen hier vier Versuche und deren Ergebnisse:

    Zu Beginn jedes Tests ist die Tabelle in der Datenbank leer.

    Test 1

    VB.NET-Quellcode

    1. Friend Function TabelleDefault_CoronaEreignisse() As Integer
    2. For i = 1 To 4
    3. Dim row = Dts.CoronaEreignisse.NewCoronaEreignisseRow
    4. row.ID = 100000 + i
    5. row.Aktiv = True
    6. row.Bezeichnung_kurz = Choose(i, "<KEINE ANGABE>", "Impfnachweis", "Test", "PCR").ToString
    7. row.Bezeichnung_lang = Choose(i, "<KEINE ANGABE>", "Impfnachweis vorgezeigt", "Schnelltest vorgezeigt", "PCR-Testergebnis vorgezeigt").ToString
    8. Dts.CoronaEreignisse.AddCoronaEreignisseRow(row) 'HIER
    9. Next
    10. Return 0
    11. End Function

    Erstellt vier Datensätze in der Tabelle und schreibt sie nach dem Aufruf von Dts.SaveDts auch in die Datenbank


    Test 2

    VB.NET-Quellcode

    1. Friend Function TabelleDefault_CoronaEreignisse() As Integer
    2. Dts.CoronaEreignisse.AddCoronaEreignisseRow(False, "<KEINE ANGABE>", "<KEINE ANGABE>")
    3. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "Impfnachweis", "Impfnachweis vorgezeigt")
    4. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "Test", "Schnelltest vorgezeigt")
    5. Dts.CoronaEreignisse.AddCoronaEreignisseRow(True, "PCR", "PCR-Testergebnis vorgezeigt")
    6. Return 0
    7. End Function

    Erstellt vier Datensätze in der Tabelle und schreibt nur den ersten nach dem Aufruf von Dts.SaveDts in die Datenbank. Es kommt zum Fehler:
    System.Data.ConstraintException: "Die Spalte 'ID' hat die Einschränkung, dass sie eindeutig sein muss. Der Wert '1' ist bereits vorhanden."


    Test 3

    VB.NET-Quellcode

    1. Friend Function TabelleDefault_CoronaEreignisse() As Integer
    2. For i = 1 To 4
    3. Dim row = Dts.CoronaEreignisse.NewCoronaEreignisseRow
    4. row.ID = 100000
    5. row.Aktiv = True
    6. row.Bezeichnung_kurz = Choose(i, "<KEINE ANGABE>", "Impfnachweis", "Test", "PCR").ToString
    7. row.Bezeichnung_lang = Choose(i, "<KEINE ANGABE>",
    8. "Impfnachweis vorgezeigt", "Schnelltest vorgezeigt", "PCR-Testergebnis
    9. vorgezeigt").ToString
    10. Dts.CoronaEreignisse.AddCoronaEreignisseRow(row) 'HIER
    11. Next
    12. Return 0
    13. End Function

    Führt an der mit HIER geklennzeicvhneten Stelle zur Fehlermeldung:
    System.Data.ConstraintException: "Die Spalte 'ID' hat die Einschränkung, dass sie eindeutig sein muss. Der Wert '100000' ist bereits vorhanden."


    Test 4

    VB.NET-Quellcode

    1. Friend Function TabelleDefault_CoronaEreignisse() As Integer
    2. For i = 1 To 4
    3. Dim row = Dts.CoronaEreignisse.NewCoronaEreignisseRow
    4. row.Aktiv = True
    5. row.Bezeichnung_kurz = Choose(i, "<KEINE ANGABE>", "Impfnachweis", "Test", "PCR").ToString
    6. row.Bezeichnung_lang = Choose(i, "<KEINE ANGABE>",
    7. "Impfnachweis vorgezeigt", "Schnelltest vorgezeigt", "PCR-Testergebnis
    8. vorgezeigt").ToString
    9. Dts.CoronaEreignisse.AddCoronaEreignisseRow(row) 'HIER
    10. Next
    11. Return 0
    12. End Function

    Erstellt vier Datensätze in der Tabelle und schreibt sie nach dem Aufruf von Dts.SaveDts auch in die Datenbank


    Weder bei Test 2 noch bei Test 4 wurde eine ID angegeben. Bei Test 4 funktioniert es, bei Test 2 nicht.


    Es wurde nach dem Sinn dieser Tabelle gefragt. Es gibt eine weitere Tabelle CoronaLog, in der die Ergebnisse einer Einlaßkontrolle festgehalten werden. Die Tabelle CoronaEreignisse enthält eine Sammlung aller denkbaren Möglichkeiten des Kontrollergebnisses. Ich schreibe einige Defaulteinträge in die Tabelle, der Anwender kann das bei Bedarf ändern bzw. ergänzen.

    CoronaEreignisse... ja, ich weiß, Plural ist pfui bei Tabellennamen, aber die Tabelle heißt hier im Thread der Übersichtlichkeit wegen weiterhin so.

    --------
    Lieber inkompetent als inkontinent

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

    Test2 lässt mich vermuten, dass du in der DB beim Primärschlüssel versäumt hast, AutoIncrement einzustellen.
    Oder du hast im Dataset an AutoIncrementSeed herumgefummelt - was nicht empfehlenswert ist.

    Kann auch sein, dass die MySqlPersistance noch einen Bug hat mit Primkeys - ist ja eine noch junge Entwicklung.

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

    ErfinderDesRades schrieb:

    Kann auch sein, dass die MySqlPersistance noch einen Bug hat mit Primkeys - ist ja eine noch junge Entwicklung.

    nö, bei mir geht's ja auch einwandfrei. Sieht tatsächlich nach fehlendem AutoIncrement aus, oder @100Volt nutzt was anneres als die MySqlServerPersistance und da läuft was mit der ID-Funktion schief
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: