Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird Fehler (-206) Coloumn doesnt belong to table! (https://www.delphipraxis.net/144163-firebird-fehler-206-coloumn-doesnt-belong-table.html)

TheMiller 1. Dez 2009 15:42

Datenbank: Firebird • Version: 2.1? • Zugriff über: Zeos und direkt

Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Hallo,

ich hab ein Problem, welches ich nicht nachvollziehen kann. Ich habe in einer Datenbank 13 Tabellen, alle mit einem selbsterstellten autoincrement-Trigger (natürlich pro Tabelle einen eigenen ;) )

Nun habe ich noch eine Tabelle hinzufügen wollen und erhalte den Fehler

Zitat:

Error Code: -206. Column does not belong to referenced table The SQL: CREATE TRIGGER "autoinc" FOR KOMKATEGORIEN
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (KOMKATEGORIEN.kid IS NULL) THEN KOMKATEGORIEN.kid = GEN_ID(GEN_KOMKATEGORIEN_ID,1);
END
;
Andere Trigger wurden statt [TABLENAME].[FELD] mit NEW.[FELD] erstellt - das funktioniert hier auch nicht. Hier mal die Definition der Tabelle

Zitat:

CREATE TABLE KOMKATEGORIEN (
"kid" INTEGER NOT NULL,
"parent" INTEGER DEFAULT -1,
"titel" VARCHAR(100),
/* Keys */
PRIMARY KEY ("kid")
);

"GENERATOR: GEN_KOMKATEGORIEN_ID"
Funktionierende Trigger sehen bei mir so aus:

Zitat:

BEGIN
IF (NEW.sid IS NULL) THEN NEW.sid = GEN_ID(GEN_SCHEMATA_ID,1);
END
Auch die Inserts in die "KOMKATEGORIEN" liefern den gleichen Fehler... Was ist da los? Bitte um Hilfe

Danke im Voraus

mkinzler 1. Dez 2009 15:48

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Lass mal den Tabellennamen im Feldbezeichner weg:
SQL-Code:
IF (kid IS NULL) THEN kid = GEN_ID(GEN_KOMKATEGORIEN_ID,1);

TheMiller 1. Dez 2009 15:49

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Nein, leider keine Abhilfe...

Zitat:

SQL Error: Dynamic SQL Error SQL error code = -206 Column unknown KID At line 5, column 11. Error Code: -206. Column does not belong to referenced table The SQL: CREATE TRIGGER "autoinc" FOR KOMKATEGORIEN
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (kid IS NULL) THEN kid = GEN_ID(GEN_KOMKATEGORIEN_ID,1);
END
;

DeddyH 1. Dez 2009 15:49

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Ich kenne jetzt auch nur die Syntax mit NEW. Hast Du einmal die Verbindung zur DB getrennt und neu aufgebaut?

mkinzler 1. Dez 2009 15:51

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Zudem ist das Quoten von Feldbezeichnern eine mögliche Fehlerquelle.
"kid" sorgt für Kleinschreibung. Eine Abfrage nach kid könnte u.U. als KID wirken was dann eine eine andere Saplte wäre ("kid" <> KID)

TheMiller 1. Dez 2009 15:53

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Ja. Der Fehler kam schon, als ich in Delphi über ZEOS einen Datensatz eintragen wollte.

Danach hab ich mit Firebird Maestro nachgeschaut, wie die Tabelle aussieht und da kommt eben der gleiche Fehler, auch beim Trigger erstellen...

Auch mit Quotes das gleiche Ergebnis

Zitat:

SQL Error: Dynamic SQL Error SQL error code = -206 Column unknown kid At line 5, column 13. Error Code: -206. Column does not belong to referenced table The SQL: CREATE TRIGGER "autoinc" FOR KOMKATEGORIEN
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF ("kid" IS NULL) THEN "kid" = GEN_ID(GEN_KOMKATEGORIEN_ID,1);
END
;
Ich bin ratlos

mkinzler 1. Dez 2009 15:54

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Und mbei Verwendung der Kontrextvariabkle ( NEW."kid")?

DeddyH 1. Dez 2009 15:55

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Wenn das keine Produktivumgebung ist, lösch doch einfach die Tabelle und erstell sie neu (dann aber besser ohne Quotes).

TheMiller 1. Dez 2009 15:56

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Hab ich auch schon gemacht. Die Tabelle habe ich zweimal neu erstellt..

DeddyH 1. Dez 2009 15:57

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Kannst Du mal ein Script generieren und hier anhängen?

TheMiller 1. Dez 2009 15:59

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Welches Skript denn? Hab doch oben die Create- und Triggerskripte angegeben! Also, gerne, aber weiß nicht, was du gerne hättest

DeddyH 1. Dez 2009 16:06

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Zumindest mit IBExpert kannst Du sämtliche Metadaten (und auch Daten) als Script extrahieren und anderswo wieder einlesen.

TheMiller 1. Dez 2009 16:25

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Sorry dass es so lange gedauert hat. Der Register-Prozess von HK-Software ist ziemlich unübersichtlich.

Hab das Programm installiert, bekomme aber keine Verbindung, da die gds32.dll fehlt. Ich suche sie noch...

mkinzler 1. Dez 2009 16:26

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Du kannst auch fbclient.dll als Client-Dll einstellen

TheMiller 1. Dez 2009 16:28

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Hab ich probiert...

Zitat:

Connecting... Failed!
------------------------------------
Client Library is missing or invalid.
\\tsclient\C\Kompilate\Projekt1\fbclient.dll

TheMiller 1. Dez 2009 16:48

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
So, ich habe jetzt alle Generatoren und Tabellen gelöscht, die ich testweise angelegt habe. Danach habe ich eine neue Tabelle mit Trigger angelegt - selbser Fehler. Dann habe ich im Trigger NEW verwendet und das Feld "gequoted" und den Namen des Triggers anders benannt als "autoinc". Nun habe ich die Tabelle erstellt bekommen.

Zitat:

-- Table: KOMPENDIUM_KATEGORIEN

-- DROP TABLE KOMPENDIUM_KATEGORIEN;

CREATE TABLE KOMPENDIUM_KATEGORIEN (
"katid" INTEGER NOT NULL,
"parent" INTEGER DEFAULT -1,
"titel" VARCHAR(100),
/* Keys */
PRIMARY KEY ("katid")
);


SET TERM ^ ;

CREATE TRIGGER "trautoinc" FOR KOMPENDIUM_KATEGORIEN
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW."katid" IS NULL) THEN NEW."katid" = GEN_ID(GEN_KOMPENDIUM_KATEGORIEN_ID,1);
END^

SET TERM ; ^
Allerdings tritt beim Eintragen immernoch der "doesn't belong to table"-Fehler auf.

Delphi-Quellcode:
  try
    Form1.ZQuery1.SQL.Clear;
    Form1.ZQuery1.SQL.Text:='INSERT INTO KOMPENDIUM_KATEGORIEN (pid, titel) VALUES (:pid, :titel)';
    Form1.ZQuery1.ParamByName('pid').AsInteger:=0;
    Form1.ZQuery1.ParamByName('titel').AsString:=katname;
    Form1.ZQuery1.ExecSQL;
  except
    RaiseSQLError();
  end;
Da ist der Wurm drin... Danke soweit erstmal!

DeddyH 1. Dez 2009 17:01

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
pid gibt es in der Tabelle ja auch nicht.

TheMiller 1. Dez 2009 17:04

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Stimmt :oops:

Mit "parent" geht es aber auch nicht. Gleicher Fehler.

DeddyH 1. Dez 2009 17:06

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Groß- und Kleinschreibung hast Du beachtet?

TheMiller 1. Dez 2009 17:08

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Ja. Hier nochmal die Create-SQL und mein Delphi-Quelltext

Zitat:

CREATE TABLE KOMPENDIUM_KATEGORIEN (
"katid" INTEGER NOT NULL,
"parent" INTEGER DEFAULT -1,
"titel" VARCHAR(100),
/* Keys */
PRIMARY KEY ("katid")
);
Delphi-Quellcode:
  try
    Form1.ZQuery1.SQL.Clear;
    Form1.ZQuery1.SQL.Text:='INSERT INTO KOMPENDIUM_KATEGORIEN (parent, titel) VALUES (:id, :titel)';
    Form1.ZQuery1.ParamByName('id').AsInteger:=0;
    Form1.ZQuery1.ParamByName('titel').AsString:=katname;
    Form1.ZQuery1.ExecSQL;
  except
    RaiseSQLError();
  end;

DeddyH 1. Dez 2009 17:12

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Auch auf die Gefahr hin, dass ich mich jetzt blamiere (ich quote meine Tabellen und Felder nie), wie sieht es so aus?
Delphi-Quellcode:
try
    Form1.ZQuery1.SQL.Clear;
    Form1.ZQuery1.SQL.Text:='INSERT INTO KOMPENDIUM_KATEGORIEN ("parent", "titel") VALUES (:id, :titel)';
    Form1.ZQuery1.ParamByName('id').AsInteger:=0;
    Form1.ZQuery1.ParamByName('titel').AsString:=katname;
    Form1.ZQuery1.ExecSQL;
  except
    RaiseSQLError();
  end;

TheMiller 1. Dez 2009 17:16

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Zitat:

ich quote meine Tabellen und Felder nie
Ich auch nicht. Außer bei einem Webprojekt, welches mit einer Zahl beginnt.

Das hat tatsächlich funktioniert. Der Eintrag ist in der Tabelle drin.

Doch erkläre mir bitte eins noch an dieser Stelle. Die Datenbank hat 13 Tabellen. Warum macht diese 13. jetzt so viele Probleme? Ich habe im gesamten Projekt keine Quotes gesetzt, geschweige denn setzen müssen!

Trotzdem vielen Dank für diesen Tipp!

DeddyH 1. Dez 2009 17:19

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
IIRC musst Du nur dann quoten, wenn Du einen case-sensitive Tabellen/Feldbezeichner erzwingen willst oder reservierte Wörter benutzt. Ansonsten sollte das nicht nötig sein.

TheMiller 1. Dez 2009 17:21

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Hm... okay..
ich danke vielmals!!!

Hansa 1. Dez 2009 23:15

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Zitat:

Zitat von Firebird-FAQ
Double-quoted identifiers

Before the SQL-92 standard, it was not legal to have object names (identifiers) in a database that duplicated keywords in the language, were case-sensitive or contained spaces. SQL-92 introduced a single new standard to make any of them legal, provided that the identifiers were defined within pairs of double-quote symbols (ASCII 34) and were always referred to using double-quote delimiters.

The purpose of this “gift” was to make it easier to migrate metadata from non-standard RDBMSs to standards-compliant ones. The down-side is that, if you choose to define an identifier in double quotes, its case-sensitivity and the enforced double-quoting will remain mandatory.

Firebird does permit a slight relaxation under a very limited set of conditions. If the identifier which was defined in double-quotes:

1. was defined as all upper-case,
2. is not a keyword, and
3. does not contain any spaces,

...then it can be used in SQL unquoted and case-insensitively. (But as soon as you put double-quotes around it, you must match the case again!)
Warning

Unless you have a compelling reason to define quoted identifiers, it is usually recommended that you avoid them. Firebird happily accepts a mix of quoted and unquoted identifiers – so there is no problem including that keyword which you inherited from a legacy database, if you need to.
Warning

Wichtig ist das "remain mandatory". D.h. sinngemäss : einmal Quotes und immer Case-sensitiv. Es ist also wichtig, mit diesem Firlefanz gar nicht erst anzufangen "it is usually recommended that you avoid them". In IBExpert existiert übrigens eine Checkbox "always capatilize database object names", da sollte man einen Haken setzen und fertig. Noch eine Fehlerquelle ist das Zusammensetzen der Insert-Statements im eigenen Quelltext, anstatt die TDataset-Methode
Delphi-Quellcode:
Dataset.Insert;
zu benutzen.

TheMiller 2. Dez 2009 08:58

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Oha... da ist aber (My|MS)SQL deutlich flexibler. Nunja, vielen Dank für die Info!

mkinzler 2. Dez 2009 09:02

Re: Firebird Fehler (-206) Coloumn doesnt belong to table!
 
Zitat:

Zitat von DJ-SPM
Oha... da ist aber (My|MS)SQL deutlich flexibler. Nunja, vielen Dank für die Info!

Nein, da wird halt keine Case-Sensitivity unterstützt. Lass einfach die Quotes weg ( beim anlegen), dann geht es problemlos


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 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-2025 by Thomas Breitkreuz