[Delphi] kolom met gecalculeerde values naar tabel?

Pagina: 1
Acties:
  • 239 views sinds 30-01-2008
  • Reageer

  • 0M3G4
  • Registratie: Januari 2003
  • Laatst online: 05-12-2025
Hoe voeg ik een complete kolom met gecalculeerde gegevens (zichtbaar in een DBGrid) aan een bestaande tabel toe?

bij voorbaat dank ;) en sorry voor de n00bness.. maar goed everybody has to start somewhere of niet?!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Gewoon met een query er door heen lopen en de waarde berekenen + invullen?

Een DBGrid voert wijzigingen toch zelf door naar de database?

[ Voor 31% gewijzigd door jelmervos op 20-01-2003 13:08 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
As in opslaan in een databank? -> niet doen, gecalculeerde gegevens sla je beter niet op

of

As in: toevoegen aan een TTable of TQuery zodat die kan getoond worden in de grid:
Rechts klikken op de TTable of TQuery component die op uw form staat, en add field of new field oid kiezen. (Weet het niet vanbuiten, en heb geen Delphi bij de hand hier).

https://fgheysels.github.io/


  • 0M3G4
  • Registratie: Januari 2003
  • Laatst online: 05-12-2025
neej, een DBGrid laat alleen zien wat je wil zien, dit kan dus met een sql query en zo heb ik het ook gedaan.... ik heb de attributen "aantal" en "stukprijs" die in de database staan en daaruit calculeer ik "bedrag" die NIET in de database staan maar wel op de grid... mijn vraag was dus: hoe krijg ik de kolom "bedrag" naar de database zodat ik er met een sql query een SUM op los kan laten zodat ie het totaalbedrag kan uitrekenen

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Je kunt idd beter het veld laten berekenen in Delphi zelf. Gewoon dubbel klikken op je Query/Table component en daar kiezen voor "New field...", vul de gewenste opties in en kies voor "Calculated" field type. Nu moet in je OnClacFields de waarde gaan berekenen en invullen in het veld.

Zoiets:
DataSet.FieldByName('Totaalprijs').AsCurrency := DataSet.FieldByName('Stuksprijs').AsCurrency * DataSet.FieldByName('Aantal').AsInteger;

De andere oplossing is om het in SQL te berekenen:
SELECT *, Stuksprijs * Aantal
FROM Artikelen

Of dit laatste zo direct werkt weet ik niet, maar het idee is er. Misschien zoals hieronder met SUM. :)

[ Voor 56% gewijzigd door jelmervos op 20-01-2003 13:16 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
Gecalculeerde values sla je best niet op in de databank: waste of space, en ook minder flexibel. Iedere keer als je de prijs van een artikel gaat veranderen, moet je al die 'bedragen' die je berekend hebt, ook gaan aanpassen.

Die SUM kan je ook doen zonder dat die bedragen in de DB zitten:
code:
1
2
3
select sum ( bedrag * aantal )
from tabel
where klantId = 1

bv.

https://fgheysels.github.io/


  • 0M3G4
  • Registratie: Januari 2003
  • Laatst online: 05-12-2025
dat doet ie al... de waarden van bedrag worden keurig weergegeven in de grid, alleen ik heb een edit veld wat gevuld moet worden met het totaal van die waarden, daarom wilde ik het in de database hebben zodat ik dat met een sql query kan doen... maar als er nog een andere oplossing is hoor ik die ook graag :P

  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Er worden je al 2 oplossingen geboden, middels een query of middels ee kolom toevoegen in je TTABLE. Het beste lijkt me een virtuele kolom toevoegen aan je TTABLE, vervolgens op het 'oncalfields' event van de ttable de waarde gaan berekenen, dus bijvoorbeeld

ttableVIRTUEEL:=ttableaantal + ttableprijs

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb


  • 0M3G4
  • Registratie: Januari 2003
  • Laatst online: 05-12-2025
ok dus als ik het goed begrijp kan ik het gewoon oplossen met een sql query... ik heb de query nu als volgt.. is dit goed?

SELECT SUM(SELECT (r.Aantal * o.Stukprijs)Bedrag
FROM Orderregel r, OnderdeelDB o
WHERE r.Onderdeelnr = o.Onderdeelnummer) Totaalprijs

let niet op de database-namen die zijn gewoon onderdeel van de applicatie

[ Voor 12% gewijzigd door 0M3G4 op 20-01-2003 13:24 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
Die 2de select is nergens voor nodig hoor....

code:
1
2
3
select sum ( r.aantal * o.stukprijs) as bedrag
from orderregel r, onderdeel o
where ...


Tip: gebruik code - tags als je code post.

https://fgheysels.github.io/


  • 0M3G4
  • Registratie: Januari 2003
  • Laatst online: 05-12-2025
danke sehr meine herren voor de snelle service ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
Oh, ik zie net dat je nieuw bent hier.... Welkom. ;)

Misschien lees je ook best ff deze stukjes door:
Welkom in P&W (FAQ-28/11/2002)
Welkom in P&W -> Quickstart (update 2/10/2002)

https://fgheysels.github.io/


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Graag gedaan, veel plezier verder op GoT.

"The shell stopped unexpectedly and Explorer.exe was restarted."

Pagina: 1