Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Berechnetes Feld in TQuery (https://www.delphipraxis.net/96507-berechnetes-feld-tquery.html)

HolgerCW 25. Jul 2007 17:52

Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE

Berechnetes Feld in TQuery
 
Hallo zusammen,

wie kann ich z.B. sowas:

Delphi-Quellcode:
if Query['DRUCKGERAETVORHANDEN'] = 1 then
begin
 Query['KEIN_DB'] := 'P';
end
else
begin
 Query['KEIN_DB'] := '';
end;
in eine Select - Abfrage umbauen und in einer TQuery implementieren ?

Gruss

Holger

P.S.: KEIN_DB -> zur Zeit ein berechnetes Feld
DRUCKGERAETVORHANDEN -> Spalte in der Datenbank

DeddyH 25. Jul 2007 18:08

Re: Berechnetes Feld in TQuery
 
Ungetestet:
SQL-Code:
SELECT Feld1,(CASE DRUCKGERATVORHANDEN WHEN 1 THEN 'P' ELSE '' END) AS KEIN_DB
FROM Tabelle
WHERE...

HolgerCW 26. Jul 2007 10:48

Re: Berechnetes Feld in TQuery
 
Funktioniert,

super ...

Danke ...

Gruss

Holger

HolgerCW 26. Jul 2007 11:17

Re: Berechnetes Feld in TQuery
 
Habe da jetzt mal was gebaut, das klappt aber nicht ganz. Er sagt mir fehlender Ausdruck:

Delphi-Quellcode:
(CASE SYSWVKISU.ZEITSCHEIBEN.LEIST WHEN > (SELECT SYSDBP.DBP_KATEGORIE.LEISTUNGSWERT FROM SYSDBP.DBP_KATEGORIE WHERE ID = 1) THEN 'P' ELSE '' END) AS LEI_PRUE
Gruss

Holger

DeddyH 26. Jul 2007 11:21

Re: Berechnetes Feld in TQuery
 
Bei Oracle weiß ich es nicht genau, aber das SQL-Case arbeitet AFAIK ähnlich dem Delphi-Case, d.h. Du musst zum Vergleichen Konstanten verwenden. Deshalb geht das so nicht. Ich überlege aber gerade, wie man das umformulieren könnte, ist aber (zumindest für mich) nicht ganz einfach.

DeddyH 26. Jul 2007 11:33

Re: Berechnetes Feld in TQuery
 
Versuch mal, ob das so geht:
SQL-Code:
(CASE SIGN(SYSWVKISU.ZEITSCHEIBEN.LEIST - (SELECT SYSDBP.DBP_KATEGORIE.LEISTUNGSWERT
FROM SYSDBP.DBP_KATEGORIE WHERE ID = 1)) WHEN 1 THEN 'P' ELSE '' END) AS LEI_PRUE

HolgerCW 26. Jul 2007 12:13

Re: Berechnetes Feld in TQuery
 
Hi,

das klappt. Super danke. Aber wie berechneest Du da die 1. Du ziehst die eine Leitung von der anderen ab. Und was macht das SIGN ?

Gruss

Holger

DeddyH 26. Jul 2007 12:25

Re: Berechnetes Feld in TQuery
 
SIGN ermittelt das Vorzeichen. Wenn das Ergebnis der Subtraktion positiv ist, kommt eben 1 heraus, d.h. erster Wert ist größer als 2 Wert. :zwinker:

HolgerCW 26. Jul 2007 14:54

Re: Berechnetes Feld in TQuery
 
Clever,

kannst Du mir noch verraten, wie Du zwei Spalten multiplizieren würdest um dann das Ergebnis anzuzeigen ?

Gruss

Holger

mkinzler 26. Jul 2007 14:56

Re: Berechnetes Feld in TQuery
 
Einfach
SQL-Code:
...<Spalte1> * <Spalte2> as Erg...

HolgerCW 26. Jul 2007 15:13

Re: Berechnetes Feld in TQuery
 
Stimmt,

klappt ...

danke ...

Habe schon wieder zu kompliziert gedacht.

Gruss

Holger

HolgerCW 26. Jul 2007 16:39

Re: Berechnetes Feld in TQuery
 
Hi,

jetzt habe ich da aber noch eine Frage. Wie kann ich so eine ELSE - ABfrage verschachteln ?

Wenn ich das so mache:

Delphi-Quellcode:
(CASE SYSDBP.DBP_LEISTUNGSWERTE.TYP_ID WHEN NULL THEN '''' ELSE (CASE SYSDBP.DBP_LEISTUNGSWERTE.VERANTWORTUNG WHEN 1 THEN '''' ELSE ''P'' END) END) AS VERANTWORTUNG
dann wird nur der Teil hinter dem ersten ELSE berücksichtigt ...

Gruss

Holger

mkinzler 26. Jul 2007 16:45

Re: Berechnetes Feld in TQuery
 
Zieh doch beide Felder in eine Bedingung.
kennt oracle IIF()?

HolgerCW 26. Jul 2007 16:50

Re: Berechnetes Feld in TQuery
 
Wie würde das denn mit IIF aussehen ?

Gruss

Holger

P.S.: Weiss nicht ob ORACLE das kann, aber wenn ich schon die korrekte Zeile habe probiere ich es aus.

DeddyH 26. Jul 2007 16:54

Re: Berechnetes Feld in TQuery
 
Lesetipp

HolgerCW 26. Jul 2007 16:57

Re: Berechnetes Feld in TQuery
 
Habe mal den Lesetip gelesen:

So schreibt er mir immer Rechte Klammer fehlt:

Delphi-Quellcode:
(DECODE SYSDBP.DBP_LEISTUNGSWERTE.TYP_ID, NULL , NULL, (CASE SYSDBP.DBP_LEISTUNGSWERTE.VERANTWORTUNG WHEN 1 THEN '''' ELSE ''P'' END)) AS VERANTWORTUNG
Gruss

holger

HolgerCW 26. Jul 2007 17:04

Re: Berechnetes Feld in TQuery
 
Ich denke DECODE ist für mich auch nicht richtig.

Ich will ja wenn Spalte A NULL ist das Nichts ausgegeben wird.

Wenn Spalte A nicht NULL ist soll geprüft werden, ob Spalte B 1 oder NULL ist.

Bei NULL wird 'P' ausgegeben und bei 1 wieder Nichts.

Gruss

Holger

HolgerCW 26. Jul 2007 17:10

Re: Berechnetes Feld in TQuery
 
Ich habe es:

Delphi-Quellcode:
DECODE (SYSDBP.DBP_LEISTUNGSWERTE.TYP_ID, NULL , '''', (CASE SYSDBP.DBP_LEISTUNGSWERTE.VERANTWORTUNG WHEN 1 THEN '''' ELSE ''P'' END))) AS VERANTWORTUNG
Die kombi machts.

Danke und Gruss

Holger

mkinzler 26. Jul 2007 17:11

Re: Berechnetes Feld in TQuery
 
Zitat:

Wie würde das denn mit IIF aussehen ?
SQL-Code:
iif( SYSDBP.DBP_LEISTUNGSWERTE.TYP_ID is 0 or SYSDBP.DBP_LEISTUNGSWERTE.VERANTWORTUNG = 1, '''', ''P'')


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