12 votos

¿Cómo hacer un campo de fecha y hora actualizado automáticamente en QGIS 2.14?

Quiero hacer un campo de actualización de fecha y hora mientras edito un campo de atributo en este formato yyyy-mm-dd 00:00:00 (= 2016-05-08 11:04:00) - mi fecha/hora local. Los datos están en un archivo de formas QGIS 2.14 y líneas de vectores como se muestra a continuación.

Cuando un rasgo como NULL en el campo 'name', quiero introducir un nombre para la carretera y el campo 'mod' debe recibir de mod como "2016-05-08 15:16:00".

Ya he intentado algunas opciones y he fallado. Necesito ayuda para empezar desde el principio.

1. Creo un nuevo campo, tipo de fecha/hora, pero se queda con el valor NULL después de editarlo, en el campo "nombre", o en la característica misma.

2. Yo también usé, la expresión now(), pero se queda con el valor NULL después de que la edité.

Nota: la fecha que se ve allí, 2016-04-14 es el primer valor creado con la "Calculadora de campo".

enter image description here

0 votos

Por favor, editar su pregunta para especificar el formato de los datos y las versiones del software en uso. También debe especificar el tipo de datos de la columna de destino (ya que los campos de fecha no tienen formatos)

0 votos

Por favor, editar la pregunta para contener la información solicitada. Debe detallar lo que ha intentado, y exactamente cómo ha fallado. Esto ayudará a nuestros voluntarios a entender lo que usted está tratando de lograr. Tal y como están las cosas, no hay suficiente información como para adivinar una solución, me imagino una columna de autocompletar en DB2 no es que va a satisfacer sus necesidades.

0 votos

Me parece que quieres almacenar la marca de tiempo de la última edición/actualización de una característica en un atributo, ¿he entendido bien? ¿Algo así como lo que ESRI llama "seguimiento del editor"?

15voto

Mue Puntos 2469

Puede utilizar el siguiente código que conecta el attributeValueChanged a una función que podemos definir y que inserta los resultados del $now expresión. Resalte su capa y copie/pegue lo siguiente en el Consola Python :

layer = qgis.utils.iface.activeLayer()

def update():
    field = layer.fieldNameIndex('mod')
    e = QgsExpression( " $now " )
    e.prepare( layer.pendingFields() )
    for feat in layer.selectedFeatures():
        feat[field] = e.evaluate( feat )
        layer.updateFeature( feat )

layer.attributeValueChanged.connect(update)

Seleccione la característica haciendo clic en el número de fila (mostrado en el cuadro rojo de la imagen) o en el lienzo del mapa y edite cualquier para esa característica. El atributo en su mod debe actualizarse:

Result


Nota: He utilizado un campo de la cadena en lugar de la fecha para obtener la hora, de lo contrario el campo de la fecha sólo registra YYYY-MM-DD .

0 votos

@CarlosPires - ¡De nada! Espero que te sirva de ayuda :)

0 votos

Así que creé un nuevo campo de cadena de texto(20) 'mod' (ver 1) Pegué su código en la consola de Python (después de ctrl-alt-P), inserte el nombre de la calle 'nombre' (ver 2) , ha dejado el registro pero el campo sigue siendo NULL (ver 3) como se ve en la captura de pantalla. [ScreenshotTry] ( i.stack.imgur.com/lGR2D.png ).

2 votos

¡Ahora funciona! ¡¡Como no soy programador no sabía que primero había que ejecutar el código !! :( Lo siento. Nota Funciona con la herramienta de selección. Si el campo de atributos se edita con la herramienta de información (función de identificación), no funciona.

4voto

rLogan Puntos 31

Me topé con esta pregunta y respuesta mientras buscaba una manera de estampar la fecha/hora de los cambios que estaba haciendo en los registros utilizando un plugin. Puse una versión ligeramente modificada del código en el plugin para actualizar automáticamente la fecha/hora en el registro(s) que cambié:

""" Prepare Change Date/Time Stamp"""
e = QgsExpression( " $now " )
cDate = e.evaluate()

"""" Identify column(s) to change and new value(s) to assign"""
attrs = { 10 : newStat, 20 : cDate }

""" Make record change and capture date/time of change'''
layer.dataProvider().changeAttributeValues({ fid : attrs })

0 votos

Técnicamente esto no parece ser una respuesta, pero creo que esta "respuesta" puede tener algún valor para un futuro lector como parte de las preguntas y respuestas, por lo que la dejo en su lugar. Necesita más formato del que permitiría convertirlo en un comentario. Estoy feliz de ser anulado si alguien más cercano a la escritura de QGIS Plug-ins que yo quiere hacer un caso en los comentarios aquí y luego me ping o otro moderador.

2voto

kirongo Puntos 1

Acabo de seleccionar now() función en la expresión del valor por defecto y funcionó .. muy simple

Estoy utilizando QGIS 3.14 PI

Basta con crear un campo con formato DateTime y establecer por defecto como now().

Haga clic con el botón derecho del ratón en la capa y seleccione propiedades --> formularios de atributos-->seleccione el campo de fecha --> valores predeterminados--> Expresión de valor predeterminado--> escriba now().

Solicite y ahorre.

Cree nuevas características y vea. La marca de tiempo se actualizará en el campo.

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