AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Virtuelles Feld

Ein Thema von theomega · begonnen am 7. Aug 2003 · letzter Beitrag vom 8. Aug 2003
Antwort Antwort
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

Virtuelles Feld

  Alt 7. Aug 2003, 14:11
Hallo Leute
ich habe eine Tabelle mit einem feld "kontonr". Das ist ein varchar mit 4 Zeichen. Jetzt brauche ich ein zweites Feld, am besten Boolean (gibt es leider unter Firebird nicht also eine Integer mit 0/1), das wenn das erste Zeichen (immer eine Zahl) kleiner ist als 4 true ist und sonst false.
Natürlich kann ich das Feld bei jeder Änderung an der Datenbank neu berechnen, aber das ist ja ziemlich aufwendig. Wie kann ich in die Tabelle einfach ein "virtuelles Feld" einfügen, das wie oben angegeben, die Werte hat.

Datenbank ist Firebird
Kompos sind die Std. Interbase

Grüße
TO
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Virtuelles Feld

  Alt 7. Aug 2003, 22:29
Hallo theomega,

solche Felder nennen sich berechnete Felder, die über COMPUTED BY definiert werden können. Aber in deinem Fall, ist der Ausdruck beim COMPUTED BY sehr schwierig!?

Deshalb könntest du vielleicht ein normales Feld (z.B. isGroesser) nehmen und es wie folgst setzen:

SQL-Code:
UPDATE tabTest
SET isGroesser=0
Damit werden alle Felder auf "False gesetzt" und anschließend:

SQL-Code:
UPDATE tabTest
SET isGroesser=1
WHERE CAST(substr(erstesFeld, 1, 1) AS SMALLINT) > 4;
Wenn du es mit COMPUTED BY definieren willst, benötigst du eine STORED PROCEDURE oder eine UDF.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#3

Re: Virtuelles Feld

  Alt 8. Aug 2003, 09:37
Inzwischen habe ich es zumindest so hinbekommen, das es direkt mit einem "WHere" ausgelesen wird. Das Problem ist, das Firebird kein substr kennt. Das muß man erst per UDF einbinden.
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#4

Re: Virtuelles Feld

  Alt 8. Aug 2003, 15:26
Du brauchst eigentlich kein substr, sondern kannst einfach mit den alphanumerischen größer/kleiner-Operatoren arbeiten.
Ich habe gerade keine geeignete Tabelle zum Test zur Verfügung, aber es sollte so funktionieren:
Dein "virtuelles Feld" soll dann true sein, wenn die Kontonummer größer als '0' ist und kleiner als '4'. Also ist es dann true,
if ((KONTONR > '0') and (KONTONR < '4')) .
Ich denke auch, dass es nicht sehr aufwändig ist, das als festes Feld mit Triggern zu realisieren, also "Before insert" und "Before udate" etwa folgendes festzulegen:
SQL-Code:
if ((new.KONTONR > '0') and (new.KONTONR < '4'))
   then new.BOOLEAN = 1 else new.BOOLEAN = 0
Viel Erfolg
Urs

P.S.
Wenn Du schon Daten in der Tabelle hast, müsstest Du natürlich die bisherigen Datensätze mit einem Update anpassen (s. Nachricht von MrSpock)
  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 06:01 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