Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

SQLQuery/Dataset Filter Like 2016 júl. 28 12:52 #2062

  • JohnnyK
  • JohnnyK profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 78
  • Köszönetek: 16
Egy általános OnFilterRecord eljárás megoldhatja az ékezetes betűk gondját is:
procedure Form1.SQLQueryFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := Pos('akármi', DataSet.FieldByName('field1').AsString) > 0;
end;
// majd az adott helyen:
SQLQuery.Filter := '';  // ez maradjon csak üres
SQLQuery.Filtered := True;  // Ennél le fog futni a fenti feltételkereső
Mindenesetre tervezői megfontolást igényel, hogy melyik a gyorsabb és hatékonyabb:
  1. Nagyobb adathalmazt egyszer lekérdezni, majd utána mindenféle utólagos szűrési feltételeket módosítani, és így megjeleníteni a a sok adatból kiszűrt részleteket, vagy
  2. az egyes szűrési feltételeket az SQL WHERE részébe helyezni, ami kevesebb adathalmazt mozgat majd át, nem igényel utómunkát, cserébe szűrési szándék változtatásakor mindannyiszor le kell futnia egy SELECT lekérdezést.
Ha a szűrés feltételeit gyorsan kell tudni változtatgatni, akkor tényleg inkább az első, de minden más esetben talán inkább a második volna a célravezetőbb.

SQLQuery/Dataset Filter Like 2016 júl. 28 12:04 #2061

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Ez működik:
SQLQuery.Filter:=' field1= ''*' + param + '*'' ;' ;

De az ékezeteknél nem igazán. :)

SQLQuery/Dataset Filter Like 2016 júl. 28 11:00 #2060

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Üdv!
Meg lehet valahogy adni a DataSet/SQLQuery-nek, hogy LIKE szerűen filterezzen?
Pl.:
SELECT * FROM table WHERE field1 LIKE '%akarmi%';

A LIKE-ot nem fogadja el:
SQLQuery.Filter:=' field1 LIKE ''%' + param + '%'' ;' ;
SQLQuery.Filtered:=True;

Hibaüzenet: "field LIKE unknown"

  • Oldal:
  • 1