2010-10-25 13 views
3

Je développe actuellement une application qui utilise les bases de données de façon dynamique.Delphi ADO + marque-pages

ce qui signifie qu'il est conçu pour fonctionner avec n'importe quel db, à tout moment, et toutes les structures. Mon souci est que je souhaite "tagger" ou mettre en signet certains enregistrements, donc je vais devoir utiliser la propriété Filter pour faire une recherche, et à la fin, je souhaite supprimer le filtre, et être capable de chercher à travers les enregistrements mis en signet ...

Cependant, il semble que le signet ne fonctionne que tant que le filtre a été défini sur ce filtre spécifique, donc si je choisis mon second objet marqué, je reçois un enregistrement totalement différent de ce que j'attendais, J'ai fait un filtre, et mis en signet le premier enregistrement, lorsque je supprime mon filtre et que je vais au signet n ° 1, je vais tout de même passer à l'enregistrement n °. 1.

Y a-t-il un autre moyen de le faire? ou est-il nécessaire de le faire d'une manière différente?

espère que quelqu'un a ici une véritable solution à cette folle :)

Répondre

4

Un jeu de données Delphi pouvez marquer un seul enregistrement. TDataset.BookMark est l'espace réservé pour cet enregistrement mis en signet. Un signet créé pendant le filtrage de l'ensemble de données est valide une fois le filtre supprimé. Ainsi, si vous filtrez votre ensemble de données et que vous enregistrez un enregistrement dans un signet, supprimez le filtre et accédez à votre enregistrement de signet, vous devriez accéder au même enregistrement.

Si vous n'êtes pas sûr que votre signet est toujours valide, en particulier lorsque votre jeu de données est en cours de modification; Vous pouvez ensuite utiliser la méthode TDataset.BookmarkValid pour valider votre marque-page.

Si vous souhaitez avoir une liste de signets (pas un seul enregistrement mis en signet), vous devez les enregistrer dans une liste ou un tableau. Dans Delphi 2009 et versions plus récentes, le type de données TBookMark est défini comme TBytes. Dans les versions précédentes, TBookMark est défini en tant que chaîne. Ainsi, si vous utilisez une version de Delphi antérieure à Delphi 2009, vous pouvez utiliser une instance de TStringList pour enregistrer votre liste de signets. Si vous utilisez Delphi 2009 et plus, vous pouvez utiliser une instance de type générique TList (déclarée dans l'unité Generics.Collections) pour stocker la liste des signets.

Si vous utilisez DBGrid, DBGrid a une propriété appelée SelectedRows qui est de type TBookMarkList. Vous pouvez l'utiliser pour enregistrer une liste de signets des lignes sélectionnées dans la grille. Vous devez activer la sélection multiple dans les options de DBGrid.

+0

merci, je vais regarder dans ce :) – Plastkort