![]() |
Einfache Formeln in Tabellenfeldern
Hallo,
Ich habe eine Tabelle mit 10 Feldern und ca. 5000Datensätze. Alle Felder enthalten verschiedene Integer Werte. Nun möchte ich dem User die Möglichkeit geben einfache Berechnungen mit diesen Feldern zu erstellen. Genauer gesagt soll man eine einfache Formeln speichern können die dann immer wieder zur Berechnung genutzt wird. z.B. User1 möchte folgende Formeln berechnen "erste Formel: (Feld1 + Feld2 + Feld8) / Feld3" und "zweite Formel: ((Feld5*Feld7) + Feld3) div 3" Als Ausgabe möchte ich nun alle Felder der Tabelle in einem Grid ausgeben und zusätzlich die Ergebnisse der Berechnungen. Wichtig ist das der User die Formeln selber erstellen kann und diese Formeln gespeichert werden können. Es geht nicht um komplexe Formeln sondern um einfache Grundrechenfunktionen. Mir fehlt noch der richtige Denkanstoß um das ganze Umzusetzen. Wie habt Ihr so etwas gelöst? Besten Dank für Eure Unterstützung Gruß EarlyBird |
AW: User berechnungen
Du kannst der DB per SQL ja sagen, welche Ergebnisse sie dir liefern soll. Da SQL auch die Grundrechenarten unterstützt, musst du einfach nur deine Formel als weiteres Feld definieren und per SELECT abfragen. Also etwa so:
SQL-Code:
Bernhard
SELECT Feld1, Feld2, Feld3, Feld1 + Feld2 + Feld3 AS Ergebnis
FROM Zahlentabelle WHERE 1; |
AW: Einfache Formeln in Tabellenfeldern
Danke für die schnelle Antwort.
Ich bekomme das mit der Abfrage schon hin. Aber wie kann der User das Eingeben wenn das Programm läuft? Oder meinst Du ich soll die kompletten Selectstatments speichern? |
AW: Einfache Formeln in Tabellenfeldern
Du musst ja nur den Teil (bei mir jetzt) zwischen "Feld3," und dem "AS Ergebnis" speichern. Der Rest ist immer gleich. Vor dem Ausführen musst du das SQL-Statement noch zusammenbauen und zwar hast du das entweder per Parameter ('SELECT *, :p AS Ergebnis ...' und dann SQL.Params('p').AsString := 'Feld1 + Feld2'; ) oder aber normal ('Select *, ' + UserQuery + ' AS Ergebnis ...').
ACHTUNG: Du musst in allen Fällen noch für eine gewisse Grundsicherheit sorgen, da ansonsten der User dazu ermächtigt wird, per SQL-Injection dein Programm oder die Tabelle dahinter zu zerstören. Bernhard |
AW: Einfache Formeln in Tabellenfeldern
Formeln zur Laufzeit berechnen:
![]() So ein Parser in Verbindung mit einem Calculated Field das im Event OnCalcFields befüllt wird würde dein Problem lösen. Der Benutzer könnte die Formel zur Laufzeit ändern und das Ergebnis im DBGrid sehen. Auf jeden Fall ist die Berechnung ohne SQL flexibler. Die Frage wäre noch, ob es nicht klüger wäre das Dataset nach Excel zu exportieren, um dem Benutzer so die Möglichkeit zu geben auch komplexe Berechnungen sowie Visualisierung mit Diagrammen vorzunehmen. Das hängt von der Zielgruppe (Privat, Verein, Kommerziell, Wissenschaftl.,...) ab. |
AW: Einfache Formeln in Tabellenfeldern
Ja, es gibt immer mehrere Wege. Da ich (dort, wo ich das verwendet habe), auch noch über die Summe sortiert habe, blieb mir nichts anderes übrig, als die Berechnung vom DB-Server (über SQL) durchführen zu lassen.
Nutzt man einen Matheparser und erledigt das ganze im Programm dürfte das einen großen Geschwindigkeitsvorteil bringen, da nicht immer wieder alle 50.000 Datensätze geladen werden müssen und der Mathe-Parser eventuell mehr Funktionen bereitstellt, als der DB-Server per SQL. Eine Export-Funktion fände ich auch nicht schlecht (Excel beherrscht etwa um die 1000 - 1300 Funktionen). Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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