AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Vorhandensein eines Feldes prüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Vorhandensein eines Feldes prüfen

Ein Thema von hoika · begonnen am 31. Aug 2006 · letzter Beitrag vom 1. Sep 2006
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

Vorhandensein eines Feldes prüfen

  Alt 31. Aug 2006, 15:01
Datenbank: FB • Version: 1.5 • Zugriff über: bde
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

Nun die Frage:
Zum Prüfen benutze ich bisher ein
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
Heiko
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Vorhandensein eines Feldes prüfen

  Alt 31. Aug 2006, 15:05
SELECT * FROM Tabelle WHERE 0=1 Sollte deutlich schneller sein, da kein Zugiff auf die Nutzdaten stattfindet.
Andreas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Vorhandensein eines Feldes prüfen

  Alt 31. Aug 2006, 16:33
Hm,

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

Execute: 30 ms, Fetch: 10 ms.


Heiko
Heiko
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Vorhandensein eines Feldes prüfen

  Alt 1. Sep 2006, 07:58
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
SELECT TOP 0 * FROM Tabelle versuchen.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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