Toon posts:

[delphi/sql] hoe haal je het resultaat van een sum

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallow, probleempje, ik heb een TDesicionCubeQuery (volgens de help was dit beter dan een TQuery) waar ik de volgende sql op los laat: select sum(aantal)
from werkplanning
where ordernr = :ordernr. Hoe krijg ik nu resultaat uit deze query? .FieldByName('aantal').AsInteger lijkt het niet echt te doen.

avb

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:07
code:
1
Query.Fields[0].AsInteger

of
code:
1
Query.FieldByName('Aantal').AsInteger

Maar voor die laatste moet je SQL-statement er wel zo uitzien:
code:
1
SELECT SUM(aantal) AS aantal ...

https://fgheysels.github.io/


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Kun je hem niet benaderen met .FieldByName('sum(aantal)').

Geef hem anders een alias met AS in de SQL query
[edit]Beetje traag :(

Verwijderd

Topicstarter
nee, dat select sum(aantal) as aantal heb ik al geprobeerd maar dat werkt ook niet. Volgens de help moet ik met een desicion cube gebruiken, maar ik weet niet hoe ik dat ding aan de praat krijg. Je moet iets instellen in de editor van dat ding (dubbelklikken op het ding), maar steeds als ik denk dat ik het goed heb ingesteld en ik druk op ok krijg ik de fout: No available dimensions have been defined. ????????????

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:07
Voor zo'n simple query gebruik je best een TQuery component eigenlijk. Ik vraag me af waarom je een Decision Cube gaat gebruiken daarvoor?

je kan ook uw SQL query eens zo probere:
code:
1
select sum(aantal) somaantal from ...

(zonder AS dus).

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik heb nu devolgende procedure in de datamodule staan:

procedure TDataModule1.OrdersQueryaantalGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
DeelRestQuery.ParamByName('ordernr').AsInteger :=
OrdersQuery.FieldByName('ordernr').AsInteger;
Text := IntToStr(OrdersQuery.FieldByName('aantal').AsInteger -
DeelRestQuery.FieldByName('sumaantal').AsInteger);
end;

De deelrestquery is:

select sum(aantal) sumaantal
from werkverdeling
where ordernr = :ordernr
and klaar=true

de orders query is:

select distinct ordernr, kaartnr, aantal, prijs_centrale, prijs_thuiswerkers, ingangsdatum, leverdatum
from orders
where ordernr in (select ordernr
from werkverdeling
where klaar = true)

de orders query op zich doet het goed zonder de GetText procedure, de deelrest query doet het ook goed (merci) maar het probleem is dat de record pointer in de orders query niet verder gaat bij elke gettext (deze zou dan toch 1 record verder moeten aanwijzen ??). enig idee wat het probleem kan zijn ??

Verwijderd

Op donderdag 21 maart 2002 22:30 schreef Ludwich_von_Ludsjmich het volgende:
de orders query op zich doet het goed zonder de GetText procedure, de deelrest query doet het ook goed (merci) maar het probleem is dat de record pointer in de orders query niet verder gaat bij elke gettext (deze zou dan toch 1 record verder moeten aanwijzen ??). enig idee wat het probleem kan zijn ??
Bij queries hebben ze daar 'Next' voor uitgevonden. OnGetText is alleen maar handig bij calculated fields of bij bv. DBGrids om de te tonen tekst aan te passen.

Verwijderd

Topicstarter
moet ik dan gewoon de query doorlopen en bij elk record de waarde van het veld aanpassen ?

Verwijderd

Topicstarter
ik heb het al, voor de goede orde zet ik nog maar ff de opl erbij: een nieuw calculated field aanmaken in de ordersquery, en de berekening met de deelrestquery in de oncalcfields van de orderquery

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 01:40

Delphi32

Heading for the gates of Eden

Als je werkverdeling tabel hard gaat groeien ga je hier een performance probleem krijgen: voor elk veld in de order-tabel gaat ie dan die sum in het calculated field doen.
Mocht je daar last van krijgen, draai de boel dan om. Maak een query
code:
1
select ordernummer, sum(aantal) from werkplanning group by ordernummer

die je als basis gebruikt, en maak dan LookupFields aan bij deze dataset, die ervoor zorgen dat je per order de order-informatie uit de Ordertabel haalt.

Verwijderd

Op vrijdag 22 maart 2002 01:13 schreef Delphi32 het volgende:
Als je werkverdeling tabel hard gaat groeien ga je hier een performance probleem krijgen: voor elk veld in de order-tabel gaat ie dan die sum in het calculated field doen.
Mocht je daar last van krijgen, draai de boel dan om. Maak een query
code:
1
select ordernummer, sum(aantal) from werkplanning group by ordernummer

die je als basis gebruikt, en maak dan LookupFields aan bij deze dataset, die ervoor zorgen dat je per order de order-informatie uit de Ordertabel haalt.
Als je werkverdelingstabel erg groot wordt kan je toch ook een view maken?

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 01:40

Delphi32

Heading for the gates of Eden

Op vrijdag 22 maart 2002 10:59 schreef ChaosssGirl het volgende:

[..]

Als je werkverdelingstabel erg groot wordt kan je toch ook een view maken?
Schiet je vaak weinig mee op; een view is een select-query waar de database de query reeds voor gecompileerd heeft. Nounou, dat scheelt :Y)

Verwijderd

Topicstarter
maakt niets uit, de werkverdeling tabel wordt regelmatig leeggemaakt, er zullen niet snel meer dan 100 records inzitten... toch bedankt
Pagina: 1