Witajcie,
Jeden z moich kolegów z pracy przyszedł zapytać jak w Delphi zamieniamy stringa na wyrażenie logiczne. W pierwszej chwili nie załapałem o co chodzi ale w dużym uproszeniu weźmy na przykład dowolną bazę danych: Tabela w niej x pól -> robimy na niej zapytanie
select * from tabela
Teraz mój kolega w aplikacji ma edit w którym można wpisać dowolny warunek /warunki ograniczające zakres rekordów czyli np.:
field2 > 0 and field3 <= 100 or field4 = true or field2 < 100 and (field3 > 100 and field4 = false)
W bazie danych wystarczy dokleić taki string do where i odpalić przez execute, a baza sama sobie to przekonwertuje na zapytanie, sprawdzi jego poprawność i zwróci listę wyników (nie iteresuje nas w tym wypadku SQLInjection). Sęk w tym, że kolega ma taką tabelę (nasz TStringGrid/TDBGrid) i musi to "przefiltrować" używając warunku z edita. Kolega ma to napisane w QT, a dane są z pliku więc niewiele mu pomogłem ale zacząłem się zastanawiać czy jest jakiś sposób aby zrobić to w delphi? Fakt można zrobić memtable i użyć metody filtered = true i filter = ... na np TFDQuery (FireDAC) pytanie co w przypadku gdy nie ma bazy, a dane wyświetlane są z pliku. Plik ma przykładowo 10gb danych i załadowanie całości do pamięci odpada. Trzeba zatem zrobić ręczne przeszukanie całego pliku rekord po rekordzie używając wskazanego w edicie filtra, jeśli spełnia założenia logiczne (rekord) to rzucamy go na ekran. Robił ktoś z was coś takiego? Jakie macie pomysły?