[Gvsig_desarrolladores] Problemas Acceso a Datos

Jorge Piera piera_jor en gva.es
Mie Mayo 2 08:44:37 CEST 2007


Hola Javier.

Si quieres acceder a los datos de una capa, lo tienes que hacer usando 
el "SelectableDataSource" de la misma. El siguiente código que te paso 
se recorre las filas de la primera capa de la vista y tescribe por 
consola los pares "COLUMNA: VALOR".

         View vista = 
(View)PluginServices.getMDIManager().getActiveWindow();
        MapControl mapControl = vista.getMapControl();
        MapContext mapContext = mapControl.getMapContext();
        FLayer layerTolocate = 
mapControl.getMapContext().getLayers().getLayer(0);
        AlphanumericData capa = (AlphanumericData)layerTolocate;
        try {
            SelectableDataSource sds = capa.getRecordset();
            for (int i=0 ; i<sds.getRowCount() ; i++){
                System.out.print("\n FILA " + i + " ");
                for (int j=0 ; j<sds.getFieldCount() ; j++){
                    System.out.print(sds.getFieldName(j));
                    System.out.print(": ");
                    System.out.print(sds.getFieldValue(i, j));
                    System.out.print(" ");
                }
            }
        } catch (DriverException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (com.iver.cit.gvsig.fmap.DriverException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Un saludo

Jaime Traver wrote:
> Hola a todos:
>
> Estoy haciendo una extension, para la cual necesito acceso a los datos 
> vectoriales de una vista. Y tengo un problemilla, el planteamiento es 
> el siguiente, al igual que en la extension extDataLocator,  tengo dos 
> paquetes y dentro de cada uno, una clase; una de ellas  hereda 
> Extension (... extends Extension), en esta clase a parte de los 
> metodos isVisible, isEnable..., implemento execute de la siguiente forma:
>   
>  public void execute(String actionCommand) {
>         vista = (View)PluginServices.getMDIManager().getActiveWindow();
>         MapContext mapContext = vista.getModel().getMapContext();
>         InputInfoPanel dataSelectionPanel = new 
> InputInfoPanel(mapContext);
>         
> PluginServices.getMDIManager().addWindow(dataSelectionPanel);       
>        
>     }
>
> Luego la otra clase hereda de JPanel (extends JPanel implements 
> IWindow), con sus correspondientes metodos, para pintar botones, campo 
> de texto, etc. El contructor de esta clase queda de la siguiente forma:
>
>     public InputInfoPanel(MapContext mapContext){
>         super();
>         this.mapControl = new MapControl();
>         mapControl.setMapContext(mapContext);
>         lyr = mapControl.getMapContext().getGraphicsLayer();
>         initialize(); //Muestra componente swing
>     }
>
> El metodo initialize() haria lo siguiente:
>
> private void initialize(){
> ...
> ...
> ...
> this.add(getOkCancelPanel(), null);
> ...
> ...
> }
>
> Pues bien, es en la funcion AcceptCancelPanel, donde se produce el 
> error, cuando  llega a ( ds = 
> ds.getDataSourceFactory().executeSQL(sql, 
> DataSourceFactory.AUTOMATIC_OPENING); ), saltando una excepcion 
> indicando lo siguiente "PluginServices.Error grave de la aplicación. 
> Es conveniente que salgas de la aplicación".
>
>
>
>     private AcceptCancelPanel getOkCancelPanel() {
>        
>         if (okCancelPanel == null) {
>             ActionListener okAction, cancelAction;
>             okAction = new java.awt.event.ActionListener() {
>                 public void actionPerformed(java.awt.event.ActionEvent 
> e) {
>                                   
>                    
>                     layerTolocate = 
> mapControl.getMapContext().getLayers().getLayer(0);// Atributo de esta 
> clase definido asi--> Flayer layerTolocate;
>                     AlphanumericData capa = 
> (AlphanumericData)layerTolocate;
>                     DataSource ds;
>                     try {
>                         ds = capa.getRecordset();
>                         String sql = "select * from " + ds.getName() + 
> " ;";                      
>                         ds = ds.getDataSourceFactory().executeSQL(sql, 
> DataSourceFactory.AUTOMATIC_OPENING);                   
>
>                         if (ds.getRowCount()!=0){
>                             System.out.println("Hay resultados de la 
> sentencia SQL");                           
>                         }
>                         else
>                             System.out.println("La sentencia SQL no  
> ha producido resultados");          
>                    
>                        
>                     } catch (DriverException e1) {
>                         // TODO Auto-generated catch block
>                         e1.printStackTrace();
>                     } catch (DriverLoadException e2) {
>                         // TODO Auto-generated catch block
>                         e2.printStackTrace();
>                     } catch (ParseException e3) {
>                         // TODO Auto-generated catch block
>                         e3.printStackTrace();
>                     } catch 
> (com.hardcode.gdbms.engine.data.driver.DriverException e4) {
>                         // TODO Auto-generated catch block
>                         e4.printStackTrace();
>                     } catch (SemanticException e5) {
>                         // TODO Auto-generated catch block
>                         e5.printStackTrace();
>                     } catch (IOException e6) {
>                         // TODO Auto-generated catch block
>                         e6.printStackTrace();
>                     } catch (EvaluationException e7) {
>                         // TODO Auto-generated catch block
>                         e7.printStackTrace();
>                     }               
>                    
>                 }
>             };
>             cancelAction = new ActionListener() {
>                 public void actionPerformed(ActionEvent e) {
>                     closeThis();
>                 }
>             };
>             okCancelPanel = new AcceptCancelPanel(okAction, cancelAction);
>             okCancelPanel.setBounds(new java.awt.Rectangle(60, 110, 
> 210, 30));//88,260
>         }
>         return okCancelPanel;
>     }
>
>
> Querria saber como podria solucionar este problema.
> Gracias
>
> Un saludo tod en s.
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>   


-- 
Jorge Piera Llodrá
Especialista en Servicios OGC
Equipo de desarrollo gvSIG
IVER TI S.A.
C/ Salamanca, 50-52
46005-Valencia
Tlf.+34963163400
www.iver.es
www.gvsig.com 





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