Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sporo izvršavanje kverija nad linkovanom tabelom

[es] :: Access :: Sporo izvršavanje kverija nad linkovanom tabelom

[ Pregleda: 2866 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.static.sbb.rs.



+13 Profil

icon Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 12:03 - pre 172 meseci
Može li neko da mi pojasni sledeću situaciju:

Kveri koji je na slici u prilogu se izvršava nad linkovanom ODBC tabelom.

Ta tabela je je Union View, na strani DB Servera, tj. spojeni podaci iz 20 različitih prodajnih objekata. U pitanju je ADS, ali pretpostavljam da bi sličan metod i sa MS SQL, ili bilo kojom drugom bazom. Kveri služi da izborom šifre artikla sa jedne forme, u drugoj formi prikaže prodate količine po radnjama, u određenom vremenskom periodu...

E sad, kada izraz za kriterijum izgleda kao na slici (podvučen crvenim), kveriju treba da se izvrši dobrih 20-30 sekundi, a ako u kriterijum ručno upišem šifru, rezultat je tu za delić sekunde ?!? U čemu je štos?

Takođe sam zaključio da ako napravim Unbound subformu za prikaz rezultata kverija, pa na On Focus šifre artikla postavim sledeći kod:
Code:
Parent.frmProdato.Form.RecordSource = "SELECT * FROM qryProdato WHERE [SIFRA] = '" & Me.[SIFRA] & "'"

pomenuti kveri izuzetno brzo i lepo radi, ali mi to nažalost ne rešava sve probleme, jer u nekim slučajevima mi je neophodno da uzima vrednost šifre sa forme, jer se upotrebljava i u drugim upitima itd...
Prikačeni fajlovi
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
109.106.224.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 12:22 - pre 172 meseci
Prvo probajte da vam Linkovan pogled bude skroz pripremljen, tj da vec u sebi ima grupisan uslov, tako da u Query-ju samo zadate uslov iz Forme.
E sada posto vama problem nastaje prilikom postavljanja uslova iz forme, cesto mi se desavalo da sama forma iz koje postavljam Uslov, nekim a meni ne znanim razlogom je ostecena, te kreiranjem nove forme problem je cudom nestao.
 
Odgovor na temu

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.static.sbb.rs.



+13 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 13:05 - pre 172 meseci
Linkovan pogled ima delimično grupisan uslov, tj. prodate količine su grupisane u RCNRACUnion tabeli za svaki datum računa ponaosob, da bih mogao da ih naknadno sumiram u kveriju, za izabrani opseg od datuma do datuma.

I meni se čini da tu negde leži problem, pošto kreiranje nove forme nije pomoglo, ali nisam uspeo da smislim ništa pametnije :(


[Ovu poruku je menjao smal dana 05.03.2010. u 14:17 GMT+1]
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 13:42 - pre 172 meseci
Je lim qryProdato izvor za neku subformu koja je bound za glavnu formu ili je to nezavisan kveri koji pozivas odenkud kad ti zatreba?
 
Odgovor na temu

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.static.sbb.rs.



+13 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 13:56 - pre 172 meseci
Pa, nezavisan je, tj. taj mi kveri treba da bih rezultate uključio u drugi kveri, koji prikazuje stanje zaliha, datume poslenjeg ulaza i izlaza robe po radnjama itd.
Ali ni taj kveri nije boundovan za subformu, već podatke prikazujem sličnim kodom kao što sam gore naveo.
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
109.106.224.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 14:24 - pre 172 meseci
Da li je problem too sto je u prilozenom primeru?
Prikačeni fajlovi
 
Odgovor na temu

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.dynamic.sbb.rs.



+13 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 15:21 - pre 172 meseci
Čini mi se da je primerom odlično pogođena situacija kakvu imam. Razlike su u tome, ako dobro vidim, što je u relaciji među tabelama uključeno Referential Integrity i što je kveri boundovan za formu.

ADS nažalost ne podržava RI nad DBF bazama kakve koristimo u firmi, ali mislim da to ne bi trebalo da predstavlja problem, pošto su tabele samo za čitanje, a kad sam kveri vezao za formu, izgleda mi se da radi primetno brže nego ranije, ali je opet bar 10 puta sporiji nego kada ga pozivam iz gore navedenog koda....
 
Odgovor na temu

Trtko
Koprivnica

Član broj: 69494
Poruke: 695
*.adsl.net.t-com.hr.



+8 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 17:54 - pre 172 meseci
Makni iz queria NR:Ucase(MID(......

Pa probaj onda pustiti pa nam javi koliko je brz

Po mome ti oni 100% koče sql upit, za pivo se kladimo


Pozdrav
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
109.106.224.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 17:59 - pre 172 meseci
Pretpostavljam da Access u vasem slucaju zelite da koristite radi analiza i pravljenja sumarnih izvestaja nad podacima koji se nalaze u fajlovima koji su dbf formata. Ako je to tako onda bi bilo dobro da definisete model podataka u Access-u koji bi svakako bio normalizovan i samim tim omogucio blagodeti relacionog modela. Navedeno bi imalo smisla ako biste te upite i izvestaje cesto koristili, sto znaci ako bi nasli kompromis u vremenu jer nekada se to isplati raditi a nekada i bas ne. Moram priznati da sam cesto u nameri da nesto optimizujem izgubio dosta vremena :-(

ps: Trtko, iako ne pijem pivo slazem se da ga popijemo ... :-)
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
109.106.224.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 18:36 - pre 172 meseci
Koliko n-torki ima u tabeli ili pogledu pod imenom RCNRACUnion ?
 
Odgovor na temu

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.dynamic.sbb.rs.



+13 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 19:31 - pre 172 meseci
@Trtko:
Nije tu problem:( Taj naziv polja sam ionako samo privremeno stavio za neki izveštaj što mi je trebao. Nisam morao ni da ga prikažem u primeru, isto je i bez njega. A što se piva - uvek sam za, i bez klađenja :) Ionako si ga x puta do sada zaslužio svojim postovima :)

@Zoran.Eremija :
Ma jeste, to ja u stvari učim Access pokušavajući usput da pomognem sebi i kolegama u rešavanju svakodnevnih problema :) Inače nisam programer niti sam za to plaćen. Samo, situacija je zaguljena zato što se kod mene koriste DBF tabele i Advantage Database Server, pa moram nekako iznađem način kako da pomirim ta sva tri sveta, da bih nekako došao do rešenja (DBF tabele često nemaju ni PK i tako to)...

Citat:
Zoran.Eremija: Koliko n-torki ima u tabeli ili pogledu pod imenom RCNRACUnion ?


Ako dobro razumem pitanje, ima ih 20. Pogled sam kreirao SQL izrazom koji izgleda kao:
Code:
SELECT '04534' AS SIFRAD, SIFRA_ART, SUM(KOL_RCN) AS SUMKOL, DATUM_RCN
FROM K15RCNZ INNER JOIN K15RACUNI ON (K15RCNZ.KUP_RCN = K15RACUNI.MAG) AND (K15RCNZ.BRRC_ZAG = K15RACUNI.BRRC_RCN)
GROUP BY SIFRA_ART, DATUM_RCN

UNION ALL
SELECT '04535' AS SIFRAD, SIFRA_ART, SUM(KOL_RCN) AS SUMKOL, DATUM_RCN
FROM K16RCNZ INNER JOIN K16RACUNI ON (K16RCNZ.KUP_RCN = K16RACUNI.MAG) AND (K16RCNZ.BRRC_ZAG = K16RACUNI.BRRC_RCN)
GROUP BY SIFRA_ART, DATUM_RCN

i tako za svih 20 radnji. Da pojasnim, Računi se sastoje iz dve tabele - KxxRCNZ je zaglavlje, a u KxxRACUNI su stavke računa.
Polje KxxRCNZ.KUP_RCN sadrži šifru kase na kojoj je prodat artikl, a isto to je i u KxxRACUNI.MAG, samo se, eto, iz nekog razloga različito zovu...

E da, RCNRACUnion već sad sadrži preko 700.000 recorda, a tek je početak godine :)
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
109.106.224.*

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 19:59 - pre 172 meseci
Pretpostavio sam tako nesto. E sada ako je ucenje Access-a u pitanju onda je sve ok sem tog nerazjasnjenog problema sporosti tj razlicite brzine odziva. Imajuci u vidu na dimenzije tj. kolicine podataka u samo jednoj tabeli svakako bih preporucio o debelom razmisljanju definisanja centralne baze za potrebe prikupljanja podataka sa razlicitih lokacija koja bi bila u najmanju ruku SQL Server s time da bi model baze trebalo dobro definisati u pravcu analize sa svim pravilima koja su podrzana relacionim modelom i Access kao front-end. Resavanje ovog problema iziskuje dobar nivo iskustva i znanja u projektovanju i analizi.
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 21:26 - pre 172 meseci
Kazes da kveri brzo radi kad 'rucno' uneses parametar, kao i kad uradis

Parent.frmProdato.Form.RecordSource = "SELECT * FROM qryProdato WHERE [SIFRA] = '" & Me.[SIFRA] & "'"

Da izbegnes nagadjanje, pokusaj ovako:

Napravi novi kveri, qryProdatoFilter. Neka ima ovakav SQL: "SELECT * FROM qryProdato "

Sada dodaj dugme na formu, koje ce da ima ovaj kod:

Code:
 
Private Sub cmdOpenQueryProdateFilter_Click()

Dim db As DAO.Database
Dim qDef As QueryDef

On Error GoTo ERROR_CODE:


SET db = GetCurrentDB
SET qdef = db.querydefs(qryProdatoFilter)

qdef.SQL = "SELECT * FROM qryProdato WHERE [SIFRA] = '" & Me.[SIFRA] & "'"

DoCmd.OpenQuery QueryNAme:=qryProdatoFilter

Exit_Here:
On Error Resume Next
Set db = Nothing
Set qDef = Nothing

ERROR_CODE:

Select Case Err.Number
    Case Else
        MsgBox "Error " & Err.Number & vbCrLf & Err.description, vbCritical, "cmdOpenQueryProdateFilter_Click()Error"
End Select
Resume Exit_Here


End Sub



Objekt qdef citaj kao 'snimljeni kveri'. Ti ovim kodom menjas SQL za taj kveri, isto kao da si rukom upisao sifru, sto je radilo vrlo brzo.

Ovim si napravio jos jednu 'brzu' verziju kverija, koju sada mogu drugi kveriji da koriste. Kveri ces videti tek kad kliknes dugme.

Mozes probati ovaj kod na raznim eventima. Recimo, OnCurrent na formi je dobar kandidat da podesi ovaj kveri svaki put akd se pomeris sa rekorda na rekord. Ovo radi na svim vrstam formi, datasheet, contin. i 'obicnim'. Ako radis sa OnCurrent, nije lose da pre cele price, ngde odmeh posle DIM ubacis jedno If Me.NewRecord exit sub, jer za novi rekord ne postoji jos Me.[SIFRA] (Current se desava pre nego bilo sta otkucas)

Nadam se da je pomoglo




 
Odgovor na temu

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.dynamic.sbb.rs.



+13 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom05.03.2010. u 23:15 - pre 172 meseci
Citat:
Zidar: Nadam se da je pomoglo:-)


Šta reći :) Zidar je kralj, car i monarh!

Jeste, pomoglo je, nogekako! Sve radi ultra brzo i lepo:)
Isključio sam ERROR_CODE i DoCmd.OpenQuery, da ne iskače po ekranu, i dodao par navodnika što su falili, i mnogo mi se sviđa kako se ponaša :)

Evo, sad sam nakačen sporom VPN vezom od kuće na server u firmi, a aplikacija leti, ništa nije sporije nego u lokalnoj mreži :) Milina!

Hvala Ti, kao i ostalima koji su pomogli!
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom08.03.2010. u 14:32 - pre 172 meseci
Drago mi je da je pomoglo.

Razmisljao sam o razlogu zasto je sporo. Rekao si da je sporo kad imas subformu, vezanu ili nevezanu, svejedno je. Razlog je subforma. Ako na formi imas subformu, kad se ucitava forma, prvo se ucita subforma, sa svim njenim podacima = tvoj UNION query koji se izvrsava van Accesa. Pa s tek onda ucitavaju podaci za glavnu formu. Ako je subforma vezana, onda se podaci na subformi filtriraju, tako da s epokaze samo ono sto se moze povezati sa glavnom formom. Sve ovo se desava pre nego sto vidis ista na ekranu. Redosled ucitacvnja podataka se ne moze promeniti. Pomoglo bi ako bi zamenio subformu recimo list boxom, koji nema nikakav record source. Znaci, ucitava se prazan list box. Onda, na formin On Load, dodelis rekord souce list boxu => pokazace se rekordi koji odgovaraju formi u momentu kad korisnik vidi formu.

Naravoucenije : pazite se subformi
 
Odgovor na temu

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.dynamic.sbb.rs.



+13 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom08.03.2010. u 17:37 - pre 172 meseci
OK ima logike. Sad su mi stvari dosta jasnije, ali ne mogu reći da sam zbog toga srećniji ;) Ako moram da se pazim subformi, to je kao da moram da se pazim i samog Accessa :( 'Oćureći, bez subformi nema smisla...

Nego, da iskoristim priliku kad si već tu :)... vidim da (već bivši) kolega, koji programira u C#, često koristi Stored Procedure za rešavanje sličnih problema. Procedure sam, bar one najjednostavnije, uspeo nekako da kreiram, i umem da ih pozovem kroz Pass-Through kveri, ali ne znam kako da prosledim parametre (na pr. datum ili sl.) iz Accessa.

Mislim, čitao sam kao neke tekstove po Netu i tako to, ali nije mi baš jasno:) Može li ukratko kako se to uopšte radi, i dal' ima smisla takav pristup?
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom08.03.2010. u 21:09 - pre 172 meseci
Citat:
'Oćureći, bez subformi nema smisla...
Ovo je veoma tacno. Subforme su razlog sto je Access najbolji alat za programiranje front enda za baze podataka. Tacka. Medjutim, i med je gorak kad se mnogo jede. Subforma je skup objekat i ako nema sustinske potrebe za subformom, onada je treba izbegavati. Svrha subforme je da omoguci unos podataka. Ako je za citanje, list bopx sluzi sasvim OK, ili otvaranje posebne datasheet forme kojoj se salju parametri da vrati sto manje rekorda.

Citat:
Procedure sam, bar one najjednostavnije, uspeo nekako da kreiram, i umem da ih pozovem kroz Pass-Through kveri, ali ne znam kako da prosledim parametre (na pr. datum ili sl.) iz Accessa.

Mislim, čitao sam kao neke tekstove po Netu i tako to, ali nije mi baš jasno Može li ukratko kako se to uopšte radi, i dal' ima smisla takav pristup?
Ponovo pun pogodak. Stored procedure JESU najbolji nacin da s epristupa podacima na bazi SQL tipa. Ako znas da ih pises, pozivanje je lako - kroz pass thru kveri. Kako posalti parametre? U ADO mislim da mogu da se posalju parametri, bas kao parametri, ali ja to ne radim, malo sam zastareo. Koristim pass thru kverija i to ovako:

Za svaku proceduru, u nekom modulu napravim malu funkciju koja radi sve sto mi treba. Parametri funkcije odgovaraju parametrima stored procedure. Kad pozovem funkciju, posaljem joj parametre. FUnkcija sagradi string koji kad na kraju izgleda bas kao SQL narednba za pozivanje stored procedure sa rucno unetim parametrima....

Prinicp je slican onome sto smo vec radili - menjamo SQL za qdef. U ovom slucaju SQL je poziv izvrsenja stored procedure, 'EXECUTE procMyproc....'

Evo ti primer:

Code:

Function ShowSchoolSummary_SQL(intProjectID As Integer, _
                            lngSchMident As Long, _
                            strLAng As String, _
                            strQueryName As String) As Boolean
                            
'Sample call: ? ShowSchoolSummary_SQL(51,14,"F","StudentSummary_Phase")
'               ? ShowSchoolSummary_SQL(51,19,"E","StudentSummary_Phase")

Dim strSQL As String
Dim db As DAO.Database
Dim rs As DAO.Recordset

Const QUERY_NAME  As String = "qrySchool_Summary"
'qrySchool_Summary je pass thru, returns records = true


On Error GoTo ERROR_CODE:

'Ovako treba da izgleda strSQL
'Execute spSDC_ConstructStudentSummary
'            @ProjectID=52
'        ,   @SchMident=19
'        ,   @Lang='E'
'        ,   @QryName='StudentSummary_Phase'     --- 187


'Ajde da sagradimo strSQL:
strSQL = " Execute dbo.spSDC_ConstructStudentSummary " _
    & vbCrLf & " @ProjectID = " & intProjectID _
    & vbCrLf & ", @SchMident =" & lngSchMident _
    & vbCrLf & ", @Lang ='" & strLAng & "'" _
    & vbCrLf & ", @QryName ='" & strQueryName & "'"

'lepo je videti strSQL, da moze da se testira    
    Debug.Print
    Debug.Print strSQL
    Debug.Print
    
    'Update qdef - ovo moze da se uradi i u samoj funkciji, ovde
'Medjutim , ja koristim funkciju (imas je ispod)
    If Not UpdateQdef(strQdefNAme:=QUERY_NAME, strSQL:=strSQL) Then
        GoTo ERROR_CODE
    End If
 
'Pozovi pass thru kveri, ako hoces, ne more, moze da se veze i na formu ako hoces, ali POSLE izvrsenja ove funkcije   
    DoCmd.OpenQuery QueryName:=QUERY_NAME, view:=acViewNormal, datamode:=acReadOnly
    
    
ShowSchoolSummary_SQL = True

Exit_Here:

    On Error Resume Next
    Exit Function

ERROR_CODE:
    ShowSchoolSummary_SQL = False
    Select Case Err.Number
        Case Else
            MsgBox "Error " & Err.Number & vbCrLf & Err.description, vbCritical, "ShowSchoolSummary_SQL Error"
    End Select
    Resume Exit_Here
    
End Function


Code:

Function UpdateQdef(strQdefNAme As String, strSQL As String) As Boolean
'Purpose: set up pass through query

'
Dim db As DAO.Database
Dim qDef As QueryDef

On Error GoTo ERROR_CODE:

Set db = GetCurrentDB
Set qDef = db.QueryDefs(strQdefNAme)
qDef.sql = strSQL



Exit_Here:
On Error Resume Next
Set db = Nothing
Set qDef = Nothing

Exit Function

ERROR_CODE:
UpdateQdef = False
Select Case Err.Number
    Case Else
        MsgBox "Error " & Err.Number & vbCrLf & Err.description, vbCritical, "UpdateQdef Error"
End Select
Resume Exit_Here


End Function







 
Odgovor na temu

smal
Slobodan Maljković
Kragujevac, Srbija

Član broj: 228672
Poruke: 286
*.dynamic.sbb.rs.



+13 Profil

icon Re: Sporo izvršavanje kverija nad linkovanom tabelom08.03.2010. u 22:04 - pre 172 meseci
Ja samo mogu još jedanput da se debelo zahvalim na prilogu! Siguran sam da će ovo biti dragoceno i korisno i ostalim posetiocima foruma, pre ili kasnije.
Meni će sigurno trebati neko vreme dok ne ukapiram mehanizam i prilagodim kod ADS sintaksi, ali sad imam odakle da počnem :)

 
Odgovor na temu

[es] :: Access :: Sporo izvršavanje kverija nad linkovanom tabelom

[ Pregleda: 2866 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.