Mehr

Verwenden von ArcObjects zum Suchen oder Abrufen der Anzahl (IQueryFilter) aus dem Auswahlsatz?

Verwenden von ArcObjects zum Suchen oder Abrufen der Anzahl (IQueryFilter) aus dem Auswahlsatz?


Dies scheint nur bei Personal Geodatabases (MS Access-Backend) ein Problem zu sein… Ich muss in einem vorhandenen Auswahlsatz suchen, um einen ICursor zu füllen. Mein Hauptziel besteht darin, zu testen, ob mein IQueryFilter mehr als einen Datensatz abruft, es jedoch keine count-Eigenschaft über das ISelectionSet gibt, indem ein QueryFilter verwendet wird, genau wie bei einer Feature-Class (IFeatureCLass:FeatureCount(IQueryFilter). Um zu testen, ob mein QueryFilter ruft mehr als einen Datensatz innerhalb eines Auswahlsatzes ab Ich muss die Suchmethode verwendenpFeatureSelection.SelectionSet.Search(pQueryFilter, True, selCursor)Verwenden des Recycling-Cursors für die Geschwindigkeit, dann Vorrücken zur nächsten Zeile und erneut zur nächsten Zeile, um herauszufinden, ob mit meinem QueryFilter mehr als eine Zeile abgerufen wurde. (Das fühlt sich schrecklich ineffizient an, funktioniert aber, wenn es nicht über PGDB FC verwendet wird)

Dies funktioniert perfekt bei Verwendung mit File-Geodatabases und Shapefiles (ich passe die Where-Klausel entsprechend dem Workspace-Typ der Feature-Class an), wenn ich dies jedoch über eine Personal-Geodatabase tue, schlägt die Methode ISelectionSet:Search fehl. Seltsam, dass es nur scheitert, nachdem es zuvor viele Male erfolgreich war. Die Abfragen, die ich der WhereClause des Abfragefilters zuordne, sind sehr einfach (d.h."[MASTER_ID] = '56061-UNPAT-28'")

Die Fehlermeldung, die ich erhalte, ist "Fehler HRESULT E_FAIL wurde von einem Aufruf an eine COM-Komponente zurückgegeben." Fehlernummer -2147467259

Um es noch einmal zu wiederholen, derselbe Code funktioniert gut, wenn er mit FGDB-Feature-Class und Shapefile verwendet wird. Nur bei PGDB (Access) schlägt er auf diese Weise fehl und erst nach einer Weile.

Letztendlich muss ich eine Anzahl innerhalb eines Auswahlsatzes erhalten, die eine einfache Abfrage erfüllt. Wenn es einen alternativen oder effizienteren Weg gibt, teilen Sie dies bitte mit…


Wenn du mit einem fertig bistICursoroderIFeatureCursor, müssen Sie das zugrunde liegende COM-Objekt freigeben. Dies ist möglich überReleaseCOMObjectoder noch besser,FinalReleaseCOMObject. Tun Sie dies wiederholt, wenn Sie sich in einer Schleife befinden, in der Sie dasselbe passierenICursorimmer wieder Bezug aufISelectionset.Search.


Schau das Video: ArcGIS Desktop Editing Basics - Feature Templates