Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Systemtabellen in Firebird (https://www.delphipraxis.net/211622-systemtabellen-firebird.html)

Walter Landwehr 13. Okt 2022 12:24

Systemtabellen in Firebird
 
Hallo
ich habe hier zwei Firebird Datenbanken die eigentlich gleich sein sollten. In einer Datenbank ist ein feld mit computed (Rechnungsjahr|| '-' ||Rechnungsnummer)

In der anderen Datenbank gibt es auch dieses Feld jedoch ohne computed warum weiß ich nicht.

Wie kann man diese die Datenbanken abgleichen. Mit IB Expert geht es nicht.
Hier die Updatebefehle in IBExpert
Delphi-Quellcode:
ALTER TABLE TBL_ADRESS ALTER COLUMN NAMEKOMPLETT
  /* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

ALTER TABLE TBL_BUCHHALTUNG ALTER COLUMN MONAT
  /* SMALLINT */ COMPUTED BY (extract(month from BELEGDATUM));

ALTER TABLE TBL_BUCHHALTUNG ALTER COLUMN JAHR
  /* SMALLINT */ COMPUTED BY (extract(year from BELEGDATUM));

ALTER TABLE TBL_KRAEUTERKALKPOS ALTER COLUMN GESAMTPREIS
  /* DOUBLE PRECISION */ COMPUTED BY (Menge * PreisPro100/100);

ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN EKPROZENTPREIS
  /* DOUBLE PRECISION */ COMPUTED BY (EKPreis * EKProzent/100);

ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN EKGESAMTPREIS
  /* DOUBLE PRECISION */ COMPUTED BY (EKPreis + EKProzentPreis);

ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN VKGESAMTPREIS
  /* DOUBLE PRECISION */ COMPUTED BY (EKGesamtpreis + PreisVerpackung + PreisBriefmarke + PreisUmschlag + Arbeitspreis);

ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN MENGEPROTAG
  /* DOUBLE PRECISION */ COMPUTED BY (GesamtMenge/Anwendungsdauer);

ALTER TABLE TBL_LIEFERANT ALTER COLUMN ANREDE_NAME
  /* VARCHAR(106) */ COMPUTED BY (Anrede || ' ' || Name);

ALTER TABLE TBL_LIEFERANT ALTER COLUMN NAMEKOMPLETT
  /* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

ALTER TABLE TBL_MITARBEITER ALTER COLUMN ANREDE_NAME
  /* VARCHAR(106) */ COMPUTED BY (Anrede || ' ' || Name);

ALTER TABLE TBL_MITARBEITER ALTER COLUMN NAMEKOMPLETT
  /* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

ALTER TABLE TBL_PATBLATT ALTER COLUMN BEHANDLUNGSMONAT
  /* SMALLINT */ COMPUTED BY (extract(month from BEHANDLUNGSDATUM));

ALTER TABLE TBL_PATBLATT ALTER COLUMN BEHANDLUNGSJAHR
  /* SMALLINT */ COMPUTED BY (extract(year from BEHANDLUNGSDATUM));

ALTER TABLE TBL_PATIENT ALTER COLUMN NAMEKOMPLETT
  /* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

ALTER TABLE TBL_RECHNUNG ALTER COLUMN RECHNUNGSNUMMERKOMPLETT
  /* VARCHAR(23) */ COMPUTED BY (Rechnungsjahr|| '-' ||Rechnungsnummer);

ALTER TABLE TBL_RECHNUNG ALTER COLUMN NAMEKOMPLETT
  /* VARCHAR(107) */ COMPUTED BY (Vorname|| ' ' ||Name);

ALTER TABLE TBL_RECHNUNGSPOSITIONEN ALTER COLUMN BEHANDLUNGSMONAT
  /* SMALLINT */ COMPUTED BY (extract(month from BEHANDLUNGSDATUM));

ALTER TABLE TBL_RECHNUNGSPOSITIONEN ALTER COLUMN BEHANDLUNGSJAHR
  /* SMALLINT */ COMPUTED BY (extract(year from BEHANDLUNGSDATUM));
Beim ausführen des Update scripts kommen diese Meldungen:


/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column NAMEKOMPLETT.
-------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_ADRESS ALTER COLUMN NAMEKOMPLETT
/* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column MONAT.
------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_BUCHHALTUNG ALTER COLUMN MONAT
/* SMALLINT */ COMPUTED BY (extract(month from BELEGDATUM));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column JAHR.
------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_BUCHHALTUNG ALTER COLUMN JAHR
/* SMALLINT */ COMPUTED BY (extract(year from BELEGDATUM));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column GESAMTPREIS.
------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_KRAEUTERKALKPOS ALTER COLUMN GESAMTPREIS
/* DOUBLE PRECISION */ COMPUTED BY (Menge * PreisPro100/100);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column EKPROZENTPREIS.
---------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN EKPROZENTPREIS
/* DOUBLE PRECISION */ COMPUTED BY (EKPreis * EKProzent/100);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column EKGESAMTPREIS.
--------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN EKGESAMTPREIS
/* DOUBLE PRECISION */ COMPUTED BY (EKPreis + EKProzentPreis);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column VKGESAMTPREIS.
--------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN VKGESAMTPREIS
/* DOUBLE PRECISION */ COMPUTED BY (EKGesamtpreis + PreisVerpackung + PreisBriefmarke + PreisUmschlag + Arbeitspreis);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column MENGEPROTAG.
------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_KRAEUTERKALKULATION ALTER COLUMN MENGEPROTAG
/* DOUBLE PRECISION */ COMPUTED BY (GesamtMenge/Anwendungsdauer);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column ANREDE_NAME.
------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_LIEFERANT ALTER COLUMN ANREDE_NAME
/* VARCHAR(106) */ COMPUTED BY (Anrede || ' ' || Name);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column NAMEKOMPLETT.
-------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_LIEFERANT ALTER COLUMN NAMEKOMPLETT
/* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column ANREDE_NAME.
------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_MITARBEITER ALTER COLUMN ANREDE_NAME
/* VARCHAR(106) */ COMPUTED BY (Anrede || ' ' || Name);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column NAMEKOMPLETT.
-------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_MITARBEITER ALTER COLUMN NAMEKOMPLETT
/* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column BEHANDLUNGSMONAT.
-----------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_PATBLATT ALTER COLUMN BEHANDLUNGSMONAT
/* SMALLINT */ COMPUTED BY (extract(month from BEHANDLUNGSDATUM));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column BEHANDLUNGSJAHR.
----------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_PATBLATT ALTER COLUMN BEHANDLUNGSJAHR
/* SMALLINT */ COMPUTED BY (extract(year from BEHANDLUNGSDATUM));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column NAMEKOMPLETT.
-------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_PATIENT ALTER COLUMN NAMEKOMPLETT
/* VARCHAR(141) */ COMPUTED BY (Vorname|| ' ' ||Name);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column RECHNUNGSNUMMERKOMPLETT.
------------------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_RECHNUNG ALTER COLUMN RECHNUNGSNUMMERKOMPLETT
/* VARCHAR(23) */ COMPUTED BY (Rechnungsjahr|| '-' ||Rechnungsnummer);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column NAMEKOMPLETT.
-------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_RECHNUNG ALTER COLUMN NAMEKOMPLETT
/* VARCHAR(107) */ COMPUTED BY (Vorname|| ' ' ||Name);

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column BEHANDLUNGSMONAT.
-----------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_RECHNUNGSPOSITIONEN ALTER COLUMN BEHANDLUNGSMONAT
/* SMALLINT */ COMPUTED BY (extract(month from BEHANDLUNGSDATUM));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
Cannot add or remove COMPUTED from column BEHANDLUNGSJAHR.
----------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_RECHNUNGSPOSITIONEN ALTER COLUMN BEHANDLUNGSJAHR
/* SMALLINT */ COMPUTED BY (extract(year from BEHANDLUNGSDATUM));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_CONSTRAINTS failed.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_12".
Problematic key value is ("RDB$CONSTRAINT_NAME" = 'CHK_TBL_BUCHHALTUNG').
-------------------------------------------------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_BUCHHALTUNG ADD CONSTRAINT CHK_TBL_BUCHHALTUNG CHECK(((Belegnummer is not Null) and (Belegnummer >0)));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_CONSTRAINTS failed.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_12".
Problematic key value is ("RDB$CONSTRAINT_NAME" = 'CHK_TBL_KASSENBUCH').
-------------------------------------------------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_KASSENBUCH ADD CONSTRAINT CHK_TBL_KASSENBUCH CHECK(((Belegnummer is not Null) and (Belegnummer >0)));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_CONSTRAINTS failed.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_12".
Problematic key value is ("RDB$CONSTRAINT_NAME" = 'CHK_TBL_PAREZEPT').
-------------------------------------------------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_PAREZEPT ADD CONSTRAINT CHK_TBL_PAREZEPT CHECK((DATUM is not Null));

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_CONSTRAINTS failed.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_12".
Problematic key value is ("RDB$CONSTRAINT_NAME" = 'CHK_TBL_TEXTBAUSTEINE').
-------------------------------------------------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_TEXTBAUSTEINE ADD CONSTRAINT CHK_TBL_TEXTBAUSTEINE CHECK(SUCHWORT <> '');

/************************************************** *****************************
Die nächste Anweisung verursacht folgenden Fehler:

This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_CONSTRAINTS failed.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_12".
Problematic key value is ("RDB$CONSTRAINT_NAME" = 'CHK_TBL_TPAREZEPT').
-------------------------------------------------------------------------------------------------
SQLCODE: -607
SQLSTATE: 42000
GDSCODE: 335544351
************************************************** *****************************/
ALTER TABLE TBL_TPAREZEPT ADD CONSTRAINT CHK_TBL_TPAREZEPT CHECK((DATUM is not Null));

Hat jemand eine Idee wie ich die beiden Tabellen gleich bekomme.

mkinzler 13. Okt 2022 14:01

AW: Systemtabellen in Firebird
 
Versuch esmal mit DROP/ADD statt ALTER

Blup 13. Okt 2022 15:20

AW: Systemtabellen in Firebird
 
Die DB kann eine ältere Version haben als der Server. Dieser kann die DB trotzdem öffnen, unterstütz aber nicht alle Kommandos.
Wenn du dir ein Skript zur Umstellung von IBExpert erstellen lässt, sollte die eingestellte DB-Version wirklich die Version der Ziel-DB sein.
Sonst werden eventuell Statements generiert, die diese Datenbank nicht ausführen kann.
Zitat:

Zitat von mkinzler (Beitrag 1513241)
Versuch esmal mit DROP/ADD statt ALTER

Das ist auf jeden Fall schon mal richtig.

Weiter unten sind noch einige Fehler, weil bereits Datensätze vorhanden sind, die der neu hinzuzufügenden Bedingung nicht entsprechen.
(z.B. Datensätze ohne Belegnummer, aber die Bedingung erfordert eine oder sogar eine eindeutige Belegnummer)

Diese vielen kalkulierten Felder bringen aus Sicht der DB-Entwicklung keinen Vorteil. Dafür nehmen die Datensätze mehr Speicher in Anspruch.
Die selbe Vereinfachung für Abfragen lässt sich auch mit einer VIEW erreichen, die den Inhalt der kalkulierten Felder bei Bedarf ermittelt.

Neumann 14. Okt 2022 11:08

AW: Systemtabellen in Firebird
 
Ich mag die berechneten Felder auch nicht, die sind ja nicht editierbar und man muss immer aufpassen das die nie in irgendwelche Update oder Insert-Statements auftauchen, z.B. wenn man über einen Script Daten Importiert.

Walter Landwehr 15. Okt 2022 12:09

AW: Systemtabellen in Firebird
 
Habe jetzt die Felder gelöscht und neu angelegt. Nun ist alles gut.

Danke an alle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.

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