[Gvsig_usuarios] Problema al actualizar una tabla con scrip

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Jue Oct 4 11:22:08 CEST 2018


El jue., 4 oct. 2018 a las 9:52, Ovidio Ribeira (<alboredos en hotmail.es>)
escribió:

> Buenos días, tengo el siguiente script para actualizar una tabla desde un
> formulario, pero me da el siguiente error " Concurrente modification in
> store"    si coge los nuevos datos pero no cierra la edición de la tabla ni
> guarda los cambios y no consigo saber cual es el problema,
> Gracias y saludos
> Ovidio
>
>     def Okey_click(self,*args):
>
>       NREXISTRO = self.Nentrada.getText()
>       NDATA = self.Dentrada.getText()
>       NVISITA = self.Comprobada.getText()
>       NASINA = self.Dsinatura.getText()
>       Nexpedi =  self.n_expedi.getText()
>       TablaExpe = currentProject().getTable("NExpedi")
>       ndoexpe = TablaExpe().features("CLAVE_EXPE= '" +Nexpedi +"'" )
>       contarE = ndoexpe.getCount()
>       print contarE
>       if contarE == 0:
>         msgbox("Non hai este expediente ", "AVISO", 1)
>         return
>       TablaExpe.edit()
>       for expe in ndoexpe:
>         c = expe.getEditable()
>         c.set("NREXI", NREXISTRO)
>         c.set("DATAREXI", NDATA)
>         c.set("DATAVISTA",NVISITA)
>         c.set("DATASINA",NASINA)
>         TablaExpe.update(c)
>       TablaExpe.commit()
>
> Hola,
pues la respuesta simple seria:

- Si vas a recorrer una tabla/capa para consultar los datos, puedes hacerlo
  tal como lo has hecho. Pero solo para consultar.

- Si vas a actualizar los datos de una tabla, debes obtener un feature-set,
y
  utilizarlo para recorrer los datos y hacer los updates sobre el.
  Basicamente, en cuanto hay alguien que esta recorriendo los datos de una
tabla,
  nadie mas puede hacer updates sobre ella, asi evitamos que puedan haber
  modificaciones concurrentes. Los updates solo se pueden hacer sobre el
feature
  set del que hemos obtenido la feature que queremos actualizar (lo mismo
con
  inserts y removes).

Los cambios en el codigo que has incluido deberian ser minimos, algo como:

  TablaExpe.edit()
  # Obtenemos un FeatureSet de la tabla
  featureSet = TablaExpe.getFeatureStore().getFeatureSet()
  for expe in featureSet: # Usamos el FeatureSet para recorrer la tabla
    c = expe.getEditable()
    c.set("NREXI", NREXISTRO)
    c.set("DATAREXI", NDATA)
    c.set("DATAVISTA",NVISITA)
    c.set("DATASINA",NASINA)
    featureSet.update(c) # El update lo hacemos sobre el FeatureSet
  TablaExpe.commit()

Un saludo
Joaquin





> _______________________________________________
> gvSIG_usuarios mailing list
> gvSIG_usuarios en listserv.gva.es
>
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
>
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro en gvsig.com
gvSIG Association
www.gvsig.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20181004/40abbc3b/attachment.html>


Más información sobre la lista de distribución gvSIG_usuarios