[Gvsig_desarrolladores] como añadir una linea a un dbf que no es de un shape en mobile
Juan Lucas Dominguez Rubio
jldominguez en prodevelop.es
Mie Jun 9 12:18:01 CEST 2010
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: gvsig_desarrolladores-bounces en listserv.gva.es en nombre de agirrearri
Enviado el: mié 09/06/2010 12:01
Para: gvsig_desarrolladores en listserv.gva.es
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
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/20100609/6444e9a0/attachment.htm
Más información sobre la lista de distribución gvSIG_desarrolladores