[Gvsig_desarrolladores] como añadir una linea a un dbf que no es de un shape en mobile
agirrearri
agirrearri en hotmail.com
Mie Jun 9 12:01:15 CEST 2010
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 aplicación de pda y eso afectara mucho según vaya creciendo la
tabla.
Ahora tengo esto, lo copíe de este foro a uno que tenía el mismo problema.
public void addFila(String idapoyo, String idInci, boolean cerradaCheck,
String descVis, String fotoVisita, String fechaVisita) {
// Función que añada 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 añadir 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 Eñaut.
--
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.
Más información sobre la lista de distribución gvSIG_desarrolladores