AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Felder automatisch berechnen in Mastertabelle

Felder automatisch berechnen in Mastertabelle

Offene Frage von "Jenns"
Ein Thema von Jenns · begonnen am 13. Feb 2009 · letzter Beitrag vom 13. Feb 2009
Antwort Antwort
Jenns

Registriert seit: 18. Jul 2005
18 Beiträge
 
#1

Felder automatisch berechnen in Mastertabelle

  Alt 13. Feb 2009, 15:12
Datenbank: SQLServer • Version: 2005 • Zugriff über: ADO
Hallo,

ich habe folgendes Problem:

Ich habe 2 Tabellen (Rechnung und Position)
die Tabelle Position enthält die einzelnen Rechnungspositionen und hat folgenden Aufbau

Renr | Posnr | Menge | Preis | Gesamtpreis

wobei Renr ein Fremdschlüssel für Rechnung ist und Gesamtpreis ein berechnetes Feld mit Menge * Preis

die Tabelle Rechnung soll so aussehen:

Renr | Summe

wobei Summe die Summe der Gesamtpreise ist, wo die Renr identisch ist.

mit
select renr, sum( Gesamtpreis) as Summe from position group by renr bekomm ich die benötigten Werte, aber wie bekomm ich die an besten in die Rechnungen rein?
Am liebsten wäre mir, wenn das Feld genauso berechnet werden kann, wie der Gesamtpreis, dh, ich muss im Programm nichts beachten und es wird immer von dem SQLServer berechnet berechnet.

Gruß, Jenns
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Felder automatisch berechnen in Mastertabelle

  Alt 13. Feb 2009, 15:19
Am Besten als Join auf die Gruppierung
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Felder automatisch berechnen in Mastertabelle

  Alt 13. Feb 2009, 15:26
Am besten über Trigger auf der Positionen-Tabelle (ooops - wie ist das nochmal in MS SQL?), bei ADS in etwa so:
SQL-Code:
create trigger trig_ins on position
  after insert
  begin
    declare @renr integer;
    @renr=(select renr from __new);
    update rechnung set summe=(select sum(gesamtpreis) from position where renr=renr)
      where renr=@renr;
  end;
Dasselbe noch für Update und Delete, damit alle Möglichkeiten abgedeckt sind.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Felder automatisch berechnen in Mastertabelle

  Alt 13. Feb 2009, 15:36
Man sollte solche Werte nicht in der Mastertabelle ablegen
[Edit: Frau auch, deshalb besser man]
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: Felder automatisch berechnen in Mastertabelle

  Alt 13. Feb 2009, 15:37
Hallo,

reicht nicht eininsert into Rechnung select renr, sum(Gesamtpreis) as Summe from position group by renr Das Select muss halt die Spalten in der Reihenfolge liefern, in der sie in Rechnung definiert sind.
Ggfls. für die Renr noch 'ne passende Wherebedingung.

Update könnte in etwa so gehen:
SQL-Code:
update rechnung
set betrag = (select sum(Gesamtpreis) from position group by renr where rechnung.renr = position.renr)
Falls nur eine Renr aktuallisiert werden soll, noch
where renr = :renr an das Updatestatement hängen.

Die Triggervariante ist jedoch die eleganteste Möglichkeit, da übernimmt die Datenbank 100% der Arbeit.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 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