Suite

Utiliser ArcObjects pour rechercher ou obtenir le nombre (IQueryFilter) à partir du jeu de sélection ?

Utiliser ArcObjects pour rechercher ou obtenir le nombre (IQueryFilter) à partir du jeu de sélection ?


Cela ne semble être un problème qu'avec les géodatabases personnelles (back-end MS Access)… Je dois rechercher dans un jeu de sélection existant pour remplir un ICursor. Mon objectif principal est de tester si mon IQueryFilter récupère plus d'un enregistrement mais qu'il n'y a pas de propriété de comptage sur l'ISelectionSet en utilisant un QueryFilter comme il y en a sur une classe d'entités (IFeatureCLass:FeatureCount(IQueryFilter). Donc, afin de tester si mon QueryFilter récupère plus d'un enregistrement dans un jeu de sélection Je dois utiliser la méthode de recherchepFeatureSelection.SelectionSet.Search(pQueryFilter, True, selCursor)utiliser le curseur de recyclage pour la vitesse, puis passer à la ligne suivante et à nouveau à la ligne suivante pour savoir si plus d'une ligne a été récupérée à l'aide de mon QueryFilter. (Cela semble terriblement inefficace mais fonctionne lorsqu'il n'est pas utilisé sur PGDB FC)

Cela fonctionne parfaitement lorsqu'il est utilisé avec des géodatabases fichier et des fichiers de formes (je personnalise la clause where en fonction du type d'espace de travail de la classe d'entités), mais lorsque je le fais sur une géodatabase personnelle, la méthode ISelectionSet:Search échoue. Ce qui est étrange, c'est qu'il n'échoue qu'après avoir réussi plusieurs fois auparavant. Les requêtes que j'affecte à la WhereClause du filtre de requête sont très simples (c'est-à-dire"[MASTER_ID] = '56061-UNPAT-28'")

L'erreur que je reçois est "Erreur HRESULT E_FAIL a été renvoyée à partir d'un appel à un composant COM." Numéro d'erreur -2147467259

Pour réitérer, le même code fonctionne bien lorsqu'il est utilisé avec la classe d'entités FGDB et Shapefile, ce n'est que sur PGDB (Access) qu'il échoue de cette façon et seulement après avoir été exécuté pendant un certain temps.

J'ai finalement besoin d'obtenir un nombre dans un ensemble de sélection qui satisfasse une requête simple. S'il existe un moyen alternatif ou plus efficace de le faire, veuillez partager…


Lorsque vous avez terminé avec unICurseurou alorsIFeatureCurseur, vous devez libérer l'objet COM sous-jacent. Cela peut être fait viaReleaseCOMObjectou mieux encore,FinalReleaseCOMObject. Faites-le à plusieurs reprises si vous êtes dans une boucle où vous passez le mêmeICurseurréférence à plusieurs reprises àISelectionset.Search.