[Gvsig_usuarios] Problema al actualizar una tabla con scrip

Ovidio Ribeira alboredos en hotmail.es
Jue Oct 4 14:38:07 CEST 2018


Saludos Joaquín
Todo perfecto, muchas gracias
________________________________
De: gvsig_usuarios-bounces en listserv.gva.es <gvsig_usuarios-bounces en listserv.gva.es> en nombre de Joaquin Jose del Cerro Murciano <jjdelcerro en gvsig.org>
Enviado: jueves, 4 de octubre de 2018 11:22
Para: Lista de Usuarios de gvSIG
Asunto: Re: [Gvsig_usuarios] Problema al actualizar una tabla con scrip



El jue., 4 oct. 2018 a las 9:52, Ovidio Ribeira (<alboredos en hotmail.es<mailto: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<mailto: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<mailto:jjdelcerro en gvsig.com>
gvSIG Association
www.gvsig.com<http://www.gvsig.com>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20181004/1bc863f5/attachment.html>


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