I ́ve a project in VBA but I hit a wall that I can't pass. What I want to do:
I ́ve a table (of parcels) with the fields: ID, Name, Area, Scale. For each Parcel there is a different scale!
I input, in a text box, the name of a parcel. I want to "get" the corresponding scale.
Does anybody know how I can do that?
-
Do you want a QueryFilter?patrick– patrick2011年05月19日 15:22:38 +00:00Commented May 19, 2011 at 15:22
3 Answers 3
Here is a code example of a QueryFilter. You could assign a variable to hold your text box value for this line "APP_TYP = 'PA'" and update this line indexClass = pUpdateFeatures.FindField("Dir") to point to your scale field. The result will give you a message box of the scale value.
' Par 1: Define the feature class.
Dim pMxDoc As IMxDocument
Dim pFeatureClass As IFeatureClass
Dim pFeatLayer As IFeatureLayer
'Dim pFeatureClass As IFeatureClass
Dim pFields As IFields
Dim ii As Integer
Set pMxDoc = ThisDocument
Set pFeatLayer = pMxDoc.FocusMap.Layer(0)
Set pFeatureClass = pFeatLayer.FeatureClass
' Part 2: Prepare a feature cursor.
Dim pQFilter As IQueryFilter
Dim pUpdateFeatures As IFeatureCursor
' Prepare a query filter.
Set pQFilter = New QueryFilter
pQFilter.WhereClause = "APP_TYP = 'PA'"
' Create a feature cursor for updating.
Set pUpdateFeatures = pFeatureClass.Update(pQFilter, False)
' Part 3: Calcuate the Class value.
Dim indexClass As String
Dim pFeature As IFeature
indexClass = pUpdateFeatures.FindField("Dir")
Set pFeature = pUpdateFeatures.NextFeature
MsgBox ("Scale value = " & pFeature.value(indexClass))
-
I dont see any need of an update cursor...isnt simple Search cursor enough for the job?ujjwalesri– ujjwalesri2011年05月19日 17:21:39 +00:00Commented May 19, 2011 at 17:21
Try this:
Dim pMxDoc As IMxDocument
Dim pFeatureClass As IFeatureClass
Dim pFeatLayer As IFeatureLayer
Dim pFields As IFields
Dim ii As Integer
Set pMxDoc = ThisDocument
Set pFeatLayer = pMxDoc.FocusMap.Layer(0)
Set pFeatureClass = pFeatLayer.FeatureClass
' Part 2: Prepare a feature cursor.
Dim pQFilter As IQueryFilter
Dim pFeatCursor As IFeatureCursor
Dim pFeature As IFeature
' Prepare a query filter.
Set pQFilter = New QueryFilter
pQFilter.SubFields = "PARCEL_NAME, SCALE" 'Retrieve only these fields
pQFilter.WhereClause = "PARCEL_NAME='" & txtParcelName.Text & "'" ''' Text box on form
' Create a feature cursor for updating.
Set pFeatCursor = pFeatureClass.Search(pQFilter, true)
' Part 3: Get the Scale value
Do
pFeature = pFeatureCursor.NextFeature
If pFeature IsNot Nothing Then
MsgBox("Scale: " & pFeature.Value(pFeatureCursor.FindField("SCALE")))
End If
While !(pFeature = Nothing)
Create a select cursor. I'm not sure about VBA but for python: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//000v00000039000000.htm
#iName is input testing Name
parcels = arcpy.SearchCursor(fParcels)
for parcel in parcels:
if parcel.Name == iName:
scale = parcel.scale