![]() |
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? |
Re: Calculierte Felder, schnelle Lösung gesucht
Mit welchen Komponenten geifst du zu (Table, Query)?
BTW. Die BDE ist veraltet |
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:
Allerdings stolpert man dann als Anfänger über nicht updatefähige Queries und Ähnliches.
SELECT * FROM Tierverbrauch V, Futter F
WHERE V.VFood_ID = F.Food_ID Grüße vom marabu |
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? |
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 |
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?
|
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: |
Re: Calculierte Felder, schnelle Lösung gesucht
Oder sie in der Abfrage durch das berechnete Feld ersetzen (siehe meine Abfrage)
|
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 03:01 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