Foros del Web » Creando para Internet » Flash y Actionscript »

Como eliminar registros de una tabla

Estas en el tema de Como eliminar registros de una tabla en el foro de Flash y Actionscript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/05/2008, 12:00
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
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.-
  #2 (permalink)  
Antiguo 07/05/2008, 15:15
Avatar de carlxime  
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 6
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.
  #3 (permalink)  
Antiguo 08/05/2008, 13:34
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
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.-
  #4 (permalink)  
Antiguo 08/05/2008, 16:10
Avatar de carlxime  
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 6
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.
  #5 (permalink)  
Antiguo 09/05/2008, 13:54
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
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.-
  #6 (permalink)  
Antiguo 09/05/2008, 15:14
Avatar de carlxime  
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 6
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.
  #7 (permalink)  
Antiguo 12/05/2008, 13:31
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
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.-
  #8 (permalink)  
Antiguo 12/05/2008, 15:49
Avatar de carlxime  
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 6
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.
  #9 (permalink)  
Antiguo 13/05/2008, 13:19
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
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.-
  #10 (permalink)  
Antiguo 13/05/2008, 14:16
Avatar de carlxime  
Fecha de Ingreso: marzo-2007
Ubicación: México
Mensajes: 180
Antigüedad: 17 años, 8 meses
Puntos: 6
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
  #11 (permalink)  
Antiguo 16/05/2008, 12:33
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Como eliminar registros de una tabla

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

Gracias, gracias, gracias....
__________________
Saludos!!!
Maru.-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:57.