Retroceder   Foros del Web > Diseño de Sitios web > Flash y Actionscript > Flex

Respuesta
 
Herramientas Desplegado
Antiguo 06-may-2008, 12:00   #1 (permalink)
Maru77 está en el buen camino
 
Fecha de Ingreso: agosto-2003
Mensajes: 193
Como eliminar registros de una tabla

Hola!

Estoy intentando hacer la eliminación de registros en una base de datos, lo que hago primeramente es una búsqueda que se ve reflejada en un datagrid y la idea es que al hacer click en X registro se elimine, creo que tengo un problema con los valores (no se como pasarlos) porque si pongo que me elimine la tabla completa lo hace sin problemas.

Si pongo esto funciona OK...

Código:
var deleteStmt:SQLStatement = new SQLStatement();
deleteStmt.sqlConnection = conn;

var sql:String = 
      "DELETE FROM clientes";

deleteStmt.execute();
Ahora si intento con esto no elimina nada...

Código:
var deleteStmt:SQLStatement = new SQLStatement();
deleteStmt.sqlConnection = conn;
				
var sql:String = 
	    "DELETE FROM clientes WHERE (:nombre, :direccion, :telefono, :email)"; // se que esto no está bien pero no encontré nada para realizar el pase de valores de forma correcta.

Gracias de antemano!
__________________
Saludos!!!
Maru.-
Maru77 está desconectado   Responder Citando
Antiguo 07-may-2008, 15:15   #2 (permalink)
carlxime está en el buen camino
 
Avatar de carlxime
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 141
Re: Como eliminar registros de una tabla

Hola Maru77,

El query para eliminar registros deben ser de la siguiente forma:

Código:
deleteManager.text = "DELETE FROM clientes WHERE nombre= :nombre AND direccion = :direccion";
Si necesitas saber toda la información sobre cómo hacerlo con el registro seleccionado del datagrid, aquí va:

---------------------------------------------------------------------------------------

Primero le tienes que poner un listener al datagrid:

Código:
import mx.events.ListEvent;

// Supongamos que tu datagrid se llame registros_dg
registros_dg.addEventListener(ListEvent.CHANGE, dgChangeHandler);

private function dgChangeHandler(event:ListEvent):void {
	// Aquí van a ir nuestras acciones para borrar el registro
}
Segundo, dentro del dataProvider de tu datagrid deberás tener el id del registro, ya que es mucho más fácil, seguro y confiable que ponerle el WHERE con los datos. Suponiendo que en tu dataProvider hayas puesto como id del elemento id_registro:

Código:
private function dgChangeHandler(event:ListEvent):void {
	id_seleccion = event.target.selectedItem.id_registro;
        // Si quieres hacerlo por nombre, direccion, etc. puedes obtener estos datos del registro seleccionado de la siguiente forma:
	var nombre_sel:String = event.target.selectedItem.nombre;
	var direccion_sel:String = event.target.selectedItem.direccion;
        ...
	// Ya tenemos el id del registro que fue seleccionado y que queremos borrar
	var deleteManager:SQLStatement = new SQLStatement();
	deleteManager.sqlConnection = conn;
	deleteManager.text = "DELETE FROM clientes WHERE INTNUMCLIENTE = :id";
	deleteManager.parameters[":id"] = id_seleccion;
	deleteManager.execute();

	// Si lo quieres hacer de la otra forma sería:
	var deleteManager:SQLStatement = new SQLStatement();
	deleteManager.sqlConnection = conn;
	deleteManager.text = "DELETE FROM clientes WHERE nombre= :nombre AND direccion = :direccion";
	deleteManager.parameters[":nombre"] = nombre_sel;
	deleteManager.parameters[":direccion"] = direccion_sel;
	deleteManager.execute();
}
Saludos.
carlxime está desconectado   Responder Citando
Antiguo 08-may-2008, 13:34   #3 (permalink)
Maru77 está en el buen camino
 
Fecha de Ingreso: agosto-2003
Mensajes: 193
Re: Como eliminar registros de una tabla

Hola carlxime!!! gracias por tu ayuda...

Estuve probando con el código que pusiste, pero algo no funciona... no se si está mal el dataprovider que yo puse o que... y no entendí de donde sale INTNUMCLIENTE seguramente va otra variable en su lugar.

Y nuevamente muchas gracias...

Este es el código de la tabla que cree...
Código:
var sql:String = 
          "CREATE TABLE IF NOT EXISTS clientes (" + 
          "    id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
          "    nombre TEXT, " + 
          "    direccion TEXT, " + 
          "    telefono TEXT, " + 
          "    email TEXT)";
				
createStmt.text = sql;
y este es el codigo donde se eliminarian los registros....
Código:
...

private function dgChangeHandler(event:ListEvent):void		
{
	
id_seleccion = event.target.selectedItem.id;
        	
// Si quieres hacerlo por nombre, direccion, etc. puedes obtener estos datos del registro seleccionado de la siguiente forma:
var nombre_sel:String = event.target.selectedItem.nombre;
var direccion_sel:String = event.target.selectedItem.direccion;
var telefono_sel:String = event.target.selectedItem.telefono;
var email_sel:String = event.target.selectedItem.email;
		       
// Ya tenemos el id del registro que fue seleccionado y que queremos borrar
var deleteManager:SQLStatement = new SQLStatement();
      deleteManager.sqlConnection = conn;
			
      deleteManager.text = "DELETE FROM clientes WHERE id = :id";
      deleteManager.parameters[":id"] = id_seleccion;	
      deleteManager.execute();
}
	           
]]>
</mx:Script>
	
<mx:Panel title="Registro de Usuarios" height="323" width="453" id="panel1">        
        <mx:TextInput id="busqueda"/>
        <mx:Button label="Buscar" click="buscarDatos()" id="button1"/>        
        <mx:DataGrid id="registros_dg" dataProvider="{id_registro}" width="100%" height="191" y="50" click="dgChangeHandler()">        
            <mx:columns>
                <mx:DataGridColumn headerText="NOMBRE" dataField="nombre" />
                <mx:DataGridColumn headerText="DIRECCION" dataField="direccion"/>
                <mx:DataGridColumn headerText="TELEFONO" dataField="telefono"/>
                <mx:DataGridColumn headerText="E-MAIL" dataField="email"/>
            </mx:columns>
        </mx:DataGrid>        
</mx:Panel>
        
</mx:WindowedApplication>
__________________
Saludos!!!
Maru.-
Maru77 está desconectado   Responder Citando
Antiguo 08-may-2008, 16:10   #4 (permalink)
carlxime está en el buen camino
 
Avatar de carlxime
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 141
Re: Como eliminar registros de una tabla

Hola Maru77,

INTNUMCLIENTE es un ejemplo del id de una tabla, en tu caso sería id.
El código del listener del datagrid sería:

Código:
private function dgChangeHandler(event:ListEvent):void		
{
	var id_seleccion:Number = event.target.selectedItem.id;
	var deleteManager:SQLStatement = new SQLStatement();
	deleteManager.sqlConnection = conn;
			
	deleteManager.text = "DELETE FROM clientes WHERE id = :id";
	deleteManager.parameters[":id"] = id_seleccion;	
	deleteManager.execute();
}
Lo que no veo es cómo llenas tu dataProvider, es decir, cómo le metes los datos de NOMBRE, DIRECCION, TELEFONO, etc.
En tu código ¿id_registro es un arreglo?

Nada más faltaría esa parte, ver cómo lo llenas para que podamos obtener el id del registro en el momento en que se selecciona un renglón del dataGrid. Aún así, te pongo un ejemplo de como lo lleno yo (Tabla: Divisa):

----------------------------------------------------------------------------------
Código:
var query:SQLStatement = new SQLStatement();
query.sqlConnection = conn;
query.text = "SELECT * FROM tbldivisa ORDER BY STRNOMBRE asc";
		
try {
       query.execute();
       var result:SQLResult = query.getResult();
       var numResults:int = result.data.length;
		    
       for (var i:int = 0; i < numResults; i++)
       {
              var row:Object = result.data[i];
              data_provider.push({divisa:row.nombre, id_div:row.id});
       }
		    
	divisas_dg.dataProvider = data_provider;
}
catch(error:SQLError) {
       trace("SQLError");
}
Poner el id dentro del dataprovider del datagrid no hace que el id aparezca en tu datagrid si es que no tienes especificado una columna con ese nombre (Por ejemplo, en mi caso, en el datagrid sólo muestro el nombre de las divisas y sus botones para editar y borrar). Teniendo ya el id dentro del dataprovider ya es muy fácil obtenerlo cuando dan click sobre algún renglón del datagrid, siguiendo la forma que te puse arriba.
----------------------------------------------------------------------------------

A lo mejor no es necesario tanta explicación pero bueno, espero te sirva.

Saludos.
carlxime está desconectado   Responder Citando
Antiguo 09-may-2008, 13:54   #5 (permalink)
Maru77 está en el buen camino
 
Fecha de Ingreso: agosto-2003
Mensajes: 193
Re: Como eliminar registros de una tabla

Primero te agradezco la paciencia y el tiempo para responder y enseñarme, ninguna explicación está demás.... ahora si te molesto de nuevo con una nueva consulta...

Traté de readaptar lo que me pusiste respecto del dataprovider, la búsqueda la sigue haciendo bien, pero sigo sin poder eliminar el registro que selecciono, no encuentro el error...

Te copio el código como lo tengo...

Código:
private function buscarDatos():void
{
	  			
  var selectStmt:SQLStatement = new SQLStatement();
  selectStmt.sqlConnection = conn;
				
			
  var sql:String = 
    "SELECT * FROM clientes WHERE (nombre = :search)";
  selectStmt.parameters[":search"] = busqueda.text;				    
  selectStmt.text = sql;
				
			
try {
       query.execute();
       var result:SQLResult = query.getResult();
       var numResults:int = result.data.length;	    
					    
       for (var i:int = 0; i < numResults; i++)
       {
              var row:Object = result.data[i];
              data_provider.push({clientes:row.nombre, id_registro:row.id});
				              
       }
						    
	  registros_dg.dataProvider = data_provider;
      }
	
      catch(error:SQLError) {
       trace("SQLError");
    }
				
     selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
     selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);
				
     selectStmt.execute();
				
     function selectResult(event:SQLEvent):void
    {
        selectStmt.removeEventListener(SQLEvent.RESULT, selectResult);
        selectStmt.removeEventListener(SQLErrorEvent.ERROR, selectError);

        var result:SQLResult = selectStmt.getResult();				
        registros_dg.dataProvider = result.data;
   }
				
   function selectError(event:SQLErrorEvent):void
   {
          Alert.show("Error message:", event.error.message);
          Alert.show("Details:", event.error.details);
   }

}
			
			
			

function createListener(event:SQLEvent):void
{	
   registros_dg.addEventListener(ListEvent.CHANGE, dgChangeHandler);
}		
			
			
private function dgChangeHandler(event:ListEvent):void		
{
   var id_seleccion = event.target.selectedItem.id;
        	
    var nombre_sel:String = event.target.selectedItem.nombre;
    var direccion_sel:String = event.target.selectedItem.direccion;
    var telefono_sel:String = event.target.selectedItem.telefono;
    var email_sel:String = event.target.selectedItem.email;
		       
    var deleteManager:SQLStatement = new SQLStatement();
    deleteManager.sqlConnection = conn;
			
    deleteManager.text = "DELETE FROM clientes WHERE id = :id";
    deleteManager.parameters[":id"] = id_seleccion;	
    deleteManager.execute();
}
	           
]]>
</mx:Script>
	
<mx:Panel title="Registro de Usuarios" height="323" width="453" id="panel1">        
        <mx:TextInput id="busqueda"/>
        <mx:Button label="Buscar" click="buscarDatos()" id="button1"/>        
        <mx:DataGrid id="registros_dg" dataProvider="{id_registro}" width="100%" height="191" y="50" click="dgChangeHandler()">        
            <mx:columns>
                <mx:DataGridColumn headerText="NOMBRE" dataField="nombre" />
                <mx:DataGridColumn headerText="DIRECCION" dataField="direccion"/>
                <mx:DataGridColumn headerText="TELEFONO" dataField="telefono"/>
                <mx:DataGridColumn headerText="E-MAIL" dataField="email"/>
            </mx:columns>
        </mx:DataGrid>        
</mx:Panel>
        
</mx:WindowedApplication>
__________________
Saludos!!!
Maru.-
Maru77 está desconectado   Responder Citando
Antiguo 09-may-2008, 15:14   #6 (permalink)
carlxime está en el buen camino
 
Avatar de carlxime
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 141
Re: Como eliminar registros de una tabla

Creo que hay un error en el orden del código, quedaría así:

Código:
private function buscarDatos():void
{
	  			
  var selectStmt:SQLStatement = new SQLStatement();
  selectStmt.sqlConnection = conn;
				
			
  var sql:String = "SELECT * FROM clientes WHERE (nombre = :search)";
  selectStmt.parameters[":search"] = busqueda.text;				    
  selectStmt.text = sql;
				
  selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
  selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);
				
  selectStmt.execute();
				
  function selectResult(event:SQLEvent):void
  {
      selectStmt.removeEventListener(SQLEvent.RESULT, selectResult);
      selectStmt.removeEventListener(SQLErrorEvent.ERROR, selectError);

      var result:SQLResult = selectStmt.getResult();
      for (var i:int = 0; i < result.data.length; i++)
      {
            var row:Object = result.data[i];
            data_provider.push({id_registro:row.id, nombre:row.nombre, direccion:row.direccion, email:row.email});					              
      }
      registros_dg.dataProvider = result.data;
   }
				
   function selectError(event:SQLErrorEvent):void
   {
          Alert.show("Error message:", event.error.message);
          Alert.show("Details:", event.error.details);
   }

}

function createListener(event:SQLEvent):void
{	
   registros_dg.addEventListener(ListEvent.CHANGE, dgChangeHandler);
}		
			
			
private function dgChangeHandler(event:ListEvent):void		
{
   var id_seleccion = event.target.selectedItem.id_registro;
	       
   var deleteManager:SQLStatement = new SQLStatement();
   deleteManager.sqlConnection = conn;			
   deleteManager.text = "DELETE FROM clientes WHERE id = :id";
   deleteManager.parameters[":id"] = id_seleccion;	
   deleteManager.execute();
}
	           
]]>
</mx:Script>
	
<mx:Panel title="Registro de Usuarios" height="323" width="453" id="panel1">        
        <mx:TextInput id="busqueda"/>
        <mx:Button label="Buscar" click="buscarDatos()" id="button1"/>        
        <mx:DataGrid id="registros_dg" width="100%" height="191" y="50" click="dgChangeHandler()">        
            <mx:columns>
                <mx:DataGridColumn headerText="NOMBRE" dataField="nombre" />
                <mx:DataGridColumn headerText="DIRECCION" dataField="direccion"/>
                <mx:DataGridColumn headerText="TELEFONO" dataField="telefono"/>
                <mx:DataGridColumn headerText="E-MAIL" dataField="email"/>
            </mx:columns>
        </mx:DataGrid>        
</mx:Panel>
        
</mx:WindowedApplication>
Las palabras que están en negritas deberás cambiarlas de acuerdo al nombre de las columnas de tu tabla Clientes.

Le quité el detaprovider en el tag del DataGrid, no sé si de inicio muestres unos datos y cuando hacen la búsqueda se refresque el DataGrid, en ese caso, deberás crear el dataProvider de la misma forma en que lo estas haciendo en la función selectResult.

Saludos.
carlxime está desconectado   Responder Citando
Antiguo 12-may-2008, 13:31   #7 (permalink)
Maru77 está en el buen camino
 
Fecha de Ingreso: agosto-2003
Mensajes: 193
Re: Como eliminar registros de una tabla

Bueno ya casi... data_provider me dice que es una propiedad indefinida pero cuando quiero declararla me salen muchos mas errores...

Código:
...
for (var i:int = 0; i < result.data.length; i++)
{
            var row:Object = result.data[i];
            data_provider.push({id_registro:row.id, nombre:row.nombre, direccion:row.direccion, telefono:row.telefono, email:row.email});			              
}

registros_dg.dataProvider = result.data;
Mil gracias!
__________________
Saludos!!!
Maru.-
Maru77 está desconectado   Responder Citando
Antiguo 12-may-2008, 15:49   #8 (permalink)
carlxime está en el buen camino
 
Avatar de carlxime
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 141
Re: Como eliminar registros de una tabla

Cierto, hay dos errores en el código, perdona.

1. Hay que cambiar lo de registros_dg.dataProvider = result.data; por registros_dg.dataProvider = dataProvider;

2. Hay que declarar en la parte de arriba en la sección de <mx:Script> la variable data_provider:
private var data_provider:Array = new Array();

Espero que ya funcione

Saludos.
carlxime está desconectado   Responder Citando
Antiguo 13-may-2008, 13:19   #9 (permalink)
Maru77 está en el buen camino
 
Fecha de Ingreso: agosto-2003
Mensajes: 193
Re: Como eliminar registros de una tabla

Cambié lo de registros_dg.dataProvider = dataProvider; y declaré la variable private var data_provider:Array = new Array(); pero me sale error 1136 incorrect number of arguments Expected 1 en la linea

Código:
...
<mx:DataGrid id="registros_dg" width="100%" height="191" y="50" click="dgChangeHandler()">
...
__________________
Saludos!!!
Maru.-
Maru77 está desconectado   Responder Citando
Antiguo 13-may-2008, 14:16   #10 (permalink)
carlxime está en el buen camino
 
Avatar de carlxime
 
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 141
Re: Como eliminar registros de una tabla

Ya vi por qué

Creo que ahora sí va a funcionar bien

Código:
// Debe ser data_provider que es el arreglo que estamos llenando con los datos del datagrid
registros_dg.dataProvider = data_provider;
En la línea donde te marca error hay que quitar lo de click="dgChangeHandler()" ya que necesitamos obtener el evento que generó la selección de uno de los registros del datagrid. Para eso vamos a crear un listener del evento ListEvent.CHANGE.

No olvides hacer el import del ListEvent y declarar primero la variable data_provider al inicio de tu área de scripts:

Código:
<mx:Script>
		<![CDATA[
                        import mx.events.ListEvent;

			private var data_provider:Array = new Array(); 
			
			public function init():void {
			          registros_dg.addEventListener(ListEvent.CHANGE, dgChangeHandler);
			}
		]]>
</mx:Script>
La función init debe ser llamada cuando se carga la ventana de tu aplicación que contiene el datagrid, ya sea en show = "init()" o bien en creationComplete = "init()"

Ejemplo:

Código:
<mx:WindowedApplication creationComplete="init();" ....
Saludos y espero que ahora sí salga
carlxime está desconectado   Responder Citando
Antiguo 16-may-2008, 12:33   #11 (permalink)
Maru77 está en el buen camino
 
Fecha de Ingreso: agosto-2003
Mensajes: 193
Respuesta: Como eliminar registros de una tabla

Finalmente funciono! ...ahora quedan ajustar algunos detalles.

Gracias, gracias, gracias....
__________________
Saludos!!!
Maru.-
Maru77 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 10:31.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93