Ich habe mich jetzt längere Zeit um das Speichern der aktuellen DataTables bemüht. Dabei hat die kompakte Methode von KSE (Me.TableAdapterManager.UpdateAll(Me.Dataset)) Fehler gebracht. Zum Fehler kam es auch beim Speichern nach der schrittweise Methode, die der ErfinderDesRades empfohlen hat und die ich noch mit einem MS-Beispiel abgeglichen habe:
Eine extra programmierte Prüffunktion der Relationen bei allen Sätzen brachte auch keine Erklärung. Auch die Beschränkung der Tests auf nur einen Kopfsatz führte zum Fehler. Damit sich das nachvollziehen lässt, ist hier die Oberfläche mit dem Kommentar:
Zum besseren Verständnis noch die Designerdarstellung:
und die Beschreibung der kritischen Relation:
Manchmal ist es nur eine Kleinigkeit!
Quellcode
- Private Sub SaveDS()
- Dim deletedChildRecords As FVDataSet.VerknüpfungDataTable = _
- CType(FVDataSet.Verknüpfung.GetChanges(Data.DataRowState.Deleted), FVDataSet.VerknüpfungDataTable)
- Dim newChildRecords As FVDataSet.VerknüpfungDataTable = _
- CType(FVDataSet.Verknüpfung.GetChanges(Data.DataRowState.Added), FVDataSet.VerknüpfungDataTable)
- Dim modifiedChildRecords As FVDataSet.VerknüpfungDataTable = _
- CType(FVDataSet.Verknüpfung.GetChanges(Data.DataRowState.Modified), FVDataSet.VerknüpfungDataTable)
- Try
- 'Update gelöschter Sätze in untergeordeten Tabellen
- If deletedChildRecords IsNot Nothing Then VerknüpfungTableAdapter.Update(deletedChildRecords)
- 'Update übergeordneter Tabellen
- FotoverzeichnisTableAdapter.Update(FVDataSet.Fotoverzeichnis)
- SchlüssellisteTableAdapter.Update(FVDataSet.Schlüsselliste)
- 'Update neuer und geänderter Sätze in untergeordneten Tabellen
- If newChildRecords IsNot Nothing Then VerknüpfungTableAdapter.Update(newChildRecords)
- ' => Fehler:
- 'Der Datensatz kann nicht hinzugefügt oder geändert werden,
- 'da ein Datensatz in der Tabelle 'Fotoverzeichnis' mit diesem Datensatz in Beziehung stehen muss.
- If modifiedChildRecords IsNot Nothing Then VerknüpfungTableAdapter.Update(modifiedChildRecords)
- 'Änderungsstatus löschen
- FVDataSet.AcceptChanges()
- Catch err As Exception
- MessageBox.Show("Fehler beim Update der Datenbank")
- Finally
- If deletedChildRecords IsNot Nothing Then deletedChildRecords.Dispose()
- If newChildRecords IsNot Nothing Then newChildRecords.Dispose()
- If modifiedChildRecords IsNot Nothing Then modifiedChildRecords.Dispose()
- End Try
- End Sub
Eine extra programmierte Prüffunktion der Relationen bei allen Sätzen brachte auch keine Erklärung. Auch die Beschränkung der Tests auf nur einen Kopfsatz führte zum Fehler. Damit sich das nachvollziehen lässt, ist hier die Oberfläche mit dem Kommentar:
Zum besseren Verständnis noch die Designerdarstellung:
und die Beschreibung der kritischen Relation:
Manchmal ist es nur eine Kleinigkeit!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „drschef“ ()