[ popmilan76 @ 29.03.2017. 20:37 ] @
Imam qreport sa dva kverija i detail band i subdetail,gde treba da mi izlista neke usluge po korisnicima....da izgleda ovako
petar petrovic
hemijsko ciscenje 5 dinara.....
mirko mirković
susenje 10 dinara ....

Ja sam to napravio,i radi mi,ali sa tom greskom da mi izlista i one korisnike koji nemaju nista od usluga....Gde gresim?
[ captPicard @ 29.03.2017. 22:50 ] @
Nemoj uzimat u query šifre korisnika iz tabele korisnika nego iz tabele iz koje vučeš podatke, pa ti se neče pojavljivati prazni. (osim ako nije neki drugim problem posrijedi)
[ popmilan76 @ 30.03.2017. 13:04 ] @
Bice da je nesto drugo posredi,to kod mene ne moze jednostavno

polje u tblkorisnici je tblklijentiid
a polje iz koje vucem podatke je sifraklijenta
[ savkic @ 30.03.2017. 14:07 ] @
Koristis TQuery komponente za prikaz u reportu? Prosto u sam kveri koji lista sve korisnike ubaci uslov da postoje podaci iz tabele usluga, tako na kraju ce ostati samo oni klijenti koji imaju promet.

Code:

select 
 KL.*
from 
  KLIJENTI KL
where
  EXISTS (select 1 from USLUGE USL where USL.SIFRAKLIJENTA = KL.KLIJENTID)
[ popmilan76 @ 30.03.2017. 20:13 ] @
Ja sam to radio sa dva kverija,u prvom sam stavio
select * from tblklijenti


u drugom


select * from tblhemijsko
where tblhemijsko.sifraklijenta =:sifraklijenta;


naravno,drugi ima i dodatak u vidu join-a....
[ savkic @ 30.03.2017. 20:25 ] @
> Ja sam to radio sa dva kverija,u prvom sam stavio select * from tblklijenti

U taj treba da dodas where sekciju kao u mom primeru. Dakle da prikazes samo klijente koji imaju podatke u tblhemijsko.
[ popmilan76 @ 30.03.2017. 21:51 ] @
I to sam uradio,query1 u celosti
SELECT DISTINCT TblHemijsko.SifraKlijenta, TblKlijenti.NazivKlijenta
FROM TblKlijenti LEFT JOIN TblHemijsko ON TblKlijenti.TblKlijentiID = TblHemijsko.SifraKlijenta
WHERE (((TblHemijsko.Faktura)="ne") AND ((TblHemijsko.Status)="Placeno"))
ORDER BY TblHemijsko.SifraKlijenta;


i query2 u celosti

SELECT TblHemijsko.SifraKlijenta, TblKlijenti.NazivKlijenta, TblHemijsko.DatumNaplate, TblUsluge.NazivUsluge, TblRoba.NazivRobe, TblHemijsko.Kolicina, TblHemijsko.Ukupno
FROM TblUsluge INNER JOIN (TblRoba INNER JOIN (TblKlijenti INNER JOIN TblHemijsko ON TblKlijenti.TblKlijentiID = TblHemijsko.SifraKlijenta) ON TblRoba.TblRobaID = TblHemijsko.SifraRobe) ON TblUsluge.SifraUsluge = TblHemijsko.SifraUsluge
WHERE TblHemijsko.Faktura ="ne" AND TblHemijsko.Status ="Placeno" AND TblHemijsko.Sifraklijenta =:tblklijenti.tblklijentiid ;

Master je query1 a details je query2

iz prve vucem nazivklijenta a iz druge nazivuslkuge,nazivrobe,ukupno...
[ savkic @ 30.03.2017. 22:07 ] @
Dajes kontradiktorne informacije i kverije.
Tvoje originalno pitanje je "radi mi,ali sa tom greskom da mi izlista i one korisnike koji nemaju nista od usluga....Gde gresim? "

Odgovor na to pitanje je, u kveriju ti se nalaze podaci o klijentima koji nemaju promet, ako ne zelis da ih vidjas moras ih eliminisati. To mozes uraditi putem where klauzule i EXISTS operatera (slao sam primer).
Za ove kverije koje si sad poslao se to radi na drugaciji nacin, koriscenjem INNER joina umesto LEFT joina.
[ popmilan76 @ 30.03.2017. 22:18 ] @
Savkicu,ako mi verujes uradio sam sa svim mogucim primerima,i left i inner join i isto je...Najgore,sto imam gotove aplikacije koje sam uradio na slican nacin i tamo rade...ovde mi je razlika samo,sto mi polja nisu ista u dva kverija,jedno je sifraklijenta,a drugo tblklijentiid...
[ savkic @ 30.03.2017. 23:07 ] @
Negde gresis, gde ne znam dok ne probam na podacima. Uzmi jednog klijenta koji se pojavljuje a ne bi trebalo i otkrij zasto kveri koji koristis nije dobar.
[ popmilan76 @ 31.03.2017. 08:54 ] @
Probao sam,i sada desava se sledece da se ne pojavljuju svi iz tabele klijenti,vec svi iz tabele promet,i oni koji zadovoljavaju i oni koji ne zadovoljavaju uslov,s tim sto mi ovaj drugi bira podatke od datuma do datuma,i kada nema nista pojavi se samo klijenta nista u subdetail...Da li treba nesto u ovom qreportu da se podesi...
[ Rapaic Rajko @ 31.03.2017. 14:07 ] @
Citat:
popmilan76: I to sam uradio,query1 u celosti
SELECT DISTINCT TblHemijsko.SifraKlijenta, TblKlijenti.NazivKlijenta
FROM TblKlijenti LEFT JOIN TblHemijsko ON TblKlijenti.TblKlijentiID = TblHemijsko.SifraKlijenta
WHERE (((TblHemijsko.Faktura)="ne") AND ((TblHemijsko.Status)="Placeno"))
ORDER BY TblHemijsko.SifraKlijenta;


i query2 u celosti

SELECT TblHemijsko.SifraKlijenta, TblKlijenti.NazivKlijenta, TblHemijsko.DatumNaplate, TblUsluge.NazivUsluge, TblRoba.NazivRobe, TblHemijsko.Kolicina, TblHemijsko.Ukupno
FROM TblUsluge INNER JOIN (TblRoba INNER JOIN (TblKlijenti INNER JOIN TblHemijsko ON TblKlijenti.TblKlijentiID = TblHemijsko.SifraKlijenta) ON TblRoba.TblRobaID = TblHemijsko.SifraRobe) ON TblUsluge.SifraUsluge = TblHemijsko.SifraUsluge
WHERE TblHemijsko.Faktura ="ne" AND TblHemijsko.Status ="Placeno" AND TblHemijsko.Sifraklijenta =:tblklijenti.tblklijentiid ;



Prvi query: imas select from TblKlijenti (master); drugi query: select from TblUsluge (detail)

Prvi query: LEFT JOIN TblHemijsko ON TblKlijenti.TblKlijentiID = TblHemijsko.SifraKlijenta, a treba INNER JOIN TblUsluge ON TblKlijenti.TblKlijentiID = TblUsluge.SifraKlijenta.
Vidim da ti u prvom query-ju treba i tabela TblHemijsko; dodaj jos ovo LEFT JOIN TblHemijsko ON TblKlijenti.TblKlijentiID = TblHemijsko.SifraKlijenta ispod prvog join-a i trebalo bi da proradi.

Pozz
[ popmilan76 @ 31.03.2017. 22:10 ] @
Ovo bas ne razumem,jel to znaci da u prvom kveriju imam i inner join i left join....
[ Rapaic Rajko @ 03.04.2017. 13:03 ] @
Da, znaci upravo to. oba join-a u master select-u.
Jesi li probao?
[ popmilan76 @ 03.04.2017. 13:25 ] @
Od silnog probanja,uspeo sam sa jednim queryem,i meni to radi...evo kako...
RepIzvestaj.adoquery1.Close;
RepIzvestaj.adoquery1.SQL.Clear;
RepIzvestaj.adoquery1.SQL.Add('SELECT * FROM TblUsluge ');
RepIzvestaj.adoquery1.SQL.Add('INNER JOIN (TblRoba INNER JOIN (tblklijenti INNER JOIN TblHemijsko ON tblklijenti.TblKlijentiID = TblHemijsko.SifraKlijenta) ON TblRoba.TblRobaID = TblHemijsko.SifraRobe) ON TblUsluge.SifraUsluge = TblHemijsko.SifraUsluge');
RepIzvestaj.adoquery1.SQL.Add('where TblHemijsko.Status = "Placeno" AND TblHemijsko.Faktura = "ne" ');
RepIzvestaj.adoquery1.SQL.Add('and TblHemijsko.DatumNaplate BETWEEN :pocetak AND :kraj');
RepIzvestaj.adoquery1.Parameters.ParamByName('pocetak').Value := DateToStr(datetimepicker1.Date);
RepIzvestaj.adoquery1.Parameters.ParamByName('kraj').Value := DateToStr(datetimepicker2.Date);

RepIzvestaj.adoquery1.Open;

Mada mi ovo nije resenje iz razloga,sto kada imam istog klijenta,a razlicite dane,onda oni idu posebno,pa mi se desava da ih imam dva....

[Ovu poruku je menjao popmilan76 dana 03.04.2017. u 14:41 GMT+1]