![]() |
Verknüpfung von Datenbankabfrage und Berechnung
moin,
brauche einmal einen Vorschlag von euch bevor ich das Programm schreibe. Also ich habe vor mit Daten aus der Datenbank und selbstzuwählenden Variablen Berechnungen durchzuführen. Meine Idee ist folgende: Aus einer Datenbank werden Daten entnommen und in einem dbgrid dargestellt. Bei diesen Daten handelt es sich um: Artikel, konstante leistung, varible Leistung. Neben diesem dbgrid soll eine Spalte dargestellt werden, in welche der Anwender des Programms eigene Werte MANUELL eingibt (diese sollen NICHT in einer Datenbank gespeichert werden, sondern nur während der Laufzeit des Programms aktiv sein). Nennen wir die Variable einmal "Faktor L". Die Spalte welche den "Faktor L" enthält, soll immer nur so viele Einträge ermöglichen, als es auch Artikel gibt. (bei 20 Artikeln ist also 20 mal der "Faktor L" eintragbar) In einer dritten spalte soll dann das Rechenergebnis erscheinen, welches bei Multiplikation und Addition herauskommt. Die Berechnung erfolgt Zeilenweise und die Formel würde so lauten: Ergebnis=((FaktorL)² * var.Leistung)+konst.leistung Ich stelle mir bildlich folgendes vor:
Code:
Wie kann ich das am besten realisieren?? Oder ist es überhaupt realisierbar???
artikel konst.Leistung var.Leistung I faktorL I Ergebnis
test 10 25 I 0,9 I xxx bla bla 29 10 I 1,7 I yyy auto 0 60 I 0,4 I zzz (diese Werte entstammen der DB) I Eingabe vom I Berechnung Nutzer nach Formel Das Problem, das ich habe ist, dass ich nicht weiss, 1. Welches die beste Komponente ist, um den "Faktor L" darzustellen? 2. die Spalte mit dem "Faktor L" so schreiben soll, dass sich genau 20 Eintragmöglicheiten öffnen? 3. Wie kann man "Faktor L" mit den entsprechenden dbgrideinträgen multiplizieren um ihn dann in der Ergebnisspalte anzuzeigen? LG Andreas PS: Ich hoffe dass die Darlegung des Problems verständlich war??? PSPS: die Datenbank ist MSSQL soweit ich weiss und der zugriff erfolgt über storedprocedures (die schreibt der System-Admin) |
Re: Verknüpfung von Datenbankabfrage und Berechnung
Hallo mr.floppy81,
die einfachste Lösung wäre die Daten über SQL beim Server abzuholen und in eine lokale Tabelle zu kopieren, in der das Feld FaktorL existiert und z.B. mit 1 vorbesetzt ist. Das Feld Ergebsis wird als berechnetes Feld angelegt und ändert sich damit automatisch, sobald FaktorL (das einige Feld, dass du zum Ändern freigibst), geändert wird. Fertig! :mrgreen: |
Re: Verknüpfung von Datenbankabfrage und Berechnung
hmmm, hört sich gut an (und einfach an ;) ), ich teste das mal aus
|
Re: Verknüpfung von Datenbankabfrage und Berechnung
Das Kopieren geht übrigens recht einfach mit der TBatchMove Komponente.
|
Re: Verknüpfung von Datenbankabfrage und Berechnung
Hi Andreas,
dies kannst du ganz einfach mit calculated Fields machen. Dazu erstellst du neben den drei aus der Datenbank ermittelten Feldern (Artikel, konst. Leistung, var. Leistung) noch zwei Felder, wobei FieldKind des einen(Faktor) auf fkInternalCalc und des anderen(Ergebnis) auf fkCalculated gesetzt wird. Die Abfrage sieht dann in etwa so aus:
SQL-Code:
In das OnCalcFields-Ereignis deines DataSets schreibst du dann:
select name, leistung_konst, leistung_var, 1.0 as faktor from artikel
Delphi-Quellcode:
Mfg
begin
DataSet.FieldByName('ergebnis').AsFloat := (DataSet.FieldByName('faktor').AsFloat * DataSet.FieldByName('faktor').AsFloat * DataSet.FieldByName('leistung_var').AsFloat) + DataSet.FieldByName('leistung_konst').AsFloat; end; Stevie |
Re: Verknüpfung von Datenbankabfrage und Berechnung
Hallo Stevie,
ist die Datenmenge, die vom MSSQL Server kommt automatisch editierbar, so dass man den FaktorL ändern kann? |
Re: Verknüpfung von Datenbankabfrage und Berechnung
Hallo MrSpock,
das dürfte nicht von der Datenbank abhängen, sondern von der Einstellung der Datenmenge. Diese müsste natürlich schon editierbar sein. Wenn das Feld im DataSet auf fsInternalCalc und ReadOnly = False steht, dann geht das. Wenn natürlich die Datenmenge schon nicht editierbar ist und/oder über eine Query abgerufen wird, dann würde ich den "Umweg" über ein ClientDataSet vorschlagen. |
Re: Verknüpfung von Datenbankabfrage und Berechnung
hmmm,
ein paar kleine Zwischenfragen habe ich. Mr Spock schrieb: Zitat:
Zitat:
Könntet ihr vielleicht ein kleines Tabellen "tutorial" schreiben. Ich komme nämlich mit meinem Latein nicht weiter.... Habe leider nur sehr wenig Ahnung von der Programmierung allgemein und noch weniger von der Arbeit mit Datenbanken, hoffe darum, dass euch die Fragen nicht dumm vorkommen :duck: LG Andreas |
Re: Verknüpfung von Datenbankabfrage und Berechnung
Zitat:
2.Stell das DataSet auf Active und verbinde sie über eine TDataSource-Komponente mit deinem TDBGrid. 3.Doppelklick auf das DataSet und dann mit dem Kontextmenü ... |
Re: Verknüpfung von Datenbankabfrage und Berechnung
oh, habe etwas schnell meinen letzten eintrag editiert....
werde das jetzt erstmal auf dem wege versuchen wie stevie das beschrieben hat. wenn es probs gibt meld ich mich Danke und Grüße Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 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-2025 by Thomas Breitkreuz