Nu-mi dau seama de filtru - în ibquery și ibdataset

Nu pot să-mi dau seama cu filtrul În IBQuery și IBDataSet.

Pentru aceste componente, proprietatea specificată nu este implementată.
Utilizați OnFilterRecord.

În sensul că nu este implementat: -0







Și cum să folosiți
> OnFilterRecord

Nu fii prost, ci scrie o cerere umană
SELECT.
DIN.
UNDE

Nu fii prost, ci scrie o cerere umană
SELECT.
DIN.
UNDE

Problema este că după filtrare este necesar să se socotească suma pe trei tabele. A trecut prin
> SELECT.
> FROM.
> WHERE
dar funcționează foarte încet. M-am gândit că, dacă filtrezi, va fi mai rapid.

Prin filtru nu este mai rapid, dar este necesar să faceți o interogare și să utilizați gruparea (Grup de).

> Soloviev
> onFilterRecord:
>.
> Acces: = <условие>
>.

Nu prea înțeleg ce este accesul și cu ce se mănâncă.

Cearta nu este acces, ci accepta.
procedura Tdm.ibDataSetFilterRecord (DataSet: TDataSet;
var Acceptați: Boolean);
începe
Acceptați: = DataSet.FieldByName ("Field") AsString = "la la" și
DataSet.FieldByName ("Câmp") AsString = "bu bu";
se încheie;

Duc nu arata ceva. Am scris așa cum am spus (bine, aproape așa cum se spune) pe butonul împins IBDataSet1.Filtered: = true; După aceea, în DBGrid apare o singură linie și una este goală. Cum se trateaza?

Și dacă acceptăm scrieți Accept: = IBDataSet1.FieldByName ("Field") AsString = "%"; apoi pe ideea ar trebui să fie deduse toate înregistrările, sau NU?







nr. Va va da unde aveti Field = "%", toate campurile sunt Accept = true;

Este clar! C "%" Sunt din disperare. Am copiat valoarea din tabel, l-am lipit în condiția onFilterRecord, și (DBGrid) nu-mi arată nimic. Sau poate totul din registru?

procedura TForm1.IBDataSet1FilterRecord (DataSet: TDataSet;
var Acceptați: Boolean);
începe
Acceptă: = IBDataSet1.FieldByName ("CUSTOMERSF") AsString = "MERCULES";
se încheie;

procedura TForm1.Button2Click (expeditor: TObject);
începe
IBDataSet1.Filtered: = adevărat;
se încheie;

dar scriu slab
IBDataset1.Close;
IBDataset1.SelectSql.Clear;
IBDataset1.SelectSql.Add ("SELECT *" +
„DIN

t "+
"WHERE t.FIO =: CustomFio");
IBDataset1.ParamByName ("CustomFio") AsString: = Edit1.Text;
IBDataset1.Open;
trebuie să găsești o înregistrare nada sau nu.
sunteți în căutarea unei implementări?


> procedura TForm1.Button2Click (expeditor: TObject);
> începe
> IBDataSet1.Filtered: = true;
> sfârșit;

De ce? Nu este necesar.

Și cum altfel să apelăm peFilterRecord?

Poate că este necesar să preparafrazăm întrebarea. Să spunem că am mai mulți șoferi. Fiecare șofer poate avea mai multe garaje, iar în fiecare garaj nu există o mașină. Este necesar să se calculeze consumul de benzină etc. pentru fiecare șofer și ieșirea de decodare pentru fiecare garaj, mașină. Anterior, când mesele erau folosite, totul era mai ușor. Au existat două solicitări, iar după ce a fost folosită un filtru pentru cel de-al doilea. Ie la prima solicitare mă ridic la numărul de garaj 1, și văd autoturismele corespunzătoare №1.1, mașinile №1.2, etc.
Nu mă cert, toate acestea pot fi realizate prin
> SELECT.
> FROM.
> WHERE
Dar se dovedește prea mult pentru că Condiția este complexă și interogarea returnează mai multe câmpuri, drept rezultat, aproximativ două secunde sunt cheltuite pentru fiecare înregistrare. Și acum imaginați-vă că există peste 1000 de mașini în flotă.

Duc, nu a ieșit ceva prin stocate :-(







Trimiteți-le prietenilor: