Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FOREIGN KEY läßt sich nicht anlegen (https://www.delphipraxis.net/63006-foreign-key-laesst-sich-nicht-anlegen.html)

Jens Schumann 12. Feb 2006 17:41

Datenbank: Firebird • Version: 1.5.2 • Zugriff über: IBX 6.0

FOREIGN KEY läßt sich nicht anlegen
 
Hallo,
ich möchte folgendes umsetzten. Der Benutzer kann Daten für eine bestimmte Version aus einer Exceltabelle in die Datenbank schieben. Die Version wird vom Admin in der Tabelle VERSIONEN verwaltet. Den Dateinamen und den Arbeitsblattnamen muss der Benutzer frei wählen können. Auch die Anzahl der Exceldateien, die der Benutzer für die Dateneingabe verwendet ist und muss beliebig sein. Wenn der Benutzer das erste Mal Daten einspielt soll in der Datenbank eine passende Tabelle (SQL s.u.) erzeugt werden. Der Tabellenname in der Datenbank leitet sich aus dem Dateinamen und dem Arbeitsblattnamen der Exceldatei ab. Diese Tabelle soll einen FOREIGN KEY auf die Versionstabelle bekommen. Wenn jetzt vom Admin eine Version gelöscht wird werden automatisch in den Datentabellen die zur Version passenden Datensätze gelöscht. Über einen Trigger wird beim INSERT die Nummer der aktiven Version aus der Tabelle VERSIONEN geholt und in das Feld VER geschrieben.
Das funktioniert auch alles.

Problematisch wird es, wenn ein zweiter Benutzer angemeldet ist.

Die Rechte für die Tabelle VERSIONEN sind wie folgt vergeben:
USER1 ALL
USER2 SELECT,UPDATE,DELETE,INSERT

Wenn USER1 die Tabelle anlegen möchte erhält er folgende Fehlermeldung
Code:
ISC ERROR CODE:335544351

ISC ERROR MESSAGE:
unsuccessful metadata update
object VERSIONEN is in use
USER2 hat bis dahin noch nichts mit der Datenbank gemacht. Nur angemeldet.
Es ist auch egal ob USER1 die Tabelle aus der Anwendung heraus anlegen möchte oder über die IBOConsole.

SQL-Code:
CREATE TABLE "INPUT_TEST"
(
  "JAHR"   TINT ,
  "VER"   TINT ,
  "KATEGORIE"   TSTRING30  COLLATE DE_DE,
  "PARTNER"   TSTRING15  COLLATE DE_DE,
  "EMPF"   TSTRING15  COLLATE DE_DE,
  "PLANWERT"   DOUBLE PRECISION,
  "POSNR"   TSTRING30  COLLATE DE_DE,
  "BWA"   TSTRING15  COLLATE DE_DE,
  "SAISON"   TINT,
CONSTRAINT FK_VERSION FOREIGN KEY ("VER") REFERENCES "VERSIONEN" ("ID") ON UPDATE CASCADE ON DELETE CASCADE );
Über einen Trigger wird beim INSERT die ID der aktiven Version aus der Tabelle VERSIONEN geholt und in das Feld VER geschrieben.

dataspider 12. Feb 2006 18:33

Re: FOREIGN KEY läßt sich nicht anlegen
 
Hi,

das Anlegen eines Foreign Key unter Firebird benötigt noch exclusiven Zugriff.
Erst ab der Version 2 wird es anders. In der aktuellen Beta kann man es unter den Release Notes nachlesen.

Ich warte auch sehnsüchtig auf Version 2 und damit Änderungen wie:
Benutzer kann eigenes Passwort ändern...
brute-force Verzögerung...
Stringfunktionen wie Trim, Lower
...

Cu, Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.

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