[Gvsig_desarrolladores] edición de DBF sobre gvsigMobile

roeptisa mimo027 en gmail.com
Jue Feb 18 17:05:05 CET 2010


Vale, 

¿Y se puede poner desde gvsgiMobile en edición una tabla dbf al igual que se
pone en edición una capa?.
He intentado tbe con este código:

public static void añadirFila(String fName,HashMap newRow)
	{
		//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
		
		 	DBFDriver driver = new DBFDriver();
		 	File myFile = new File(fName);
	        try {
	            // Abrimos el fichero
	            driver.open(myFile);
	                       
	            // Comprobamos que tenemos acceso de escritura.
	            if (driver.canSaveEdits())
	            {              

	                ITableDefinition tableDef = driver.getTableDefinition();
	                FieldDescription[] fields = tableDef.getFieldsDesc();
	                int numFields = fields.length;
	               
	                driver.initialize(tableDef);
	                driver.preProcess();
	                Value[] att = new Value[numFields];
	            
	                
	                
	                for (int i=0; i < driver.getRowCount(); i++)
	                {  
	                    for (int j=0; j < numFields; j++)
	                    {
	                       Object obj = driver.getFieldValue(i, j);
	                       if (obj == null)
	                    	   att[j]  = ValueFactory.createNullValue();
	                       else
	                    	   att[j] = (Value) obj;     
	                    }
	                    DefaultRow row = new DefaultRow(att);
	                    DefaultRowEdited edRow = new
DefaultRowEdited(row,DefaultRowEdited.STATUS_ORIGINAL, i);
	                    driver.process(edRow);
	                }
	                
	                for (int k=0; k < numFields; k++)
	                {
	                	Object obj = newRow.get(driver.getFieldName(k));
	                	if (obj == null)
	                		att[k] = ValueFactory.createNullValue();
	                	else
	                		att[k] = ValueFactory.createValueByType(obj.toString(),
driver.getFieldType(k)); 	
	                }
	                
	                DefaultRow row = new DefaultRow(att);
                    DefaultRowEdited edRow = new
DefaultRowEdited(row,DefaultRowEdited.STATUS_ADDED,
(int)driver.getRowCount());
            
                    driver.process(edRow);
	                driver.postProcess();
	               
	                System.out.println("Fichero modificado");
	               
	            }
	            else
	            {
	                System.err.println("El fichero no tiene permiso de
edición");
	            }
	            driver.close();
	        } catch (Exception e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	      } 
	      
	}

Desde desktop me funciona correctamente, pero cuando lo empaqueto en un CAB
y lo paso a PDA, no me funciona, la clase WritableByteChannel no está
definida en la máquina virtual J9 de IBM:

java.lang.NoClassDefFoundError: java.nio.channels.WritableByteChannel
	at java.lang.J9VMInternals.verifyImpl(Native Method)
	at java.lang.J9VMInternals.verify(Unknown Source)
	at java.lang.J9VMInternals.initialize(Unknown Source)

¿Alguna alternativa a estos códigos, para poder editar un dbf en gvsigmobile
PDA sin tener que recorrerme todos los registros, y que está soportado bajo
J9?

Muchas Gracias.

Saludos.

Ro.

PD: Tbe he probado, a guardar los dbf en una geodatabase personal access,
pero con J9, no he encontrado el jar que tenga definido el driver:
"sun.jdbc.odbc.JdbcOdbcDriver", para que pueda ejecutar este código:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
				java.sql.Connection conBBDD = DriverManager.getConnection(
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + path + "", "",
"");
				
-- 
View this message in context: http://n2.nabble.com/edicion-de-DBF-sobre-gvsigMobile-tp4560072p4592591.html
Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.


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