[ popmilan76 @ 03.12.2016. 13:40 ] @
Desilo mi se da je qreport isuvise spor,a nisu neki zahtevni upiti,kada to uradim u obicnoj tabeli,bude ok,ali na izvestaj,oko 10-tak sekundi i vise...
[ savkic @ 03.12.2016. 17:53 ] @
Jesi li probao da prodjes kroz sve recorde upita i opet je brzi od QR? Mozda ima previse strana ili nekih slika, nazalost tu mislim da nema sta mnogo da se uradi ako je sam QR spor, pokusaj sa novijom verzijom ili nekim drugim reportingom.
[ popmilan76 @ 03.12.2016. 19:32 ] @
ćSlika nemam,ali u tabeli je brzo i jedna strana je zua sada....
4
[ savkic @ 03.12.2016. 20:54 ] @
Jedna strana, pa to je onda do 50 rekorda, sto nije nista, QR sigurno tu nece prvaviti problem, nesto drugo te zeza.
[ captPicard @ 04.12.2016. 11:10 ] @
Daj kod kako puniš dataset i kako pozivaš qreport.
[ popmilan76 @ 04.12.2016. 15:21 ] @
Trri upita i to izgleda ovako


1

SELECT Klijenti.SifraKlijenta, Klijenti.Naziv, Meseci.MeseciID, Meseci.Mesec, Godine.Godina, Klijenti.Telefon, Klijenti.Telefon1 FROM Meseci, Godine, Klijenti
WHERE ((([godina]*100+[MeseciID])>=Year([DatumUnosa])*100+Month([DatumUnosa])))
ORDER BY Klijenti.SifraKlijenta, Godine.Godina, Meseci.MeseciID;


2

SELECT DISTINCT SveUplate.SifraKlijenta, SveUplate.Naziv, SveUplate.Telefon, SveUplate.Telefon1
FROM SveUplate LEFT JOIN Promet ON (SveUplate.Godina = Promet.Godina) AND (SveUplate.MeseciID = Promet.Mesec) AND (SveUplate.SifraKlijenta = Promet.KlijentiID)
WHERE (((Promet.Mesec) Is not Null) AND ((Promet.Godina) Is not Null));


3

SELECT SveUplate.SifraKlijenta, SveUplate.Naziv, SveUplate.Mesec, SveUplate.Godina, SveUplate.Telefon, SveUplate.Telefon1 FROM SveUplate
LEFT JOIN Promet ON (SveUplate.SifraKlijenta = Promet.KlijentiID) AND (SveUplate.MeseciID = Promet.Mesec) AND (SveUplate.Godina = Promet.Godina)
WHERE (((Promet.Mesec) Is Not Null) AND ((Promet.Godina) Is Not Null)) and SveUplate.SifraKlijenta =:SifraKlijenta
ORDER BY SveUplate.SifraKlijenta, SveUplate.Godina, SveUplate.MeseciID;

i jedan event u before print,gde puni mesece i godine koji nisu placeni.....


[ Rapaic Rajko @ 05.12.2016. 20:34 ] @
A kako ide kod tog event-a? Jesi li probao bez njega?

Pozz
[ popmilan76 @ 05.12.2016. 21:16 ] @
Event izgleda ovako i ne mogu bez njega:

procedure TRepIzvestaj.QRSubDetail1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
var
strTempMemo : string;

begin

with neplaceno do
begin
Close;

Open;

First;
qrmemo1.Lines.Clear;

While not EOF do
begin
strTempMemo := strTempMemo + Fields[2].AsString + ' - ' + Fields[3].AsString + ' , ';


Next;

end;

QRMemo1.Lines.Add(strTempMemo);
end;
end;

end.


On puni qrmemo1 sa podacima gde izlazi meseci i godine....
[ savkic @ 05.12.2016. 21:50 ] @
Hm, proveri prvo koliko se puta poziva taj BeforePrint event, to moze biti veci broj i kako ti svaki put otvaras/zatvaras tabelu to moze da koci.
Dobio si lepo pitanje, sta se desava bez njega, uradi probu (zanemari sta treba da vidis) i gledaj vreme izvrsavanja, ako je stampa brza onda je tu problem.
Ako je do te tabele onda dataset otvori jednom (van QR eventa) i nju koristi za sve operacije.

[ popmilan76 @ 05.12.2016. 22:05 ] @
Bez njega je to nesto brze,ali moram ga imati zbog punjenja memo-ane znam kako drugacije...Kada ga aktiviram u Access,odmah mi izlazi,rec je o upitu gde izlazi oko 6000 recorda...
[ captPicard @ 06.12.2016. 14:33 ] @
Mislim da si uhvatio krivi pristup. QuickReport je dizajniran da radi sa datasetovima i tu je veoma moćan. Siguran sam da taj izvještaj možeš dobiti kombinirajući datasetove i datasourceve, bez da to radiš u beforeprint eventu. Beforeprint ti se inače po defaultu događa 2 puta mi se čini prije nego se report pojavi na ekranu, a moguće i više puta ako je u nekom bandu.

Dakle, pogledaj primjere kako koristiti master detail u quickreportu.

Primjer: quickreport dataset dataSetPodaci
groupheader band dataset dataSetPodaci
detailsband dataSetPodaciNeplaceno

itd...

dakle dva dataseta, jedan datasource (dataSourcePodaci). property dataset od dataSourcePodaci je dataSetPodaci a property datasource od dataSetPodaciNeplaceno je dataSourcePodaci. I onda u upita dataSetNeplaceno koristiš parametar, npr. WHERE NEKOPOLJE = :NEKOPOLJE koji se nalazi u dataSetPodaci.
[ popmilan76 @ 06.12.2016. 19:31 ] @
Da,to je u redu da su mi podaci vertikalni,ali ako su horizontalni ne znam drugacije....sem ovako......
podaci mi izlaze ovako
petar petrovic
januar 2016,februar 2016,mart 2016...itd


a ne treba mi horizontalno
[ savkic @ 06.12.2016. 22:42 ] @
Kako ces da prikazes podatke je nebitno, horizontalno/vertikalno, tvoj je izbor. Mi ti pricamo o datasetu i nepotrebnom otvaranju x puta. Imas dve mogucnosti
a) da prihvatis brzinu kakva je i nista ne menjas
b) da otvoris jednom dataset (tipa master/detail relacija) i koristis ga za ceo report, racunam da je izmena reda velicine 10 linija koda.
[ popmilan76 @ 07.12.2016. 08:48 ] @
Ja bih to prikazao kao sto kazes po drugoj opciji,ali ne znam kako...jedino sto sam uspeo jeste ovako....kako qrdbtexdt da nateram da pise horizontalno,jedino sam uspeo ovako preko qrmemo.....i ovim eventom...
[ savkic @ 07.12.2016. 13:21 ] @
Memo je u redu, i punjenje u eventu ovde pricamo o nepotrebnom otvaranju/zatvaranju dataseta u eventu, to je uzrok usporenja.
[ Rapaic Rajko @ 08.12.2016. 11:05 ] @
Cek malo...

Pogledao sam tvoje upite gore, i video sam u trecem uslov/parametar :SifraKlijenta.
Pitanje: ima li nekog upliva taj parametar u upitu 'neplaceno' koji otvaras/zatvaras/citas u event-u BeforePrint? Ako NEMA, sto to ne iscitas u string na pocetku stampe celog report-a, koji (string) posle samo kopiras u Memo u event-u?

Pozz
[ captPicard @ 08.12.2016. 11:18 ] @
Problem je bio u LEFT JOIN-u u upitu koji je bio povezan na datasource gdje je vukao sifraklijenta. Kada sam mu to promjenio na klasičan JOIN izvještaj se izvrši za možda 1-2sec. Ali da budem iskren nije mi točno jasno zašto je toliko drastično sporiji left join (makar nisam puno proučavao).
[ savkic @ 08.12.2016. 14:00 ] @
> Problem je bio u LEFT JOIN-u u upitu koji je bio povezan na datasource gdje je vukao sifraklijenta. Kada sam mu to promjenio na
> klasičan JOIN izvještaj se izvrši za možda 1-2sec. Ali da budem iskren nije mi točno jasno zašto je toliko drastično sporiji left
> join (makar nisam puno proučavao).

@popmilan76, molim te pisi kvalitetnija pitanja, u prvoj poruci (i naslovu teme) si napisao da je QR spor dok taj upit van QR se izvrši brzo. Iz rešenja je očigledno da nisi koristio iste upite, da smo to znali na početku sigurno bi se brže i lakše došlo do rešenja.

LEFT JOIN uzima celu tabelu dok INNER JOIN samo matching slogove, verovatno je tabela veca ili Access ne optimizuje dobro upite.
[ captPicard @ 08.12.2016. 14:05 ] @
Citat:
savkic: > Problem je bio u LEFT JOIN-u u upitu koji je bio povezan na datasource gdje je vukao sifraklijenta. Kada sam mu to promjenio na
> klasičan JOIN izvještaj se izvrši za možda 1-2sec. Ali da budem iskren nije mi točno jasno zašto je toliko drastično sporiji left
> join (makar nisam puno proučavao).

@popmilan76, molim te pisi kvalitetnija pitanja, u prvoj poruci (i naslovu teme) si napisao da je QR spor dok taj upit van QR se izvrši brzo. Iz rešenja je očigledno da nisi koristio iste upite, da smo to znali na početku sigurno bi se brže i lakše došlo do rešenja.

LEFT JOIN uzima celu tabelu dok INNER JOIN samo matching slogove, verovatno je tabela veca ili Access ne optimizuje dobro upite.


Znam to, ali razlika je doslovno 1-2s prema 10-15s, po meni je to puno previše. Nisam gledao koliko slogova mu ima tabela, ali mislim da nije preko 5000. Tako da po meni lako moguće da tu i access igra ulogu. Probao sam taj upit sa left join izvršiti u accessu, ali samo samo jednim sifraklijenta i izvršio ga je trenutno, pa nisam niti pokušavao sa svim sifraklijenta, ali na kraju se ipak ispostavilo da je u njemu problem.
[ popmilan76 @ 08.12.2016. 15:37 ] @
Isti upit je radjen u reportu i tabeli,to jeste istina,i isti taj upit u accessu se izvrsi oidmah,samo nece u qreportu....u tabeli,manje od sekunde,a u reportu mu treba 12 sekundi...i captipicard mi je pobrisao nepotrebna polja,posto sam koristio neka koja mi nisu trebala,tako da je i to malo pravilo problemupite sam pravio u access,jer mi je tako lakse,i samo ih prneo u report i delphi
[ popmilan76 @ 09.12.2016. 22:59 ] @
Definitivno je problem u LEFT JOIN upitu,ali kako da ga izbegnem,sta je alternativa tome?
[ captPicard @ 10.12.2016. 10:07 ] @
A zašto ti treba left join?
[ popmilan76 @ 10.12.2016. 16:14 ] @
Treba mi za ovo.....slicno je onome sto smo radili,samo je ovo neplaceni racuni.....


SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu left join promet on (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
[ captPicard @ 10.12.2016. 18:41 ] @
Makni LEFT JOIN i stavi INNER JOIN. Makni ON i stavi na njegovo mjesto WHERE, a WHERE koji imaš sada zamijeni sa AND. Ako sam dobro shvatio upit, trebalo bi ti dati isti rezultat, nema potrebe za left join-om u ovom upitu. Provjeri pa vidi.

Inače, kod left joina (i kod join općenito) je bitno paziti na polja koja uzimaš u upitu, ne uzimati ono šta ne treba, i where dio je bitan, pogotovo indeksiranje.
[ popmilan76 @ 10.12.2016. 19:40 ] @
Izlazi mi Syntax Errorr in from clause...
[ captPicard @ 10.12.2016. 19:54 ] @
Napiši ovdje upit koji si napisao.

Ne znam da li access podržava, ali možeš probati FROM table1 as ZaNaplatu, tabela2 as Promet WHERE
[ popmilan76 @ 10.12.2016. 20:11 ] @
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu inner join promet where (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
and (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;


[ captPicard @ 10.12.2016. 20:16 ] @
Da, ja sam zeznuo. Kada koristiš join moraš imati ON. Probaj u ovo vratiti ON i vrati where gdje je bio, pa javi da li je išta brže.

Code (sql):
SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu INNER JOIN promet ON (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) IS NULL) AND ((Promet.Godina) IS NULL)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;
[ captPicard @ 10.12.2016. 20:42 ] @
Šta ti znače tabele ZaNaplatu i Promet. Objasni malo šta je koja.
[ popmilan76 @ 14.12.2016. 22:07 ] @
Da li za ovaj left join,postoji alternativa,da se nekako drugacije to postavi,posto jos nisam nasao resenje....


SELECT ZaNaplatu.Mesec, ZaNaplatu.Godina
FROM ZaNaplatu left join promet on (ZaNaplatu.SifraKlijenta = Promet.KlijentiID) AND (ZaNaplatu.MeseciID = Promet.Mesec) AND (ZaNaplatu.Godina = Promet.Godina)
WHERE (((Promet.Mesec) Is Null) AND ((Promet.Godina) Is Null)) AND ZANAPLATU.SIFRAKLIJENTA =:SIFRAKLIJENTA
ORDER BY ZaNaplatu.SifraKlijenta, ZaNaplatu.Godina, ZaNaplatu.MeseciID;


ZaNaplatu je query,a promet je tabela
[ salvaric @ 15.12.2016. 09:19 ] @
Mozda ti i jeste problem sto pozivaš tabelu i query od access-a u query-iju, pokusaj da napravis query od tabela (statickih podataka).

Ne vidim razlog zbog kog pozivaš tabelu i query iz accessa, napravi jedan query upit iz Delphi-ja koji će ti odraditi to što tražiš, uzeti podatke iz željenih tabela. Ti otvaraš query query-jem, nisam siguran da je to pametno rešenje, izvodljivo jeste al zahteva dosta vremena, još ako ga stavljaš u neku petlju koja ga ponavlja više puta, smrt.

[Ovu poruku je menjao salvaric dana 15.12.2016. u 13:02 GMT+1]
[ captPicard @ 15.12.2016. 18:56 ] @
Nisam se puno zabavljao, ali left join mu je stvarno jako jako jako spor. Indekse ima na dobrim poljima koliko vidim, where dio nije neki zahtjevan, a ima samo 700-800 zapisa. Ili je access stvarno toliko u klincu ili ima neka caka a da ju ja ne znam ili sam nešto previdio.
[ popmilan76 @ 15.12.2016. 20:44 ] @
Da,pa video si i sam...stvarno cudno,a pre sam imao mnogo vise upisa i sve je radilo kako treba,a ovo je bas bez veze....