Results 1 to 7 of 7

Thread: Optelling Bestelling

  1. #1

    Question Optelling Bestelling

    Beste programmeurs

    Ik heb een Editveld met een Button, een Query (samen met DataSource)
    en een DBGrid.
    Samen met 2 tabellen:

    Bestelling
    Bestelnr
    Klantnr
    Status

    Bestelregel
    Bestelnr
    Productnr
    Aantal
    Prijs

    Nu kan ik door een bestelnr in het Editveld te geven een complete bestelling zien.
    Voorbeeld bestelnr 1 geeft
    *bestelnr, klantnr, status, productnr (welk product), aantal en prijs

    Natuurlijk hebben sommige bestellingen meerdere producten (de klant bestelt niet altijd 1 product)

    Hoe kan ik dan in een Editveld laten zien wat de totale prijs is van zoÔÇÖn bestelling?

    Alvast bedankt,
    ARI

  2. #2
    hoi,

    nou wat je eerst moet doen is alle bestelregels bij een bestelling zoeken. dit doe je doormiddel van een query.

    wanneer je dit heb gedaan kun je in delphi bij het openen de query doorlopen met bijvoorbeeld een while lus

    even een voorbeeldje :
    Code:
    var 
      totaalprijs: Real(ofzow)
    
    While not query1.eof do
    begin
      totaalprijs := totaalprijs + totaalquery1.fieldbyname('bestelregels').asfloat;
      query1.Next;
    end;
    
    edit1.Text := Floattostr(totaalprijs);
    hoop dat je het 1 beetje begrijpt.

    [edit]
    wat je ook moet doen is het aantal * prijs van een bestelregel doen anders klopt het nog niet
    [/edit]
    Last edited by Dees; 22-May-04 at 20:17.

  3. #3

    Question ?

    Sorry,

    Maar ik begrijp er weinig van.
    Ben pas begonnen met Delphi

  4. #4
    oke. goed. kan ook

    ehm als ik het goed begrijp. Je laat de gegevens zien van je bestelling in je dbgrid.
    nu heb je een editveld waarop je een bestelling kunt aanroepen. dus bijvoorbeeld bestelling 1 heeft 4 deel bestelregels. door op de knop te drukken wil je het totaalbedrag van de bestelling zien..

    dus on buttonclick doe je hetvolgende:

    ten eerste heb je nog 1 query nodig om dit op een makkelijke manier op te lossen:

    dan doe je het volgende:

    Code:
    Procedure TForm1.Button1Click(Sender: TObject);
    var
      TotaalBedrag : Real;
    Begin
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('select * from bestelregel'); // Selecteer al je bestelregels
      Query1.SQL.Add('where bestelnummer = "' + edit1.text + '"'); // waar bestelnummer = je ingevoerde nummer van je editbox
      Query1.Open;
      While not query1.EOF do 
      begin
        TotaalPrijs := TotaalPrijs + (query1.fieldByName('aantal').asFloat * query1.FieldByName('prijs').AsFloat);   
        query1.Next;
      end;
      edit2.text := FloatToStr(totaalprijs); // de editbox waar je de totaalprijs in wilt hebben
    End;
    volgens mij is dit wat je bedoeld, kijk maar of je er iets verder meej komt
    succes

  5. #5
    Dit soort zaken moet je gewoon in SQL oplossen, en niet in Delphi. SQL is hier ook voor bedoeld, en dus vele malen sneller (en scheelt een hoop code).

    Hier even snel een botte bijl voorbeeld (Zitten dus geen checks in, en de query (ik gebuik zelf liever datasets (met ADO dan)) vul je natuurlijk in met een parameter in de Query zelf etc...)


    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add(Format('select sum(Aantal * Prijs) as TOTAAL from Bestelregel where Bestelnr = %d',[StrToInt(Edit1.Text)]));
      Query1.Open;
    
      Edit2.Text := Query1.FieldByName('TOTAAL').AsString;
    
    end;
    *Er bestaat geen bugs, alleen leerpunten*

  6. #6

    Lightbulb ?

    Beste Knarf.

    Kun je dit nader toelichten.
    Begrijp het niet zo erg goed

    alvast bedankt

    ARI

  7. #7
    Ik hoop dat je de query bedoelt :

    Code:
      'select sum(Aantal * Prijs) as TOTAAL from Bestelregel where Bestelnr = %d'

    Het SQL statement wordt *door* de database wordt uitgevoerd. De database kan ook totaliseren en berekeningen uitvoeren. Stap voor stap gebeurd er het volgende:

    Voor iedere regel die gevonden wordt met de volgende query...

    Code:
      'select * from Bestelregel where Bestelnr = %d'
    ...wordt de berekening 'Aantal * Prijs' uitgevoerd en over alle regels wordt de uitkomst hiervan getotaliseerd door de 'sum( ... )' functie. Omdat de 'sum' functie geen geldige kolom naam is moeten we hier zelf een geldige naam aan toekenen, zoadt de Delphi code het resulttaat kan opvragen. Het toekennen van een naam aan een veld gebeurd met de extra SQL code ' as TOTAAL', direct na de functie.

    Doordat we de 'sum' gebruikt hebben, krijgen we maar 1 regel terug als resultaat (in dit geval)!
    *Er bestaat geen bugs, alleen leerpunten*

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •