Răspunsul la întrebarea nr. 31176

Filtrarea datelor

A apărut o problemă în utilizarea filtrării în DBGridEh. O întrebare similară pe care am găsit-o în căutare, dar nu am putut găsi răspunsul la aceasta. Prin urmare, îmi public întrebarea.






Lucrez la D7 cu FireBird 1.5 prin IBX. În ajutorul pentru EhLib sunt date explicații privind utilizarea STFilter. Am făcut totul așa cum a fost scris, și anume: Am instalat toate proprietățile legate de filtrare, așa cum se arată în exemplu, a adăugat EhLibIBX la utilizări, dar filtrul nu funcționează. Am încercat să utilizez filtrarea locală și de server cu modificările corespunzătoare din SQL (unde / * Filter * / 1 = 1), am încercat să instalez IBQuery.Filtered: = Adevărat cu filtrarea locală. Rezultatul este unul - nimic nu funcționează. Și nici măcar IBQuery.SQL.Text nici măcar nu schimbă IBQuery.Filter. Pe EhLib în sine, nu există plângeri; demo funcționează corect.
În această privință, întrebarea: ce greșesc sau cine poate împărți o secvență clară de acțiuni: de unde să se înregistreze și ce domenii să stabilească?
Și întrebarea suplimentară: este posibil să se ocupe de filtru nu prin Enter, ci prin schimbarea șirului de filtre?

Urmăriți răspunsurile la această întrebare prin RSS

Pentru filtrarea nu prin Enter'u și prin alegerea unui șir în STFilter, vom scrie următoarea linie o singură dată

De fapt, filtrarea DBGridEh pentru sistemul DBMS Interbase funcționează. Ați făcut totul corect: a inclus un link către EhLibIBX în modul, puneți proprietatea STFilter.Visible în True. Dar probabil că nu am citit foarte bine certificatul (ca și mine). Cred că filtrarea nu a funcționat pentru tine, pentru că o am. În certificat se scrie:






"Când grila este configurată pentru filtrarea pe server, un obiect special construiește o expresie pentru clauza WHERE a șirului SQL DataSet. El încearcă să găsească o linie care începe cu expresia cuvântul cheie „/ * Filtru * /“ (Puteți schimba această expresie cheie, folosind o SQLFilterMarker variabilă globală) în SQL-expresie și adaugă o expresie pentru a filtra după cheia în aceeași linie. Deci, interogarea SQL trebuie să conțină o linie care începe cu '/ * Filter * /'. De exemplu:
'selectați *
din tabelul1
unde
/ * Filtru * / 1 = 1 '»
Aceasta este, trebuie să fie înțeleasă literalmente. Pentru a găsi un obiect special al liniei care începe cu expresia cheie „/ * Filtru * /“, această linie ar trebui să înceapă numai cu / * Filtru * / 1 = 1 „și, prin urmare, nu trebuie să existe spații de conducere. Am scris următoarele:
......
unde
/ * Filtru * / 1 = 1.
Și, bineînțeles, linia nu a fost recunoscută. Ce pot vedea prin punerea Breakpoint în procedura ApplyFilterSQLBasedDataSet (modul DBUtilsEh) în momentul filtrării. La serviciu, mi sa spus că nu este convenabil să monitorizăm constant absența lacunelor din cereri și să-i cerem să remedieze acest neajuns. Am redus ușor procedura EhLib ApplyFilterSQLBasedDataSet și acum linia care indică necesitatea de filtrare poate începe cu orice număr de sonde :-)))). Îți dau un exemplu de cod.
Varianta mea de procedură:

filtrare va trebui să scrie în EhLibIBX nici un indiciu că, atunci când acesta este conectat direct de filtrare va funcționa :)

Pachetul EhLib are un dosar DataService
Prescrierea modul EhLibIBX modul în care EhGrid, sortare de mai multe coloane apar în cazul în care On DBGridEh.SortLocal: = Adevărat, dar filtrul va trebui să se joace trebuie să aibă mai întâi vom stabili DBGridEh.STFilter.Visible: = true;
DBGridEh.STFilter.Local: = Adevărat;
după care, un pic pentru a corecta modulul EhLibIBX, astfel încât filtrarea funcționează după cum doriți,
Este posibil să fie necesar să modificați DBUtilsEh.
PS:
Folosesc modulul EhLibCDS ca exemplu al regulilor EhLibFIB și se pare că toată lumea lucrează

Pagina întrebărilor selectate ale mesei rotunde.







Articole similare

Trimiteți-le prietenilor: