[ Alien @ 29.03.2002. 17:33 ] @
Napisao sam SQL naredbu koja mi iz baze u DBGrid-u pokaze npr. sve sta je radnik PERO uradio u periodu od 01/02/2002 do 01/03/2002 i to super radi evo koda

Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add ('select * from servis');
Query1.Sql.Add ('where radnik = "'+Edit1.text+'" and datum between "'+MaskPocetak.Text+'" and "'+MaskKraj.Text+'" ');
Query1.Open;

Sta treba jos da dopisem i na koji nacin da to povezem sa komponentom Label ili DBLabel da bi mi ona prikazala ukupanu vrijednost kolone IZNOS za tog radnika i taj period. Nadma se da sam bio razumljiv
[ overflow @ 29.03.2002. 22:53 ] @
Najbolje (najefikasnije) resenje je:

Code:
with query1 do
begin
close;
sql.clear;
sql.add(
'SELECT IME, PREZIME, POSAO, SUM(IZNOS) IZNOS FROM SERVIS
WHERE RADNIK = :Rad AND DATUM BETWEEN :dat1 AND :dat2
GROUP BY IME, PREZIME, POSAO;');
params[0].name:='Rad';
params[0].value:=edit1.text;
params[1].name:='Dat1';
params[1].value:=MaskPocetak.text;
params[2].name:='Dat2';
params[2].value:=MaskKraj.text;
Open;
label1.caption:=fieldbyname('IZNOS').AsString;
end;


(eventualno formatiraj taj izlaz u label1)
[ Riste Pejov @ 30.03.2002. 10:57 ] @
ja cu opet da napravim malu zavrzlamu oko najefikasnijed resenja
overflow je prezentirao prilicno efikasnog i bezbolnog resenja,
ali ipak mislim da ima boljeg.
kao prvo, njegovo resenje treba ponovo inicijalizirati parsiranje query-ja
prolistati ponovo bazu, i tek onda presmetati sumu.
veci deo ovih koraka mogu se izbeci, posto vec imamo recordset koji nam sadrzi
sve rekorde iz baze koje nam trebaju. Ja bih jednostavno prosao kroh
taj postojeci recordset i sumirao kolonu.

alienov kod:
Code:

Query1.Close; 
Query1.Sql.Clear; 
Query1.Sql.Add ('select * from servis'); 
Query1.Sql.Add ('where radnik = "'+Edit1.text+'" and datum between "'+MaskPocetak.Text+'" and "'+MaskKraj.Text+'" '); 
Query1.Open; 
//funkcija za presmetanje sumu iznosa:
with query1 do
begin
DisableControls; // da se dzaba ne update-uje grid i ostale db aware kontrole
first;
sum:=0;
while not eof do
begin
suma:=suma+fieldbyname('iznos').asFloat; //moze i integer
next;
end;
Label1.caption:=floattostr(suma);
EnableControls; 
end;

[ overflow @ 30.03.2002. 16:43 ] @
Definitivno si me naterao da uradim test sa 50.000 recorda sa tvojim i mojim kod-om ... licno-jedva cekam rezultate ... potrudicu se da ih postavim koliko vec sutra (posto danas nisam nesto sa vremenom).
[ Riste Pejov @ 30.03.2002. 18:24 ] @
kad sam pre napisao post, samo sam brzaka procitao overflow-ov post.
i hteo bi da se izvinim, posto je overflow stvarno u pravu.
Njegovo resenje JE brze, a i bolje.
[ Alien @ 31.03.2002. 23:14 ] @
u svakom slucaju hvala vam obadvojici!