[Gvsig_desarrolladores] edición de DBF sobre gvsigMobile

Juan Lucas Dominguez Rubio jldominguez en prodevelop.es
Mar Feb 22 10:53:53 CET 2011


Hola, lo que hace gvSIG Mobile al editar un SHP es:
 
- Cargar el SHP y el DBF en memoria (creo que si no cabe en memoria no se puede editar, aunque no estoy del todo seguro de esto)
- Mientras el usuario cambia geometrías o atributos se trabaja en memoria.
- Cuando el usuario sale del modo edición, lo que hay en memoria se vuelca al disco de la PDA, machacando el archivo viejo.
 
No sé cómo lo haces en tu caso. Si el usuario va a hacer varias ediciones en una sesión de trabajo, te conviene hacer lo mismo.
 
Cuando el usuario cambia cosas, solo tienes que hacer feature.setVaues(...)  y cuando el usuario dice que ya no quiere editar más en esta sesión, haces el bucle de volcado a disco ¿Ese plantamiento no te sirve?
 
No sé si estoy entendiendo bien tu problema...
 
Saludos,
Juan Lucas Domínguez Rubio
---
Prodevelop SL, Valencia (España)
Tlf.: 96.351.06.12 -- Fax: 96.351.09.68
http://www.prodevelop.es <http://www.prodevelop.es/> 
---

________________________________

De: gvsig_desarrolladores-bounces en listserv.gva.es en nombre de roeptisa
Enviado el: mar 22/02/2011 9:44
Para: gvsig_desarrolladores en listserv.gva.es
Asunto: Re: [Gvsig_desarrolladores]edición de DBF sobre gvsigMobile




Hola,

Tengo un shape de ms de 1000 registros, si edito una de los elementos de
ese shape con gvsigmobile, el tiempo que tarda es muy poco, y lo que est
haciendo realmente es editar la informacin alfanumrica del elemento
seleccionado, que est almacenada en su correspondiente fichero dbf.

Cmo puedo hacer uso de este cdigo que ya hay implementado, para solo
editar el fichero dbf, no el .shp?

Actualmente para editar ficheros dbf hago uso de la siguiente funcin :
(pero el rendimiento es muy malo porque se tiene que recorrer todo el dbf).

public static void modificarDBF(String fName,int rowIndex,Object[]
recordModificar)
        {
                try{
                       
                                logger.debug("inicio modificarTabla2: " + fName + " " + rowIndex);
                               
                                File f;
                                f = new File(fName);
                                DbfMemoryDataSource drv;
                                drv = new DbfMemoryDataSource(f);
                                drv.start();
                               
                               
                                int numFilas = (int)drv.getRowCount();
                                logger.debug("numFilas: " + numFilas);
                               
                                DbaseFileHeaderNIO myHeader;
                                myHeader = DbaseFileHeaderNIO.createDbaseHeader(drv);
                               
                                myHeader.setNumRecords(numFilas);
                               
               
                                logger.debug("strDirTemp: " + strDirTemp);
                                OrderFileOutputStream outStream = new OrderFileOutputStream(f, new
File(strDirTemp));
                                DbaseFileWriterNIO dbfWrite = new
DbaseFileWriterNIO(myHeader,outStream);
                               
                       
                               
                            FeatureTemp fea = new FeatureTemp();
                                fea.setFieldNames(drv.getFieldNames());
                               
                       
                                for (int j=0; j<numFilas; j++){
                                        fea.setValues(drv.getRow(j));
                                        Object[] record = fea.getValues();
                               
                                        if (j == rowIndex){
                                                record = recordModificar;
                                        }
                                       
                                        dbfWrite.write(record);
                                }      
                               
                               
                                dbfWrite.close();
                                outStream.close();
                       
                               
                                       
                }


Quisiera usar el cdigo que ya hay implementado en gvsigmobile para editar
shapes, pero solo usarlo para editar dbf, ya que este cdigo es bastante
rpido para la edicin de ficheros dbf de bastante tamao, pero no he
conseguido usarlo, ya que me obliga a que tenga necesariamente un fichero
shape asociado al dbf.

He probado a usar la librera javadbf.jar, pero solo me sirve para aadir
nuevas filas, para editar una fila ya existente no tiene ningn mtodo
definido.

Muchas Gracias.

Un saludo,

Rocio.

--
View this message in context: http://osgeo-org.1803224.n2.nabble.com/edicion-de-DBF-sobre-gvsigMobile-tp4560072p6051510.html
Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.
_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores en listserv.gva.es
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores


------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20110222/84d2724a/attachment.htm 


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