Newsgroup: it.comp.lang.delphi
Titolo: somma Query

Ciao a tutti,
Eccovi la mia domanda: (premetto di aver già controllato se c'era qualcosa
di simile!!!)
1. Ho una tabella Paradox collegata ad un Table con 4/5
Field.(Es.Data,Nome,Ora in,Ora Fin,Tot ore)
2. Eseguo una Query per filtrare per 'Nome'.
3. Eseguo una ulteriore query per filtrare per 'nome,data dal, data al'.
4. Calcolo il contenuto del campo 'Tot ore' facendo la differenza tra Ora
Fin e Ora in.
5. Facendo il calcolo mi voglio far visualizzare la somma di tutti i
record appena calcolati del campo 'Tot ore' in un Edit.
Problema:
 Quando ordino in base al nome tutto va bene.
 Quando ordino prima per una data specifica e poi tra due date,il valore
dell' Edit risulta sbagliato perchè, quando eseguo la somma dei parziali,e
trovo dei valori con la stessa data,stessa ora in, stessa ora fin, ma con
nome diverso, non vengono considerati.
Riporto parte del codice che ho fatto:
procedure TForm1.DATAClick(Sender: TObject);
var
 Bookmark: TBookmark;
 Tot :Real;
begin
  //Apri la Query con i due parametri delle date
  DataMod.Query1.Close;
  DataMod.Query1.ParamByName('Y').AsDate :=  DateTimePicker_DAL.Date;
  DataMod.Query1.ParamByName('Z').AsDate :=  DateTimePicker_AL.Date;
  DBGrid1.DataSource:=DataMod.DataSource1;
  DataMod.Query1.Open;
//Calcola il totale
Bookmark := DataMod.Query1.GetBookmark;
DataMod.Query1.DisableControls;
Tot:= 0;
try
DataMod.Query1.First;
while not DataMod.Query1.EOF do
begin
Tot := Tot + DataMod.Query1TOT_ORE.Value;
DataMod.Query1.Next;
end;
finally
DataMod.Query1.GotoBookmark (Bookmark);
DataMod.Query1.FreeBookmark (Bookmark);
DataMod.Query1.EnableControls;
end;
Edit_ORETOT.Text:=FormatDateTime('hh:nn',Tot);
end;
Si vede che sono alle prime armi!!!!
Grazie a tutti !!!
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

1) non ho capito a cosa serve la TTable
2) real č mantenuto x compatibilitą:
3) impara da subito a dare nomi significativi a tutto:
query1
paramByName('z')...
4) forse non sai tutti gli sql hanno la funzione SUM
SELECT SUM(TOT_ORE) as TOTALEORE FROM TABELLA WHERE
CAMPO BETWEEN :DATESTART AND :DATEEND;
4) troppe dipendenze.
Fai in modo che il tuo datamodule esponga un metodo:
public
  function ApriLaQuery(const ADateStart, ADateEnd: TDateTime; var
ATotaleOre: real): integer;
begin
Query1.Close;
Query1.ParamByName('Y').AsDate :=  ADateStart;
Query1.ParamByName('Z').AsDate :=  ADateEnd;
Query1.Open;
query2.Close;
{ SELECT SUM(TOT_ORE) as TOTALEORE FROM TABELLA WHERE
CAMPO BETWEEN :DATESTART AND :DATEEND; }
Query2.ParamByName('dATEsTART').AsDate :=  ADateStart;
Query2.ParamByName('DateEnd').AsDate :=  ADateEnd;
Query2.Open;
ATotaleOre := query2.FieldByname('SommaOre').AsFloat;
end;

Ti ringrazio molto per tutto il tempo che hai messo a mia disposizione e
anche per tutti gli insegnamenti che mi hai dato.
Spero di riuscire a metterli in pratica!!!
Ah, la TTable mi serviva per memorizzare i dati immessi. Spero sia
giusto.....
Grazie ancora Enrico.


 giusto.....
xche ti serve una ttable?
A

> xche ti serve una ttable?
Perchč quando devo salvare un nuovo record, solo con un Ttable posso
editare, modificare e salvare i dati.
NON E' COSI ???
Ciao


 Ciao
Query1.Edit; // mi mette in edit
Query1.FieldByName('CAMPO').AsString := 'Pippo';  // scrivo nella tabella
Query1.Post; //salvo la tabella
Si usa nello stesso modo della table....
PS se non usi le chacedupdate hai messo la proprietą requestlive a TRUE ???
^_Goblin_^

 PS se non usi le chacedupdate hai messo la proprietą requestlive a TRUE ???
Grazie, ogni giorno imparo qualcosa!!!
Siete tutti comprensivi, anche con un principiante come me.
Grazie e a presto!!!
