@Lookze nie myślałem, że Mike Shkolnik będzie pisał takie bzdury... zakładki (bookmarks) nie mają nic a nic wspólnego z "database engine" i są w całości zarządzane przez TDataSet.
A więc nie jest to błąd w Twoim Database Engine, a problem polega na tym jak ów SMDBGrid korzysta z tych bookmarków.
A korzysta z nich źle, zapisują jako zaznaczenie wiersza w gridzie bookmark rekordu, który nie istnieje bo go odfiltrowałeś.
Możesz to zrobić ręcznie, ale będziesz musiał sam to zrobić przez:
- Przed nałożeniem filtru zapamiętaj listę bookmarków, które są zaznaczeniem w gridzie - powinna być do tego odpowiednia metoda (SelectedRows czy jakoś tak)
- Czyścisz zaznaczenie w gridzie
- Nakładasz filtr na TDataSet
- Sprawdzasz czy zapamiętane bookmarki są dalej ważne
- Jeśli dany bookmark jest
Valid, to zaznaczasz ten wiersz w gridzie z poziomu kodu
i tyle.
@woolfik To nie jest podobny problem, to jest zupełnie inny problem i dotyczy zupełnie innej warstwy. I nie, wcale nie musiałeś przepisywać danych do TClientDataSet, a mogłeś rozwiązać ten problem inaczej i lepiej.
A tezy zawarte w tym wątku w ogóle są.... ciekawe ;-) Tam jest sporo racji, ale nie wszystko jest prawdą. Np,. to że "W przypadku wielojoinowych zapytań ADO sobie z tym nie radzi" to nieprawda. ADO nie radzi sobie z automatu, ale można to obsłużyć przez obsługę odpowiedniego zdarzenia.
No i oczywiście lepiej by było użyć czegoś innego niż ADO, a jeśli ADO to tego:
http://cc.embarcadero.com/item/15727