Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Vorhandensein eines Feldes prüfen (https://www.delphipraxis.net/76221-vorhandensein-eines-feldes-pruefen.html)

hoika 31. Aug 2006 14:01

Datenbank: FB • Version: 1.5 • Zugriff über: bde

Vorhandensein eines Feldes prüfen
 
Hallo #,

meine DB wird ständig erweitert, es kommen neue Felder dazu.
Da ich kein Freund von "select *" bin,
prüfe ich immer vorher, welche Felder vorhanden sind,
und baue dann die Query danach auf.
Mmeistens werden nicht alle Felder benutzt.

Nein ! Das Prüfen erfolgt nur einmal beim Programmstart :wall: ;)

Nun die Frage:
Zum Prüfen benutze ich bisher ein
SQL-Code:
select * from tab where id=0
Dann wird mit Fields in einer Schleige gekuckt, ob das betreffende Feld drin steht.

Bei grossen Tabellen dauert es natürlich etwas (wobei das "dauert" relativ ist).
Es wird ja ein leeres Recordset zurückgegeben.

Die Execute bei einer mitteren Tabelle sind 30ms, die fetch 5ms (ibplanalyzer).


Eine andere Möglichkit wäre der direkte Zugriff auf die Metadaten, also:
SQL-Code:
select rdb$relation_fields.rdb$field_name
       from
          rdb$relation_fields
       where
         (rdb$relation_fields.rdb$relation_name='PERSONAL')
       and
         (
         (rdb$relation_fields.rdb$field_name='NAME')
         or
         (rdb$relation_fields.rdb$field_name='FIRSTNAME')
         )
Jetzt sind die Zeiten gnau anders rum (Execute 5ms, Fetch 30ms wegen dem Recordset).

Hat hier jemand praktische Erfahrungen mit "FieldExistsInTable" und Firebird ?


DBServer-Unabhängigkeit spielt hier erst mal keine Rolle.


Danke im voraus

Heiko

shmia 31. Aug 2006 14:05

Re: Vorhandensein eines Feldes prüfen
 
SQL-Code:
SELECT * FROM Tabelle WHERE 0=1
Sollte deutlich schneller sein, da kein Zugiff auf die Nutzdaten stattfindet.

hoika 31. Aug 2006 15:33

Re: Vorhandensein eines Feldes prüfen
 
Hm,

also bei FB 1.5 erzeugt das obige Statement einen full table scan,

Execute: 30 ms, Fetch: 10 ms.


Heiko

shmia 1. Sep 2006 06:58

Re: Vorhandensein eines Feldes prüfen
 
Zitat:

Zitat von hoika
also bei FB 1.5 erzeugt das obige Statement einen full table scan,

Das ist natürlich ganz schon blöd von FB; andere Datenbanken können das besser.
Man könnte es aber auch mit
SQL-Code:
SELECT TOP 0 * FROM Tabelle
versuchen.


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