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.