Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Calculierte Felder, schnelle Lösung gesucht (https://www.delphipraxis.net/101955-calculierte-felder-schnelle-loesung-gesucht.html)

dot 21. Okt 2007 12:14

Datenbank: MSSQL • Zugriff über: BDE

Calculierte Felder, schnelle Lösung gesucht
 
Hallo Delphifreunde

ich suche nach einer Lösung für mein DBGridproblem

ich habe zwei Tabellen die 1te sieht so aus:

-TIERVERBRAUCH-
TIER_ID VFOOD_ID, MENGE
101 1 30
101 2 40
101 3 10

hier habe ich die VFOOD_ID die ein Fremdschlüssel auf das Feld FOOD_ID in der Tabelle FUTTER ist und
Menge in Kilogramm, von dem bestimmten Lebensmittel

die zweite Tab sieht so aus

FUTTER
FOOD_ID, NAME, WERTIGKEIT
1 MAIS, 150
2 GRAS, 300
3 HEU, 400

die zweite tabelle hat die Namen und die Wertigkeit auf 100 Kilogramm.

der User sucht nun in der Tabelle "FUTTER" einen NAMEN aus und fügt die MENGE hinzu.

In meiner DatenMenge stehen nun aber immer die WERTIGKEITEN für 100 Kilogramm drin und das zeigt auch mein DBGRID an,
ich will aber dass die Felder je nach vom User eingetragener MENGE kalkuliert angezeigt werden, ohne das ich diese in die Datenbank speichern muss.

so z.b sollte meine Wertigkeit im Grid aussehen

TIER_ID FOOD_ID MENGE NAME WERTIGKEIT
101 1 30 Gras 90 ( da die Menge ja 30kilo ist )
101 2 20 Heu 80 ( da die menge ja 20kilo ist )
wie kann ich sowas machen?

mkinzler 21. Okt 2007 12:19

Re: Calculierte Felder, schnelle Lösung gesucht
 
Mit welchen Komponenten geifst du zu (Table, Query)?
BTW. Die BDE ist veraltet

marabu 21. Okt 2007 13:08

Re: Calculierte Felder, schnelle Lösung gesucht
 
Hallo,

es ist eigentlich unabhängig davon, ob ADO oder BDE verwendet wird: Wenn mit Table-Komponenten gearbeitet wird, dann muss man der Table-Komponente für "Tierverbrauch" ein Lookup-Field für das Feld "Wertigkeit" über den Schlüssel "Food_Id" hinzufügen. Anschließend wird dann noch ein berechnetes Feld (auch im Feldeditor der Table-Komponente) definiert, in welchem (Wertigkeit / 100 * Menge) als Feldwert bestimmt wird.

Man kann die Wertigkeit auch per Query und SQL besorgen:

SQL-Code:
SELECT * FROM Tierverbrauch V, Futter F
WHERE V.VFood_ID = F.Food_ID
Allerdings stolpert man dann als Anfänger über nicht updatefähige Queries und Ähnliches.

Grüße vom marabu

dot 21. Okt 2007 15:40

Re: Calculierte Felder, schnelle Lösung gesucht
 
oh vielen dank erstmal
ich verwende Querys keine tables.
Muss man bei einem Calc-field immer eine neues hinzufügen, kann man nicht bei der WERTIGKEIT sagen, bevor es im Grid angezeigt wird:
WERTIGKEIT := WERTIGKEIT/100 * Menge?
sonst muss ich ja ein calc field machen und es da reinschreiben und das eigentliche Feld WERTIGKEIT im Grid auf visible := False setzen.
Geh ich da richtig in der Annahme?

mkinzler 21. Okt 2007 15:45

Re: Calculierte Felder, schnelle Lösung gesucht
 
Du brauchst ja nicht alle Felder der Tabelle in die Abfrage übernehmen bzw. Alle Felder der Ergebnismenge anzeigen.
SQL-Code:
SELECT
    ..., ( F.Wertigkeit/100* V.Menge) as Wertigkeit
FROM
    Tierverbrauch V, Futter F
WHERE
    V.VFood_ID = F.Food_ID

marabu 21. Okt 2007 15:46

Re: Calculierte Felder, schnelle Lösung gesucht
 
Wenn es nur ums Anzeigen geht, dann kannst du auch das Ereignis OnGetText() des Feldes Wertigkeit benutzen und darin umrechnen, aber was ist so schlimm daran ein zusätzliches berechnetes Feld zu spendieren?

dot 21. Okt 2007 18:08

Re: Calculierte Felder, schnelle Lösung gesucht
 
danke sowohl on GetText als auch der schöne SQL-String hilft mir.
Das problem wäre das ich die wertigkeit sehr oft drin habe, d.h Wertigkeit_protein, wertigkeit_fett usw.... 20 Wertigkeitsfelder,
dann müsste ich 20 Calc-Felder machen :shock:

:thumb:

mkinzler 21. Okt 2007 18:09

Re: Calculierte Felder, schnelle Lösung gesucht
 
Oder sie in der Abfrage durch das berechnete Feld ersetzen (siehe meine Abfrage)

marabu 21. Okt 2007 19:15

Re: Calculierte Felder, schnelle Lösung gesucht
 
Berechnungen in SQL-Ausdrücken werden vom Server berechnet - immer dann, wenn die Query erneut abgesetzt wird. Berechnungen beim Ereignis OnCalcFields() werden auf der Client-Seite durchgeführt - immer dann wenn notwendig. Wenn die Daten nur gelesen werden, dann würde ich mit SQL-Ausdrücken arbeiten, andernfalls mit calculated fields.


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