Search  
Friday, February 28, 2020 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  filtru...
 filtru
 
 8/17/2005 10:54:55 PM
User is offlineAdrian Gerlan
608 posts
1st




filtru
 (N/A)
Am o baza de date cu 30000 de inregistrari afisata intr-un grid, si un text box cu ajutorul caruia fac filtrare (dupa un anumit camp) folosind metoda "InteractiveChange". Prin apasarea unui buton, gridul respectiv il micsorez ca inaltime (de la 400 la 50) pasul fiind=1 incercand sa obtin un efect de miscare. Atat timp cat baza e nefiltrata, efectul merge OK. Cand incep sa filtrez, cu cat rezultatul acestei actiuni este mai mic (ca nr de inregistrari rezultate...) cu atat efectul de miscare se incetineste pana la a ajunge groaznic de suportat (dureaza 2 minute daca in grid mai raman sub 20 de inregistrari afisate). Nu inteleg, de ce face asa !?!
AdiG
 8/17/2005 11:59:23 PM
User is offlineanonymous
0 posts


Re: filtru
 (N/A) Modified By anonymous  on 8/17/2005 11:01:28 PM)
Asta se intampla din cauza ca aplicarea unui filtru este o operatie care consuma resursele calculatorului. Eu te sfatuesc sa nu mai faci filtrarea aia pe interactivechange pentru ca acest lucru inseamna ca pentru fiecare tasta apasata se aplica un nou filtru, si trebuie sa intelegi ce se intampla: daca tu apesi a el incepe sa aplice filtrul si sa se micsoreze gridul, dar pana sa se termine aceasta operatie tu mai apesi o tasta si inca una pentru ca sa zicem ca vrei sa scrii alin, asta are ca rezultat aplicarea filtrului de 4 ori si aceste operatii se aplica succesiv nu se aplica doar pentru ultima tasta apasata. Asa ca ai putea sa faci filtrarea pe valid-ul textbox-ului sau daca nu vrei ca user-ul sa plece de pe control pentru a filtra  poti face o smecherie cu un timer. Si anume pe interactivechange pornesti timer-ul thisform.tmFiltrare.interval = 1000 sa zicem, adica o secunda, si daca user-ul vrea sa scrie un cuvant intreg atunci ai mari sanse ca filtrul sa se aplice o singura data cand termina de scris.
 8/18/2005 12:03:48 AM
User is offlineanonymous
0 posts


Re: filtru
 (N/A)
Am uitat sa-ti spun. Daca adopti solutia cu timer-ul sa nu uiti in evenimentul timer sa faci this.interval = 0 pentru ca altfel cazi in acelasi pacat din care vrei sa scapi :).
 8/18/2005 9:51:22 AM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (N/A) Modified By Adrian Gerlan  on 8/18/2005 8:55:17 AM)

Nu e bine. Filtrul asa cum l-am facut functioneaza excelent. Butonul care miscoreaza gridul il apas dupa ce am terminat cu filtrul. Deci, introduc in text box sa zicem "alin", se filtreaza toate inregistrarile care contin cuvantul introdus fara nici o problema, instantaneu, iar abia apoi apas pe buntonul respectiv. Problema e ca, cu cat nr. de inregistrari rezultat este mai mic, cu atat timpul de realizare al micsorarii gridului este mai mare, ajungand la timpi mult prea mari pentru a fi acceptabili, in conditiile in care rezultatul filtrului este de ordinul zecilor de inregistrari. As atasa si un exemplu dar... baza are 4M arhivata.


AdiG
 8/18/2005 10:00:47 AM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: filtru
 (N/A)
Pai singura explicatie poate fi ca in timp ce se micsoreaza gridul programul mai face si altceva. Trebuie sa identifici ce. Si eu banuiesc ca filtrarea este de vina pentru acea intarziere. Daca nu apesi butonul de micsorare a gridului in cat timp se face filtrarea? Folosesti set filter sau select - sql? Din experienta iti pot spune ca set filter este mult mai lent decat select - sql.
Alex Dobrin
Algis Info
 8/18/2005 10:12:51 AM
User is offlineanonymous
0 posts


Re: filtru
 (Romania)
Sau poate in codul de micsorare al grid-ului, te raportezi cumva la numarul de inregistrari din grid mai exact imparti la numarul de inregistrari pentru a obtine pasul cu care se micoreaza gridul. Daca este asa atunci ar trebui sa faci altfel.
 8/18/2005 12:34:31 PM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (Romania)

Hehe... Va spun, filtrarea se face in timp real, adica foarte repede chiar daca folosesc "set filter to..".  Micsoarea gridului e problematica. Daca filtrul rezultat contine mai multe inregistrari 2-3 sute, secventa de micsorare merge bine. Daca filtrul rezultat contine putine inregistrari.... e grav. In juma' de ora ajung acasa si voi atasa un exemplu..


AdiG
 8/18/2005 12:44:37 PM
User is offlineanonymous
0 posts


Re: filtru
 (Romania)
K, hai pune un exemplu sa vedem si noi, ca tot dam cu ghicitul aici.
 8/18/2005 2:27:31 PM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (N/A) Modified By Adrian Gerlan  on 8/18/2005 2:57:57 PM)
Am micsorat bd la 1000 recn si tot apar intarzieri la efecte atunci cand filtrez a.i. sa ramana afisate in grid putine inregistrari. Tot aici sunt si 2 butoane flash care vor cate 2 click-uri pentru a executa comanda (atunci cand treci de la unul la celalalt) si nu inteleg de ce se intampla asa...
AdiG
 8/18/2005 2:38:58 PM
User is offlineanonymous
0 posts


Re: filtru
 (Romania)
Dar ataseaza si arhiva.
 8/18/2005 4:04:02 PM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (N/A)
In sfarsit am reusit sa atasez si arhiva. (.. probleme cu reteaua de net)
AdiG
 8/18/2005 5:25:08 PM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: filtru
 (N/A)
Se pare ca Fox-ul reface filtru dupa fiecare modificare a dimensiunii gridului atata timp cat mai are spatiu de afisat alte inregistrari (ramane spatiu dupa ultima inregistrare pentru a mai afisa si altele) si de aici toata intarzierea. Daca vrei sa continui sa lucrezi cu set filter pune inainte de modificarea dimensiunii gridului codul:
SELECT carti
LOCAL filtru_vechi
filtru_vechi = SET("FILTER")
SET FILTER TO
iar dupa ce ai terminat de modificat dimensiunea acestuia:
SET FILTER TO &filtru_vechi

Alex Dobrin
Algis Info
 8/18/2005 7:35:11 PM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (N/A)
Intr-adevar acum nu mai sunt intarzieri dar nu-mi place pentru ca apar pret de o clipa toate inregistrarile pe grid cand apas pe buton. Exista alta solutie tinand cont ca vreau sa pastrez text box-urile de filtrare cu "interactivchange" ?
AdiG
 8/18/2005 8:50:22 PM
User is offlineanonymous
0 posts


Re: filtru
 (N/A)
Atunci singura solutie este sa folosesti cursoare si in loc de set filter sa refaci cursorul la fiecare filtrare.
 8/18/2005 9:20:36 PM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: filtru
 (N/A) Modified By Alex Dobrin  on 8/18/2005 8:22:44 PM)
Sau poti sa vezi cate pozitii iti incap in grid (si poti sa detrmini asta in functie de inaltimea gridului si inaltimea row-ului) si daca numarul inregistrarilor din urma filtrarii este mai mic faci o conditie de filtrare care se aplica mai repede (de ex. determini pozitia inregistrarilor afisate - recno() si le afisezi doar pe acelea) astfel nu o sa mai ai intarzieri asa mari.

Ar fi un algorit de genul :

- daca numarul inregistrarilor afisate <= nr. inregistrari minim grid
- salvezi vechiul filtru ca in exemplul precedent (filtru_vechi = set("filter")
- generezi condtia pt. noul filtru (poate arata ceva de genul :
SET FILTER TO INLIST(RECNO(),2,6,10)
- micsorezi gridul (sau il maresti)
- revi la vechea conditie de filtrare

- daca numarul de inregistrari >nr. inregistrari minim grid
- poti sa faci direct micsorarea sau marirea


Dar eu nu as face asa. As folosii cursoare asa cum a sugerat Cristi mai ales ca daca baza de date este destul de mare set filter este mult mai lent decat select - sql.

Alex Dobrin
Algis Info
 8/18/2005 10:16:00 PM
User is offlinetatiana
7 posts


Re: filtru
 (Romania) Modified By tatiana  on 8/18/2005 9:21:36 PM)

Nu cumva trebuie si:

ADDCARTI.GRID1.REFRESH 

la finalul procedurii grid_carte_jos ? 


Tatiana
 8/18/2005 10:22:49 PM
User is offlinetatiana
7 posts


Re: filtru
 (Romania) Modified By tatiana  on 8/18/2005 9:24:37 PM)

 


Tatiana
 8/19/2005 9:16:41 AM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (N/A) Modified By Adrian Gerlan  on 8/19/2005 8:19:59 AM)

Imi era "frica" de raspunsul asta. :) Ciudatenia asta cu filtrarea in foxpro exista de pe vremea DOS-ului (si cu 'browse' face la fel). Ajuns la VFP9 am crezut ca so rezolvat sau ca imi scapa mie ceva..Voi reface, asa cum ati sugerat, folosind cursoare... Multumesc tuturor.

p.s.: In legatura cu butonul flash, a gasit cineva care-i motivul pentru care trebuie click-uit de 2 ori ?


AdiG
 8/19/2005 9:29:27 AM
User is offlineanonymous
0 posts


Re: filtru
 (Romania)
 nagualul wrote

p.s.: In legatura cu butonul flash, a gasit cineva care-i motivul pentru care trebuie click-uit de 2 ori ?

Ce-i ciudat cu flash-ul este ca la mine o citea de la primul click. Incearca sa-ti instalezi ultimaul flash player, sa vedem daca asta rezolva problema.

 8/19/2005 1:48:41 PM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (N/A)
Incearca cu exemplul asta in care sunt 4 butoane flash. La mine tot 2 click-uri sunt necesare...
AdiG
 8/30/2005 11:51:41 PM
User is offlineVladPop
250 posts
4th




Re: filtru
 (Romania) Modified By VladPop  on 8/30/2005 11:00:11 PM)
Cred ca am gasit solutia pentru problema ta cu flash-ul: incearca sa pui flash-ul intr-un container. La mine a functionat.

Tip: Cand lucrezi cu fisiere flash incearca pe cat posibil sa folosesti calea completa si nu doar cea relativa la directorul de lucru.

Ti-am atasat si un pdf cu metodele flash.ocx

Vlad Pop.
 8/31/2005 8:40:13 AM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (Romania)
Am rezolvat problema punand toate butoanele in acelasi flash, ceea ce nu e ok pentru ca nu pot avea mai multe flash-uri cu butoane, care sa raspunda la primul click, pe acelasi form. Varianta punerii lor in container, nu a mers la mine (trimite-mi un exemplu daca poti). Tu zici ca ai folosit flash.ocx, pe cand eu am folosit SwFlash.ocx. Nu stiu daca este diferenta intre ele...
AdiG
 8/31/2005 10:55:29 AM
User is offlineVladPop
250 posts
4th




Re: filtru
 (Romania)
Am gasit pe UT exemplul cu butoane in flash. Ai acolo si o clasa faina si la fel, tipul a pus butonul intr-un container. Uita-te peste ea si vezi daca iti este de folos.

Vlad Pop.
 8/31/2005 11:06:56 AM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (Romania)
Multam Vald. Din pacate problema se mentine. Am vazut deja exemplul acela si la fel, la trecerea de la un buton la altul trebuie sa apas 2 click-uri. Ori e bug ori e mai mult decat pot eu intelege. Ramane buna varianta in care toate butoanele sunt grupate intr-un singur flash.
AdiG
 8/31/2005 11:46:26 AM
User is offlineVladPop
250 posts
4th




Re: filtru
 (Romania)
Este destul de ciudat. Fiindca si eu trebuia sa dau 2 click-uri inainte, dar am rezolvat cu containerul. Mai mult, in exemplul de pe UT butonul din container merge din prima, iar cel fara container trebuie apasat de 2 ori.

Ramane problema la tine. Instaleaza ultima versiune de flash player de la macromedia. Mai incearca sa pui toate fisierele in acelasi director(prg,scx,swf etc.) si sa folosesti calea completa cand incarci un swf. Inearca sa pui swf intr-un form fara a mai face ceva la el. Vezi doar daca reactioneaza corect la click-uri.

Vlad Pop.
 8/31/2005 12:06:47 PM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (Romania)
Vlad, incearca pe exemplul care l-ai trimis, sa apesi prima data pe butonul fara container. O sa fie nevoie de 2 click-uri. Daca imediat apesi pe butonul din stanga (cel in container), la tine merge cu un singur click ?
AdiG
 8/31/2005 12:16:45 PM
User is offlineVladPop
250 posts
4th




Re: filtru
 (Romania)
Exact asta am spus si eu mai sus. Butonul fara container trebuie apasat de 2 ori, cel cu container doar o data.

Si sper ca ti-ai dat seama ca suntem waaayy off-topic :). Ar trebui sa deschizi un nou thread in sectiunea de activeX.

Vlad Pop.
 8/31/2005 12:25:06 PM
User is offlineAdrian Gerlan
608 posts
1st




Re: filtru
 (Romania)
Interesant. OK. Multam pentru ajutor.
AdiG
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  filtru...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement