[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