[Gvsig_desarrolladores] Re: Editar un valor en un registro
Nacho Uve
nachouve en gmail.com
Lun Ene 26 13:40:48 CET 2009
Muchas gracias! Voy a probar tus consejos y ya cuento como fué.
El 26 de enero de 2009 13:35, Francisco José Peñarrubia
<fpenarru en gmail.com>escribió:
> Ahí van unos trucos:
>
> DbaseFile driver = new DbaseFile();
> String dbfPath = "c:/0libro.dbf";
> File myFile = new File(dbfPath);
> try {
> // Abrimos el fichero
> driver.open(myFile);
> driver.setFieldValue(1,0, new Integer(54));
> System.out.println("Valor nuevo:" +
> driver.getStringFieldValue(1,0));
> driver.close();
>
> }
> catch (Exception e)
> {
> e.printStackTrace();
> }
> }
>
>
> Es decir, si recuperas el driver, y le pides getFile(), obtienes el fichero
> del dbf. Luego puedes usar la clase DbaseFile para editar de manera sencilla
> (siempre que sea un dbf). De esta forma, y si solo quieres cambiar valores,
> no hace falta ni que entres en edición.
> La manera "larga" pero que sirve para todas las capas, es usar el interfaz
> IWriter:
>
> DBFDriver driver = new DBFDriver();
> File myFile = new File("c:/0libro.dbf");
> try {
> // Abrimos el fichero
> driver.open(myFile);
> // Comprobamos que tenemos acceso de
> escritura.
> if (driver.canSaveEdits())
> { // Creamos el nuevo
> campo
> FieldDescription dateField = new
> FieldDescription();
> dateField.setFieldName("Date");
> dateField.setFieldType(Types.VARCHAR);
> dateField.setFieldLength(20);
> // Creamos un array con el nuevo campo
> ITableDefinition tableDef = driver.getTableDefinition();
> FieldDescription[] oldFields = tableDef.getFieldsDesc();
> int numOldFields = oldFields.length;
> FieldDescription[] newFields = new
> FieldDescription[numOldFields + 1];
> System.arraycopy(oldFields, 0, newFields, 0, numOldFields);
> newFields[numOldFields] = dateField;
>
> tableDef.setFieldsDesc(newFields);
> driver.initialize(tableDef);
> driver.preProcess();
> Value[] att = new Value[newFields.length];
> Calendar today = Calendar.getInstance();
> for (int i=0; i < driver.getRowCount(); i++)
> { for (int j=0; j < numOldFields; j++)
> {
> att[j] = driver.getFieldValue(i, j);
> }
> att[numOldFields] =
> ValueFactory.createValue(today.getTime().toLocaleString());
> DefaultRow row = new DefaultRow(att);
> DefaultRowEdited edRow = new DefaultRowEdited(row,
> DefaultRowEdited.STATUS_MODIFIED, i);
>
> 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 (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (EditionException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (DriverException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
>
>
> Es decir, esas preprocess, process y postProcess, y necesitas componer un
> DefaultRowEdited. De todas formas, cuidado con esto. En el futuro, y después
> del refactoring todo esto cambiará totalmente.
> Espero que te sirva.
> Saludos.
>
> Fran.
>
> Nacho Uve escribió:
>
>> He estado leyendo el código de ciertas clases relacionadas con las Tablas,
>> pero no consigo encontrar una forma sencilla de hacer un cambio sencillo en
>> un atributo de una capa vectorial y que éste quede registrado en el
>> shapefile asociado en disco. :S
>>
>> ¿Alguien puede darme una pequeña guía para avanzar en este sentido?
>> Gracias... :)
>>
>> Un saludo,
>> Nacho
>>
>>
>>
>>
>> El 22 de enero de 2009 14:02, Nacho Uve <nachouve en gmail.com <mailto:
>> nachouve en gmail.com>> escribió:
>>
>> Hola de nuevo,
>>
>> Seguramente en muy sencillito, pero ¿cómo se modifica un valor de
>> un registro en una capa vectorial por código en la versión 1.2?
>> Quisiera tener una función del tipo:
>>
>> void modifyValue(FLyrVect lyr, int rowIdx, int attrIdx, Object
>> newValue){
>> //...
>> }
>>
>> Pero no sé muy bien cómo poner en edición la tabla asociada a la
>> capa, y guardar los cambios.
>>
>> Un saludo,
>> Nacho
>>
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> gvSIG_desarrolladores mailing list
>> gvSIG_desarrolladores en runas.cap.gva.es
>> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>>
>>
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20090126/f80ea12d/attachment.htm
Más información sobre la lista de distribución gvSIG_desarrolladores