Problem mit der Update-Methode eines TableAdapters



  • Stell doch mal ein Beispielprojekt mit Datenbank ins Netz. So ist es doch einfach nur ein paar Krümel hinwerfen und auf ne Lösung hoffen.



  • Das ist eine gute Idee; ich dachte eben das Problem sei vielleicht bekannt. Habe noch eines bei dieser Gelegenheit; wie ich jeweils die zusammengehörigen Daten der beiden Tabellen laden kann (und nicht die ganze) habe ich hinbekommen, doch beim Löschen gibt es - wie man sich denken kann - das Problem dass zuerst alle Einträge der Tracks-Tabelle gelöscht werden müssen. Das ist noch was an dem ich herumhirnte!

    Das Projekt findet sich hier (inkl Datenbankdateien):

    http://rebenstudio-it.ch/CDArchiv.zip

    Ach ja; ist es normal dass ALTER INDEX ... REORGANIZE bei ExecuteNonQuery -1 zurück gibt; oder liegt das an den wenigen Daten dass es da nichts zu reorganisieren gibt?



  • Ich habe mal das Projekt runtergeladen ausgeführt und mit dem Debugger reingeschaut. Die Update-Methode fehlt tatsächlich in Deiner TracksTable. In der anderen Table sind die Befehle vorhanden. Ich würde die TracksTable im Designer neu einbinden oder zu der bestehenden die Update-Anweisung mit dem QueryBuilder nachtragen.



  • Es reicht wenn man im Designer die Updatemethode anlegt. Tabelle auswählen, Felder auswählen und fertig 🤡



  • So einfach geht das doch auch nicht? Der Update-Befehl der anderen Tabelle ist ja reichlich lang; so etwas habe ich nicht hinbekommen.



  • So, ich habe nun nochmal in das Projekt geschaut. Der Designer baut das nicht automatisch weil du einen zusammengesetzten Primkey in deiner tracks-Tabelle verwendest, über Nummer = id der cd und Lied = Name des Tracks. Ich würde vorschlagen dass du auch mit Surrogatschlüsseln in der tracks-Tabelle arbeitest, damit der Designer dir hilft:

    * Nummer - ist Fremdschlüssel zu cd.tab und nicht mehr Primkey
    * Lied - ist Name des Songs und ebenfalls nicht mehr primkey
    * Länge - bleibt
    * Nr_ - ist Position des Tracks auf der cd
    * idtrack - ist neuer Primkey, du müsstest diese am besten als Identity-Spalte umsetzen.

    dann fügt der Designer auch den update-Befehl ein. Du müsstest die idtrack erst auf Typ int setzen, manuell befüllen (ab 1 einfach durchnummerieren, bei den paar Zeilen einfach zu machen) und dann not null, primary key, identity.
    Wenn Du willst noch ein unique auf (Nummer,Nr_)
    Von der Modellierung her ist es keine 3NF mehr weil beispielsweise Lied jetzt von Nr_ und von idtrack abh. ist. Dafür hast du designer Support. Mußt du wissen.



  • Super, das habe ich mal versucht; danke. Nun kommt aber eine "Parallelitätsverletzung: der Update-Command hat sich auf 0 der 1 Datensätze ausgewirkt". Wahrscheinlich habe ich etwas falsch gemacht; aber idtrack ist jetzt Primary Key ohne Beziehung, und Nummer - Nummer die Beziehung zwischen den Tabellen.

    Beim Löschen habe ich noch ein Problem, weiss nicht ob das auch damit zusammen hängt:

    Die DELETE-Anweisung steht in Konflikt mit der REFERENCE-Einschränkung "FK_TracksTable_CDsTable". Der Konflikt trat in der "C:\DOKUMENTE UND EINSTELLUNGEN\OBRECHT ANDREAS\EIGENE DATEIEN\CDSDB.MDF"-Datenbank, Tabelle "dbo.TracksTable", column 'Nummer' auf.
    Die Anweisung wurde beendet.
    




  • Ich habe natürlich die Einträge der Tracks-Liste zuerst gelöscht (einen eigenen Löschen-Button über die BindingSource); aber ob der Aufruf des TableAdapter eine Rolle spielt, die Reihenfolge? Wie wird das i.A. gehandhabt dass die abhängigen Einträge mitgelöscht werden und keine solchen Fehler entstehen?



  • Ich bin nun weiter, nach langer Zeit: Einfügen, ändern und alles funktioniert soweit sofern alle Datensätze ins DataSet geladen werden. Nun habe ich ein paar gespeicherte Prozeduren in der Datenbank welche nach Suchkriterien oder die ersten 10 Einträge zurückgeben (FillByInterpret usw), da es ja nicht ganz der Sinn ist die ganze Datenbank zu laden (wenn sie sehr gross wird).
    Wenn man allerdings nur diese ausgesuchten Teile lädt und dann beginnt zu editieren oder neue Datensätze einzugeben gibt es ein Problem mit der Nummern-Spalte. Was kann ich dadenn nun tun?
    Das Projekt ist aktualisiert unter http://rebenstudio-it.ch/CDArchiv.zip zu finden (zum testen Speicherort der Datenbank korrekt angeben).

    Vielen Dank!


Anmelden zum Antworten