Hola.

Añadir una fila a un DBF implica tamién modificar la cabecera del archivo DBF 
(no es solamente añadir cosas al final), así que no creo que sea fácil añadir 
una línea a un DBF en una PDA sin reescribir todo el archivo.

Si has de manejar en la PDA archivos DBF que no son muy pequeños, lo lógico 
sería:

- Cargar el DBF en memoria (eso ya lo estás haciendo)
- Modificar (en memoria) el DBF varias veces durante la sesión de trabajo
- Una vez terminado el trabajo, almacenar en disco el DBF, escribiéndolo 
completamente

¿Esto no es posible en tu caso? ¿De qué tamaño es tu DBF? ¿Puedes explicar un 
poco como usas los DBF? (desde el punto de vista de un usuario)

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: [email protected] en nombre de agirrearri
Enviado el: mié 09/06/2010 12:01
Para: [email protected]
Asunto: Re: [Gvsig_desarrolladores] como añadir una linea a un dbf que no es de 
un shape en mobile




Yo solo quiero que meta la linea y no que lo escriba de nuevo. Y por lo que
he entendido la forma en lo que me has dicho se escribe toda la tabla. Al
ser una aplicacin de pda y eso afectara mucho segn vaya creciendo la
tabla.
Ahora tengo esto, lo cope de este foro a uno que tena el mismo problema.

public void addFila(String idapoyo, String idInci, boolean cerradaCheck,
                        String descVis, String fotoVisita, String fechaVisita) {
                // Funcin que aada una fila a una tabla.
                // ENTRADA: newRow => hashmap con los datos de la fila a 
insertar.
                // fName => ruta completa del dbf
                //tine un problema:tiene que reescribir toda la tabla y eso
                //supone un gasto de memoria y tiempo

                Object newLinea[] = new Object[9];
                newLinea[0] = new Integer(0);//gid
                newLinea[1] = new Integer(0);//idcor
                newLinea[2] = new Double(idapoyo);//id
                newLinea[3] = new Double(idInci);//idinci
                newLinea[4] = fechaVisita;//fechacor
                if (cerradaCheck) {//corregida
                        newLinea[5] = new Integer(0);//Integer.getInteger("0");
                } else {
                        newLinea[5] = new 
Integer(-1);//Integer.getInteger("-1");
                }
                newLinea[6] = descVis;//correccion
                newLinea[7] = fotoVisita;//fotovisita
                if (cerradaCheck) {//corregida
                        newLinea[8] = new Integer(0);//Integer.getInteger("0");
                } else {
                        newLinea[8] = new 
Integer(-1);//Integer.getInteger("-1");
                }



                try {
                        File f;
                        f = new File(nombre_dbf);
                        DbfMemoryDataSource drv;
                        drv = new DbfMemoryDataSource(f);
                        drv.start();

                        int numFilas = (int) drv.getRowCount();
                        int numCols = drv.getFieldCount();

                        DbaseFileHeaderNIO myHeader;
                        myHeader = DbaseFileHeaderNIO.createDbaseHeader(drv);
                        numFilas++;
                        myHeader.setNumRecords(numFilas);

                        OrderFileOutputStream outStream = new 
OrderFileOutputStream(f);
                        DbaseFileWriterNIO dbfWrite = new 
DbaseFileWriterNIO(myHeader,
                                        outStream);

                        FeatureTemp fea = new FeatureTemp();
                        fea.setFieldNames(drv.getFieldNames());

                        for (int j = 0; j < numFilas - 1; j++) {

                                fea.setValues(drv.getRow(j));
                                Object[] record = fea.getValues();
                                dbfWrite.write(record);
                        }

                        Object[] record = new Object[numCols];

                        for (int k = 0; k < numCols; k++) {
                                // record to string obj to string zan
                                record[k] = 
ValueFactory.createValueByType(newLinea[k]
                                                .toString(), 
drv.getFieldType(k));
                        }
                        dbfWrite.write(record);
                        dbfWrite.close();
                        outStream.close();

                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }

Hay posibilidad de aadir un registro sin tener que escribirlo de nuevo?

pd. yo utilizo javaDBF en para leer unos dbf-s en gvsig mobile y funciona en
pda.

Gracias, atentamente Eaut.
--
View this message in context: 
http://osgeo-org.1803224.n2.nabble.com/como-a-adir-una-linea-a-un-dbf-que-no-es-de-un-shape-en-mobile-tp5154700p5157624.html
Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.
_______________________________________________
gvSIG_desarrolladores mailing list
[email protected]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores


_______________________________________________
gvSIG_desarrolladores mailing list
[email protected]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores

Responder a