Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL] Feststellen, ob Feld existiert (https://www.delphipraxis.net/61342-%5Bsql%5D-feststellen-ob-feld-existiert.html)

FBrust 20. Jan 2006 08:48

Datenbank: Firebird • Version: 1.5.2 • Zugriff über: Zeos 6.5.1

[SQL] Feststellen, ob Feld existiert
 
Hallo,

in diesem Thread wurde erläutert, wie man mit Delphi feststellt, ob ein Feld in einer Datenbanktabelle existiert.

Ich füge neue Felder über SQL-Skripte hinzu und wollte deshalb die Prüfung, ob ein Feld bereits existiert, in das SQL-Skript auslagern.

Weiß jemand, wie man mit SQL feststellt, ob ein Feld existiert?


Gruß
Frank

mkinzler 20. Jan 2006 08:57

Re: [SQL] Feststellen, ob Feld existiert
 
Ist einfach mit Hilfe der SYSTEM-Tabellen lösbar:

SQL-Code:
select RDB$FIELD_NAME from RDB$RELATION_FIELDS where RDB$RELATION_NAME = <Tabellenname>;
Lefert alle Felder einet Tabelle

FBrust 20. Jan 2006 09:00

Re: [SQL] Feststellen, ob Feld existiert
 
Super, danke ! :thumb:

FBrust 20. Jan 2006 13:11

Re: [SQL] Feststellen, ob Feld existiert
 
Hmm,

schön und gut, dann erhalte ich eine Liste, die ich wieder durchsuchen muss.

Gibt es keinen direkteren Weg?

Mit
SQL-Code:
SQL.Text := 'SELECT COUNT (*) AS RECCOUNT FROM RDB$RELATIONS R ' +
            'WHERE R.RDB$RELATION_NAME = ' + QuotedStr(strTable);
kann ich feststellen, ob eine bestimmte Tabelle existiert und erhalte eine Integerwert der entweder 0 oder 1 enthält.

Sowas suche ich für ein einzelnes Feld in einer Tabelle.


Gruß
Frank

dfried 20. Jan 2006 13:21

Re: [SQL] Feststellen, ob Feld existiert
 
Na dann mach halt einfach noch eine AND-Bedingung hinten dran!

SQL-Code:
     select count(*) from RDB$RELATION_FIELDS
     where RDB$RELATION_NAME = <Tabellenname>
     and RDB$FIELD_NAME = <Feldname>;

mkinzler 20. Jan 2006 13:38

Re: [SQL] Feststellen, ob Feld existiert
 
oder das Alter-Skript erweitern in z.B.
SQL-Code:
Alter table <tabellenname>' add ... where not exists (select RDB$FIELD_NAME from RDB$RELATION_FIELDS
     where RDB$RELATION_NAME = <Tabellenname>
     and RDB$FIELD_NAME = <Feldname>);

FBrust 20. Jan 2006 13:39

Re: [SQL] Feststellen, ob Feld existiert
 
Hallo,

funktioniert leider nicht mit

SQL-Code:
            SQL.Text := 'select count(*) from RDB$RELATION_FIELDS ' +
                        'WHERE (R.RDB$RELATION_NAME = ' + QuotedStr(strTable) +
                        ') AND (R.RDB$FIELDNAME = ' + QuotedStr(strField) + ')';
Die Fehlermeldung lautet: "Column does not belong to referenced table".



Gruß
Frank

mkinzler 20. Jan 2006 13:46

Re: [SQL] Feststellen, ob Feld existiert
 
Zitat:

Zitat von FBrust
Hallo,

funktioniert leider nicht mit

SQL-Code:
            SQL.Text := 'select count(*) from RDB$RELATION_FIELDS ' +
                        'WHERE (R.RDB$RELATION_NAME = ' + QuotedStr(strTable) +
                        ') AND (R.RDB$FIELDNAME = ' + QuotedStr(strField) + ')';
Die Fehlermeldung lautet: "Column does not belong to referenced table".



Gruß
Frank

Es fehlt der ALIAS R beim Tabellenname RDB$RELATION_FIELDS

FBrust 20. Jan 2006 13:50

Re: [SQL] Feststellen, ob Feld existiert
 
So,

habs auch mit dem Vorschlag von mkinzler ausprobiert, allerdings scheint Firebird das where nicht so recht zu mögen.

Bei Ausführen von
SQL-Code:
ALTER TABLE TBLIPMAIN
ADD INTSCANID INTEGER
where not exists (select RDB$FIELD_NAME from RDB$RELATION_FIELDS
     where RDB$RELATION_NAME = TBLIPMAIN
     and RDB$FIELD_NAME = INTSCANID);
kommt die Fehlermeldung "Invalid token: where" :roll: .


Gruß
Frank

FBrust 20. Jan 2006 13:54

Re: [SQL] Feststellen, ob Feld existiert
 
Hallo,

Zitat:

Zitat von mkinzler
Es fehlt der ALIAS R beim Tabellenname RDB$RELATION_FIELDS


Stimmt, danke für den Hinweis, kommt aber die gleiche Fehlermeldung ("Column does not belong to referenced table").



Gruß
Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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