Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird Subtabelle plötzlich komplett leer (https://www.delphipraxis.net/212920-firebird-subtabelle-ploetzlich-komplett-leer.html)

BlueStarHH 24. Apr 2023 13:26

Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC

Firebird Subtabelle plötzlich komplett leer
 
Hallo,

in einer Firebird Datenbank, die nur ich verwenden (lokal auf meinem PC) ist eine Subtabelle plötzlich komplett leer. In dem Log meiner Software ist kein "delete" SQL-Befehl seit dem Tag, an dem alle Datensätze verschwunden sind, aufgezeichnet. Wie kann so etwas entstehen? Ich kann mich nicht erinnern, dass ich auf diese Subtabelle jemals manuell SQL-Querys angewandt habe. Immer nur über die IBDAC-Komponenten einzelne Datensätze gelöscht oder hinzugefügt. Mit ATable.Insert und ATable.Delete. Fehlermeldungen gab es auch keine. Mit dem IBExpert nachgeschaut: Die Tabelle ist wirklich leer. Zum Glück hatte ich ein Backup.

Lemmy 24. Apr 2023 13:37

AW: Firebird Subtabelle plötzlich komplett leer
 
was sagt gfix zu der Datenbank? (gfix -v -full....)
Gibt es cascading Updates / Delets? Also wie sieht die Tabellenstruktur aus?

BlueStarHH 24. Apr 2023 13:58

AW: Firebird Subtabelle plötzlich komplett leer
 
Zitat:

Zitat von Lemmy (Beitrag 1521473)
was sagt gfix zu der Datenbank? (gfix -v -full....)

Teste ich nachher. Danke für den Tipp.

Zitat:

Zitat von Lemmy (Beitrag 1521473)
Gibt es cascading Updates / Delets?

Hauptdatensätze sind noch alle da. Gelöscht werden die nur in Ausnahmen. Dann auch nur einzelne. Das verknüpfte ID-Feld sollte sich nie ändern.

Zitat:

Zitat von Lemmy (Beitrag 1521473)
Also wie sieht die Tabellenstruktur aus?

Code:
CREATE GENERATOR GEN_VORGANGPOSSER_ID;

CREATE TABLE VORGANGPOSSER (
    ID           SMALLINT NOT NULL,
    VGPOSID      INTEGER NOT NULL,
    BEZEICHNUNG  VARCHAR(40),
    SERIENNUMMER VARCHAR(40)
);

ALTER TABLE VORGANGPOSSER ADD PRIMARY KEY (ID);
ALTER TABLE VORGANGPOSSER ADD CONSTRAINT FK_VORGANGPOSSER_VGPOSID FOREIGN KEY (VGPOSID) REFERENCES VORGANGPOS (ID) ON DELETE CASCADE ON UPDATE CASCADE;

CREATE OR ALTER TRIGGER VORGANGPOSSER_BI FOR VORGANGPOSSER
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_vorgangposser_id,1);
end

DeddyH 24. Apr 2023 14:00

AW: Firebird Subtabelle plötzlich komplett leer
 
Daran könnte es liegen:
Zitat:

Zitat von BlueStarHH (Beitrag 1521476)
ALTER TABLE VORGANGPOSSER ADD CONSTRAINT FK_VORGANGPOSSER_VGPOSID FOREIGN KEY (VGPOSID) REFERENCES VORGANGPOS (ID) ON DELETE CASCADE ON UPDATE CASCADE;


himitsu 24. Apr 2023 14:07

AW: Firebird Subtabelle plötzlich komplett leer
 
Joar, gibt ja nur ein paar Möglichkeiten

* jemand hat wirklich in der SubTabelle alles gelöscht
* wenn in der HauptTabelle gelöscht wird, dann entfernt das
Delphi-Quellcode:
ON DELETE CASCADE
auch das Jeweilige in der SubTabelle

* mit
Delphi-Quellcode:
ON DELETE SET NULL
blieben diese SubDatensäte erhalten, aber die Referenz wird NULL
* bei
Delphi-Quellcode:
ON DELETE NO ACTION
... heißt "nothing is done" dass die SubDatensätze unverändert da bleiben, oder wird der Hauptdatensatz dann nicht gelöscht?
* und ohne
Delphi-Quellcode:
ON DELETE
sollte das DELETE im Hauptdatensatz knallen, weil noch abhängige Daten vorhanden sind

DeddyH 24. Apr 2023 14:17

AW: Firebird Subtabelle plötzlich komplett leer
 
Bei NO ACTION kann der übergeordnete Datensatz nicht gelöscht werden, da sonst die referenzielle Integrität verletzt würde.

BlueStarHH 25. Apr 2023 18:49

AW: Firebird Subtabelle plötzlich komplett leer
 
Zitat:

Zitat von Lemmy (Beitrag 1521473)
was sagt gfix zu der Datenbank? (gfix -v -full....)?

Summary of validation errors
Number of record level warnings : 1
Number of pointer page warnings : 3

Was sagt das mir?

BlueStarHH 25. Apr 2023 18:52

AW: Firebird Subtabelle plötzlich komplett leer
 
Es ist heute wieder passiert. Wieder alle Datensätze der Subtabelle weg. Garantiert habe ich seit dem letzten mal kein SQL-Statement selbst ausgeführt. Maximal 5 Hauptdatensätze gelöscht. Kann IBDAC evtl. einen Fehler haben, dass durch das ON DELETE CASCADE dann ALLE Datensätze in der Subtabelle gelöscht werden und nicht nur die Datensätze die zu den Hauptdatensätzen gehören? Wie kann ich das sinnvoll loggen?

hoika 25. Apr 2023 19:02

AW: Firebird Subtabelle plötzlich komplett leer
 
Hallo,
hast Du vielleicht Trigger drauf?

himitsu 25. Apr 2023 19:33

AW: Firebird Subtabelle plötzlich komplett leer
 
Zitat:

Zitat von hoika (Beitrag 1521541)
hast Du vielleicht Trigger drauf?

Zitat:

Zitat von BlueStarHH (Beitrag 1521540)
Wie kann ich das sinnvoll loggen?

Auch mit einem Trigger. :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz