Fehler beim Löschen des Mitgliedes
java.rmi.RemoteException: delete failed, rollback successful; nested exception is:
org.h2.jdbc.JdbcSQLException: Referentielle Integrität verletzt: FKABRECHNUNG1: PUBLIC.ABRECHNUNG FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID)
Referential integrity constraint violation: FKABRECHNUNG1: PUBLIC.ABRECHNUNG FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID); SQL statement:
delete from MITGLIED where ID = 1760 [23003-117]
at de.willuhn.datasource.db.AbstractDBObject.delete(AbstractDBObject.java:379)
at de.jost_net.JVerein.gui.action.MitgliedDeleteAction.handleAction(MitgliedDeleteAction.java:70)
at de.willuhn.jameica.gui.parts.ContextMenu$1.handleEvent(ContextMenu.java:172)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at de.willuhn.jameica.gui.GUI.loop(GUI.java:685)
at de.willuhn.jameica.gui.GUI.init(GUI.java:219)
at de.willuhn.jameica.system.Application.init(Application.java:140)
at de.willuhn.jameica.system.Application.newInstance(Application.java:85)
at de.willuhn.jameica.Main.main(Main.java:78)
Caused by: org.h2.jdbc.JdbcSQLException: Referentielle Integrität verletzt: FKABRECHNUNG1: PUBLIC.ABRECHNUNG FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID)
Referential integrity constraint violation: FKABRECHNUNG1: PUBLIC.ABRECHNUNG FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID); SQL statement:
delete from MITGLIED where ID = 1760 [23003-117]
at org.h2.message.Message.getSQLException(Message.java:105)
at org.h2.message.Message.getSQLException(Message.java:116)
at org.h2.message.Message.getSQLException(Message.java:75)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:377)
at org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:394)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:273)
at org.h2.table.Table.fireConstraints(Table.java:768)
at org.h2.table.Table.fireAfterRow(Table.java:783)
at org.h2.command.dml.Delete.update(Delete.java:75)
at org.h2.command.CommandContainer.update(CommandContainer.java:72)
at org.h2.command.Command.executeUpdate(Command.java:208)
at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:116)
at de.willuhn.datasource.db.AbstractDBObject.delete(AbstractDBObject.java:361)
... 11 more
Ich habe einfach in der Mitgliederliste einen Rechtsklick gemacht und den Button "löschen" geklickt. Auch wenn ich auf Mitglied bearbeiten klicke und dann dort versuche zu löschen, erhalte ich die selbe Fehlermeldung.
Das Bearbeiten der Mitgliederdetails ist aber nach wie vor möglich.
Ich verwende Jameica unter Windows 7 bit.
Mache ich etwas falsch, oder kann mir jemand weiterhelfen?
Für Tipps wäre ich sehr dankbar.
die Meldung erscheint, weil es noch Sätze in der Abrechnungstabelle gibt, die auf das Mitglied zeigen.
Diese Fehlermeldung habe ich von anderer Stelle auch schon erhalten. Es wäre möglich, den Foreign Key so einzurichten, dass die Abrechnungssätze automatisch gelöscht werden, wenn das Mitglied gelöscht wird.
Die Frage an die Gemeinschaft: Ist das gewollt, dass die Abrechnungsdaten gelöscht werden?
Hinweis: Du kannst bei dem Mitglied ein Austritts- und ein Kündigungsdatum setzen. Dann wird das Mitglied bei Abrechnungen und Auswertungen nicht mehr berücksichtigt.
es ist möglich, so zu verfahren wie du beschrieben hast. Der Abrechnungssatz "hängt dann in der Luft". Er ist nicht mehr mit einem Mitglied verknüpft. Werden die Abrechnungssätze zum Mitgliedskonto ausgebaut. Siehe auch http://www.jverein.de/forum/viewtopic.php?f=7&t=19
Dann ist es erst recht problematisch, das Mitglied zu löschen. Warum muss das Mitglied denn eigentlich gelöscht werden? Die Abrechnung berücksichtigt nur angemeldete Mitglieder. Bei der Suche und bei den Auswertungen kannst du entscheiden, welchen Status das Mitglied haben soll. Ich persönlich lasse alle Mitglieder in der Datenbank und hatte noch nie Probleme damit.
Ich kenne das noch von der alten Software, dass Mitglieder immer gelöscht werden mussten. Ich schaue mir das mit den abgemeldeten Mitgliedern aber mal an. Evt. kann ich ja auch einfach so verfahren.
Das gleiche gibt es bei Referenz zu Mailempfänger ... wollte einen Testuser aus dem System entfernen. Ich habe dann die Mail gelöscht, war auch nur Test, allerdings hätte ich im Ernstfall evtl. Mails löschen müssen, die auch andere adressiert waren und deshalb zu Nachweis-Zwecken lieber erhaltenswert gewesen wären ... Tip? Gibt es vielleicht ein Utility-Klasse, die man per Kommando-Zeile nutzen könnte um DB zu bereinigen o.ä.?
(SWT:2655): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -5 and height 22
[Sat Oct 02 21:29:30 CEST 2010][ERROR][de.willuhn.jameica.messaging.LogMessageConsumer.handleMessage] Fehler beim Löschen des Mitgliedes
[Sat Oct 02 21:29:30 CEST 2010][ERROR][de.jost_net.JVerein.gui.action.MitgliedDeleteAction.handleAction] Fehler beim Löschen des Mitgliedes
java.rmi.RemoteException: delete failed, rollback successful; nested exception is:
org.h2.jdbc.JdbcSQLException: Referentielle Integrität verletzt: FKMAILEMPFAENGER2: PUBLIC.MAILEMPFAENGER FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID)
Referential integrity constraint violation: FKMAILEMPFAENGER2: PUBLIC.MAILEMPFAENGER FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID); SQL statement:
delete from MITGLIED where ID = 2 [23003-118]
at de.willuhn.datasource.db.AbstractDBObject.delete(AbstractDBObject.java:379)
at de.jost_net.JVerein.gui.action.MitgliedDeleteAction.handleAction(MitgliedDeleteAction.java:70)
at de.willuhn.jameica.gui.parts.ContextMenu$1.handleEvent(ContextMenu.java:173)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at de.willuhn.jameica.gui.GUI.loop(GUI.java:692)
at de.willuhn.jameica.gui.GUI.init(GUI.java:221)
at de.willuhn.jameica.system.Application.init(Application.java:143)
at de.willuhn.jameica.system.Application.newInstance(Application.java:85)
at de.willuhn.jameica.Main.main(Main.java:78)
Caused by: org.h2.jdbc.JdbcSQLException: Referentielle Integrität verletzt: FKMAILEMPFAENGER2: PUBLIC.MAILEMPFAENGER FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID)
Referential integrity constraint violation: FKMAILEMPFAENGER2: PUBLIC.MAILEMPFAENGER FOREIGN KEY(MITGLIED) REFERENCES PUBLIC.MITGLIED(ID); SQL statement:
delete from MITGLIED where ID = 2 [23003-118]
at org.h2.message.Message.getSQLException(Message.java:105)
at org.h2.message.Message.getSQLException(Message.java:116)
at org.h2.message.Message.getSQLException(Message.java:75)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:377)
at org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:394)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:273)
at org.h2.table.Table.fireConstraints(Table.java:773)
at org.h2.table.Table.fireAfterRow(Table.java:788)
at org.h2.command.dml.Delete.update(Delete.java:77)
at org.h2.command.CommandContainer.update(CommandContainer.java:72)
at org.h2.command.Command.executeUpdate(Command.java:208)
at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:116)
at de.willuhn.datasource.db.AbstractDBObject.delete(AbstractDBObject.java:361)
... 11 more
momentan ist es so gelöst, dass das Mitglied nur gelöscht werden kann, wenn es keine Referenzen mehr gibt. Die Frage ist doch, warum willst du das Mitglied (außer zu Testzwecken) löschen? Es gibt ein Austrittsdatum. Dann werden keine Abrechnungen ... mehr vorgenommen.
heiner hat geschrieben:Die Frage ist doch, warum willst du das Mitglied (außer zu Testzwecken) löschen? Es gibt ein Austrittsdatum. Dann werden keine Abrechnungen ... mehr vorgenommen.
Vielleicht will er nur der gesetzlichen Verpflichtung nachkommen, dass keine persönlichen Daten gespeichert werden dürfen, wenn sie nicht mehr benötigt werden.
Vielleicht will er nur der gesetzlichen Verpflichtung nachkommen, dass keine persönlichen Daten gespeichert werden dürfen, wenn sie nicht mehr benötigt werden.
Da fängt das Problem doch schon an. Ab wann werden die Daten nicht mehr gebraucht? Beim Mailversand wäre das vermutlich einfach zu beantworten. Sofern für irgendwelche Zwecke protokolliert werden muss, wer eine bestimmte Mail bekommen hat, kann das ggfls. auch in Papierform gemacht werden. Allerdings ist das dann auch schon wieder eine Speicherung. Das Bundesdatenschutzgesetz bezieht sich nämlich nicht nur auf digital gespeicherte Daten. Das gilt auch für Daten in Papierform.
Schwierig wird es bei den Mitgliedskonten und damit den Buchführungsdaten. Da gibt es sicher auch Aufbewahrungsfristen. Erst wenn die abgelaufen sind, werden die Daten nicht mehr benötigt. Ab diesem Zeitpunkt wäre dann eine Löschung wieder erforderlich.
Dieses Thema sollten wir mal hier im Forum ausgiebig diskutieren. Kurzfristig und überhastet werde ich keine Änderung am Programm vornehmen.
Vielleicht will er nur der gesetzlichen Verpflichtung nachkommen, dass keine persönlichen Daten gespeichert werden dürfen, wenn sie nicht mehr benötigt werden.
Da fängt das Problem doch schon an. Ab wann werden die Daten nicht mehr gebraucht?
Das ist für die Möglichkeit, die Daten vollständig löschen zu können, doch irrelevant. Ob und wann die Daten gelöscht werden, liegt dann in der Verantwortung des die Daten Pflegenden. Nur muss die Möglichkeit dazu natürlich vorhanden und nicht kategorisch ausgeschlossen sein, weil es die Möglichkeit gar nicht gibt.
Wenn die Möglichkeit vorhanden, aber davon abhängig ist, dass keine Referenzen mehr existieren, sollte man imho mit einer entsprechenden Information und Verweisen auf eben jene Referenzen darauf aufmerksam machen. Dann kann ich als Datenverwalter entscheiden, ob ich die Daten noch (zwingend) benötige oder nicht.