1 votos

ARCPAD - VBscript para actualizar valores en la tabla de atributos

Estoy trabajando en una herramienta de automatización de ArcPad para las cuestiones de inventario en nuestra máquina móvil GIS (Trimble GeoXH - Geoexplorer 2008 series - Windows mobile 6.1 y Arcdap 10.0.3). He desarrollado la herramienta en VBscript. Breve descripción de lo que debe hacer la herramienta: Tenemos un shapefile de puntos en Arcpad. Cada vez que añadimos un punto manualmente, se cuenta automáticamente el nuevo ID haciendo clic en un botón de la barra de herramientas. El nuevo ID es el último ID + 1. Ya he conseguido recorrer los atributos, encontrar el último ID y calcular un nuevo ID. Sin embargo, no puedo añadir el nuevo ID calculado para el punto añadido en la tabla de atributos. Es como si no pudiera abrir el recordset en modo de edición. A continuación se encuentra mi código fuente.
¿Sabes qué estoy haciendo mal?

Gracias por la ayuda.

Código fuente

Subprueba

Dim objDBF, strLaatstePaalID, NewPaalNR, NewPaalID, Nummer, PaalCode 

Numbre = 0

Set objLyr = Map.Layers("Palen")
Set objDBF = objLyr.Records
'Look for record with the highest ID
'ID is text format like 'P_00450'
objDBF.MoveFirst
Do Until objDBF.EOF
    PaalCode = objDBF.Fields("PAAL_ID").Value
    If PaalCode <> "" Then 'the new added point (which is the last) has no value in the ID
        If Int(Right(PaalCode,(Len(PaalCode)-2)))>Numbre Then
            'Make an integer of the text code
            Numbre = Int(Right(PaalCode,(Len(PaalCode)-2)))
        End If
    End If
    objDBF.MoveNext
Loop

NewPaalNR = Numbre + 1

'Maak een nieuw text ID with the new numbre
If NewPaalNR < 10 Then
    NewPaalID = "P_0000" & CStr(NewPaalNR)

ElseIf NewPaalNR < 100 Then
    NewPaalID = "P_000" & CStr(NewPaalNR)

ElseIf NewPaalNR < 1000 Then
    NewPaalID = "P_00" & CStr(NewPaalNR)

ElseIf NewPaalNR < 10000 Then
    NewPaalID = "P_0" & CStr(NewPaalNR)

Else
    NewPaalID = "P_" & CStr(NewPaalNR)

End If

MsgBox ("New Id: " & NewPaalID)

'go to the new added point
objDBF.MoveLast

if objDBF.Fields("PAAL_ID").Value ="" Then
    'add the new value
    objDBF.Fields("PAAL_ID").Value = NewPaalID
    objDBF.Update
    MsgBox("Paal_ID " & NewPaalID & " added in Palen.shp")
Else
    MsgBox("No empty feature added")
End If  

Set objDBF = Nothing
End Sub

2voto

gvkv Puntos 168

Tras echar un vistazo a su guión, le sugiero que lo divida en secciones más pequeñas.

En lugar de ejecutar continuamente el bucle para encontrar el ID más alto, ¿qué tal si lo ejecutas una vez cuando el mapa se abre y lo almacena como una variable de aplicación - application.userproperties(yourID). Entonces, cada vez que añadas un nuevo registro (evento Page OnSetActive) lo tendrás listo. Luego sobrescribe esta variable de aplicación con el siguiente id una vez que hayas añadido la característica (evento Map OnFeatureAdded).

A partir de su código no es fácilmente identificable dónde está ejecutando la rutina y el flujo de trabajo real en la captura de características. Si está utilizando la herramienta de captura de puntos estándar, entonces ArcPad ya ha accedido al conjunto de registros por usted y podría cambiar la forma en que se está comunicando con él.

Si está abriendo el formulario de edición de las características del punto, entonces espere hasta que la página se haya hecho activa y entonces ejecute su componente del script (Declaración IF) - use el evento Page SetActive. De esta manera usted escribe su id en el valor del control del formulario (txtYourID.value) en lugar de intentar escribir en objRS.fields(yourid).value. Si no está utilizando el formulario de edición, siempre puede aprovechar el Map.SelectionBookmark. Esto le ayudará a acceder a la fila correcta en el conjunto de registros.

Ya he escrito sobre esto en otro intercambio de pilas haga clic aquí pregunta. También hay un ejemplo que viene con ArcPad que en el Registro de Árbol plantilla de proyecto rápido. Echa un vistazo a eso y ver que proporciona alguna inspiración.

Espero que esto ayude y por favor, hágame saber si necesita más aclaraciones.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X