Citat:
medixsa: Pitanje 1
Nerazumijem kako SQL daje netacan rezulat,odnosno ukupni iznos necega i on je umanjen za "1" - "jedan" broj ?
Moj kod:
QUpit.SQL.Clear;
QUpit.SQL.Add('select * from RacunP r join StavkeRacuna s on r.BrojRac = S.ID where (Datum between "'+DateToStr(DatumOd.Date)+'" and "'+DateToStr(DatumDo.Date)+'")');
QUpit.Open;
LBroj.Caption := inttostr(QUpit.RecordCount);
// Drugi upit samo iznos oepratora
QUpit1.SQL.Clear;
QUpit1.SQL.add('select Sum(IznosSUM) as IznosSUM,SUM(SumPDVr) as sumPDVr,SUM(sumbezPDVr) as sumbezPDVr from RacunP.dbf r join StavkeRacuna s on r.BrojRac = S.ID where (Datum between "'+DateToStr(DatumOd.Date)+'" and "'+DateToStr(DatumDo.Date)+'")');
QUpit1.Open;
LBroj.Caption := inttostr(QUpit.RecordCount);
IzvjOperator.Preview;
QUpit.RecordCount ti vraca broj ucitanih slogova u komponentu. Umanjen je za 1 jer je tako napravljen, vecina counter-a u VCL je tako napravljena.
Dakle, ne daje ti SQL ovde odgovor, nego VCL.
Budi pazljiv sa RecordCount, jer neke komponente ne ucitavaju sve slogove odmah, nego deo po deo, i onda ti RecordCount ne vraca ukupni broj slogova, nego samo koliko je ucitano.
U SQLu koristi select count(*) from..., i to ti daje tacan broj (nije umanjen za 1).
Napomena: mislim da je bolje datumske parametre preko parametara a ne direktno sa DateToStr(DatumOd.Date). Razlog - regional settings moze biti podesen tako da ti ovaj program nece raditi, tj. datum nece biti ubacen kako SQL zahteva (moze biti 01/03/07, 01.03.2007, ... i jos niz kombinacija).
Primer:
QUpit.SQL.Clear;
QUpit.SQL.Add('select * from RacunP r join StavkeRacuna s on r.BrojRac = S.ID where (Datum between :datOd and :datDo)');
QUpit.Prepare;
QUpit.parambyname('datOd').asDateTime:=DatumOd.Date;
QUpit.parambyname('datDo').asDateTime:=DatumDo.Date;
QUpit.Open;