Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verknüpfung von Datenbankabfrage und Berechnung (https://www.delphipraxis.net/37847-verknuepfung-von-datenbankabfrage-und-berechnung.html)

mr.floppy81 11. Jan 2005 11:59


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:
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
Wie kann ich das am besten realisieren?? Oder ist es überhaupt realisierbar???

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)

MrSpock 11. Jan 2005 12:33

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:

mr.floppy81 11. Jan 2005 12:47

Re: Verknüpfung von Datenbankabfrage und Berechnung
 
hmmm, hört sich gut an (und einfach an ;) ), ich teste das mal aus

MrSpock 11. Jan 2005 12:59

Re: Verknüpfung von Datenbankabfrage und Berechnung
 
Das Kopieren geht übrigens recht einfach mit der TBatchMove Komponente.

Stevie 11. Jan 2005 12:59

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:
select name, leistung_konst, leistung_var, 1.0 as faktor from artikel
In das OnCalcFields-Ereignis deines DataSets schreibst du dann:
Delphi-Quellcode:
begin
  DataSet.FieldByName('ergebnis').AsFloat :=
    (DataSet.FieldByName('faktor').AsFloat *
    DataSet.FieldByName('faktor').AsFloat *
    DataSet.FieldByName('leistung_var').AsFloat) +
    DataSet.FieldByName('leistung_konst').AsFloat;
end;
Mfg
Stevie

MrSpock 11. Jan 2005 13:26

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?

Stevie 11. Jan 2005 13:34

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.

mr.floppy81 17. Jan 2005 10:37

Re: Verknüpfung von Datenbankabfrage und Berechnung
 
hmmm,

ein paar kleine Zwischenfragen habe ich. Mr Spock schrieb:

Zitat:

die einfachste Lösung wäre die Daten über SQL beim Server abzuholen und in eine lokale Tabelle zu kopieren
wie kann ich etwas in eine lokale Tabelle kopieren??? Welche Komponente soll ich dazu nutzen?? muss ich dazu eine Tabelle (z.B. paradox o.ä.)auf dem rechner haben?


Zitat:

in der das Feld FaktorL existiert
wie realisiere ich den Eintrag des Feldes?? also wie kann ein zusätzliches Feld eingefügt werden??

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

Stevie 17. Jan 2005 13:51

Re: Verknüpfung von Datenbankabfrage und Berechnung
 
Zitat:

Zitat von mr.floppy81
hmmm,

ein paar kleine Zwischenfragen habe ich,

als tabelle soll eine ttable komponente verwendet werden?
wie kann ich die Tabelle zur entwicklungszeit anzeigen lassen??
wie füge ich zusätzliche spalten zur tabelle hinzu???

das wären meine grössten Probleme.

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

1.Nein, ich würde die ADO-Komponenten benutzen - aber TADODataSet, denn nur dort kannst du eine eigene SQL-Abfrage definieren.
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ü ...

mr.floppy81 17. Jan 2005 14:07

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 07:04 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