Mimo iż ja bym to zrobił zupełnie inaczej (generyki + metody abstrakcyjne) to cieszę się, że udało Ci się znaleźć rozwiązanie swojego problemu.
Się dokleję, bo zawsze mnie nurtuje dlaczego ktoś wymyśla koło na nowo.
A więc - dlaczego chcesz wymyślać koło na nowo, skoro to które jest idealnie nadaje się do konkretnego zastosowania?
Rozumiem, że nie rozumiesz jak to działa (a wystarczy: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Preprocessing_Command_Text_(FireDAC)).
Ale to nie znaczy, że Twoja propozycja ma jakikolwiek sens w tym konkretnym przypadku. Moim zdaniem, nie ma żadnego.
A dla pytacza; ten sam link i akapit "Escape Sequences".
I tak trochę OFF Topic - można sobie własne funkcje rejestrować w tym mechanizmie, które mogą robić cokolwiek co będzie Wam potrzebne.
Poza tym, ten mechanizm obsługuje również wyrażenia, które są wykorzystywane przy filtrowaniu, agregacjach, wartościach domyślnych dla pól, itd.
Np. ja potrzebuję, aby dla zadanego pola, system sam generował mi wartość numeru dokumentu przy dodawaniu nowego wiersza; zatem w Field.DefaultExpression
piszę dGetNumber('SOP-ORDER', 1)
i już. Oczywiście zarejestrowałem sobie funkcję w FireDAC o nazwie dGetNumber
, która to robi.
To bardzo wygodny mechanizm - bez metod abstrakcyjnych, generyków i Bóg wie czego tam jeszcze...