[ medixsa @ 08.04.2008. 23:31 ] @
Pozdrav svima !!!

Delphi 7

Zaista sam dosadan i ubi SQL pitanjima ,I am sorry !!!

Imam dva pitanja ako je moguce odgovor ?


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;


Pitanje 2

Kada pokrenem program sa bazom a baza koristi SQL upit u direktoriju gdje se nalazi program odnosno baza ,program
mi sam kreira ili izbacuje SQL fajlove neke temp npr:doslovno _QSQL933......_QSQL934...._QSQL955 itd da li su ovo
privremeni fajlovi koji trenutno koristi SQL za lakse manipulisanje podacima ili je to nepravilan kod SQL i nesto trece...

Pitanje br.1 mi je prioritet za odgovor

Hvala svima na odgovorima ?








[ schild @ 09.04.2008. 06:02 ] @
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;
[ medixsa @ 09.04.2008. 14:51 ] @
Hvala ti na ponudjenom odgovoru.Ne znam da li sam shavtio dovoljno odgovor, govorite o RecordCount koliko prikaze u komponentim, mene interesuje kako dobijem iznos (sumPDV) umanjen za jedan,a SQL prikaze sve slogove iz tabele ,vidim
da SQL ne dobro sabira a daje tacan broj slogova u redovima.Izvini ako dajem pogresan komentar na Vas ogovor..


Hvala puno !!!!
[ schild @ 09.04.2008. 20:15 ] @
Sorry, zbunio si me sa RecordCount-ovima...
Ima li ona tabela na slici neke veze sa pitanjem? Ja sam proverio digitronom i meni izgleda da dobro sabira
Mislis na problem sa zaoukruzivanjem decimalnih mesta mozda?

[ medixsa @ 09.04.2008. 22:41 ] @
iznos "sumPDV" nije tacan, iznos je umanjen za (1) jedan.Jedino sto mogu da kazem da Windowsow kalkulator ne valja ,ako ustanovim da windows ne racuna, definitivno prelazim na Linux,jer Linux nema bug-a niti propusta u radu,izuzev sto je ogranicen ...mala sala naravno

Display fromat sa stavio ovako : "0.00" i sad ne znam kako se to desava

Hvala


[ savkic @ 09.04.2008. 23:28 ] @
> iznos "sumPDV" nije tacan, iznos je umanjen za (1) jedan.Jedino sto mogu da kazem da Windowsow kalkulator ne valja ,ako ustanovim da windows ne racuna,
> definitivno prelazim na Linux,jer Linux nema bug-a niti propusta u radu,izuzev sto je ogranicen ...mala sala naravno
> Display fromat sa stavio ovako : "0.00" i sad ne znam kako se to desava

Tebe je mnogo teško razumeti, hajde počni iz početka. Koristiš SUM agregatnu SQL funkciju i rezultat koji ona daje se razlikuje od ručnog zbira?
Ako je tako pošalji koja je to suma i sabirci (koristi select * from tabela), nemoj koristiti formatiranje tako da se prikažu što tačniji iznosi (na više decimala ako ih ima).
[ medixsa @ 09.04.2008. 23:50 ] @
DA, funkcija SUM mi vraca negativan rezultat

Nema mi smisla da ne zaokruzujem iznos onda bi iznos izgledao dosta velik npr. sumPDV = 1,230909 lupam itd..


kao prvo pozdrav za Vas

Imam dvije tabele jedna je master druga details

Na jednoj formi (izvjestaji ) sam postavio Query1( "QUpit") i sa SQl spojio details tabelu u master preko BrojRac = ID

Primjer:
'select * from RacunP r join StavkeRacuna s on r.BrojRac = S.ID'


Polja:
object tblStavkeRacunaIznosSUM: TFloatField
FieldName = 'IznosSUM'
DisplayFormat = '0.00'
FieldKind = fkData
end
object tblStavkeRacunasumPDVr: TFloatField
FieldName = 'sumPDVr'
DisplayFormat = '0.00'
FieldKind = fkData
end
object tblStavkeRacunasumbezPDVr: TFloatField
FieldName = 'sumbezPDVr'
DisplayFormat = '0.00'
FieldKind = fkData
end

Ova polja nisu definisana u dizajnu kao: CalcFields
vec vrijednost dobivao od drugih polja kao sto su: sumPDv , bezPDV, Iznos

sumPDv , bezPDV, Iznos : ova polja su definisana kao: CalcFields i njihova vrijednost se proslijedujuje poljima
IznosSUM
sumPDVr
bezPDVr
vidi u gore kodu !!!

Hvala




[ Nemanja_666 @ 10.04.2008. 00:43 ] @
Greska je prilikom zaokruzivanja.
recimo imamo ovako, imas:

1.001
1.002
1.004

ti dobijas u poljima:

1.00
1.00
1.00

jer zaokruzujes na dvije decimali.
ali kad racunas sumu dobijas (1.001 + 1.002 + 1.004 = 1.007) a to je priblizno (zaokruzeno na dvije decimale) 1.01