none
Borrar registros en una tabla RRS feed

  • Pregunta

  • Buenos días,

    Quisiera eliminar un registro de una tabla llamada "Gestiones"  y estoy pasando como parámetro IdGestion pero el campo IdGestion es autoincremental. Hay forma de hacerlo de forma que cuando presione click sobre dicho registro sea eliminado sin tener que colocar el IdGestion de manera manual en el DELETE FROM Gestiones WHERE IdGestion =3 o al IdGestion que necesite eliminar? 

    Gracias

    jueves, 24 de agosto de 2017 13:19

Respuestas

  • Deberias crear id mas complejos  un ejemplo

       Dependiendo de tu regla de negocio si el cliente solo puede hacer una gestion por dia seria asi

    GES-00001-IDCLIENTE-FPROCESO 

    Si no fuese asi

    GES-00001-1-IDCLIENTE-FPROCESO

    GES-00001-2-IDCLIENTE-FPROCESO

    GES-00001-3-IDCLIENTE-FPROCESO

    Asi evitarias dar constamente ordenes y ver cuantos registros o gestiones han hecho tus clientes obtiendo en un consulta algo  asi

    SELECT  * FROM gestion where icliente=x order by fproceso desc o asc  LIMIT 1 


    Pasa los puntos prro v:

    • Propuesto como respuesta Moderador M lunes, 28 de agosto de 2017 22:23
    • Marcado como respuesta Moderador M viernes, 1 de septiembre de 2017 18:05
    lunes, 28 de agosto de 2017 17:52

Todas las respuestas

  • deberias mostrar unos cuantos registros para ver que otro dato lo puedes usar  en todo caso.

    Pero la sintaxis es simple :

    DELETE FROM table_nameWHERE condition;

    DELETE FROM GestionesWHERE idGestion=3;

    Como veo necesitas hacerlo sin darle el 3 al solo darle clic al control? Pues tienes que especificar con que control estas trabajando  Ejemplo: Un Datagridview

    Para eliminar de un solo clic deberias hacer un currentrow * pero de igual forma le pasas el Id o la condicion dependiendo que otro dato manejes.


    Pasa los puntos prro v:


    jueves, 24 de agosto de 2017 13:50
  • Para eliminar el registro (y solo ese registro) necesitas pasar ALGUN dato que identifique el registro de forma unívoca. Ese dato típicamente es la clave primaria, que a su vez presumiblemente es ese campo autoincremental que mencionabas. No obstante, si por alguna extraña razón no quieres usar ese campo, también puedes usar cualquier otro campo o combinación de campos, a condición de que sepas con seguridad que no pueden existir dos registros en los que se repita esa misma combinación de campos (si así fuera, se borrarían los dos registros). Por ejemplo:

    DELETE FROM Gestiones WHERE Asunto=18 AND Persona=43 and Resuelto=1

    jueves, 24 de agosto de 2017 13:53
  • Si la unica columna que identifica unicamente filas en esa tabla es IdGestion entonces no, de lo contario pudieras usar las otras columnas que identifican de forma unica una fila.

    Existe otra opcion si es que usas un cursor para recorrer las filas pero verdad que yo no tengo mucha experiencia en su uso.

    DECLARE @T table (
    col1 int,
    col2 int);
    
    INSERT INTO @T (
    	col1,
    	col2
    	)
    VALUES (1, 2), (1, 2), (3, 4);
    
    DECLARE @C CURSOR, @i int;
    
    SET @c =  CURSOR LOCAL FOR SELECT col1 FROM @T;
    
    OPEN @C;
    
    FETCH FROM @C INTO @i;
    
    WHILE 1 = 1
    BEGIN
    	IF @@FETCH_STATUS <> 0
    		BREAK;
    
    	IF @i % 3 = 0
    		DELETE FROM @T WHERE CURRENT OF @c;
    		
    	FETCH FROM @C INTO @i;
    END;
    
    SELECT * FROM @T;
    GO


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    jueves, 24 de agosto de 2017 14:02
  • ¿A qué te refieres cuando mencionas: "de forma que cuando presione clic sobre dicho registro sea eliminado"?

    ¿Qué "cosa" contiene al registro?, si "lo que contiene al registro" tiene el identificador de la fila entonces basta con tomar el valor y asignarlo a la expresión de filtro. Por ejemplo, si te refieres a que el registro está contenido en una fila de tipo DataGridViewRow entonces la expresión de filtro debe considerar el valor de la columna que contiene el identificador, claro, de ser el caso que exista.

    Dim Cmd As New SqlCommand("DELETE FROM Gestiones WHERE IdGestion = @IdGestion", Conn)
    
    Cmd.Parameters.AddWithValue("IdGestion", CInt(dgv1.CurrentRow.Cells("IdGestion").Value))


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta Moderador M lunes, 28 de agosto de 2017 4:33
    • Votado como útil Moderador M lunes, 28 de agosto de 2017 22:23
    viernes, 25 de agosto de 2017 1:15
  • Hola William me refiero a que debo combinarlo con un botón desarrollado en C# para eliminar registros y la gestión que se desee eliminar. el botón sería sobre el panel de gestiones que apunta a la tabla gestiones y claro quiero hacer que dicho botón tenga el código de eliminar la gestión que se seleccione para su eliminación.
    lunes, 28 de agosto de 2017 15:40
  • Hola Autis, estos son los otros datos de la tabla que estoy manejando de gestiones

    IdGestion IdOperador IdPersona Fecha

    IdGestion(la gestión que tenga cargada la persona)

    IdOperador (operador que haya realizado la gestión)

    IdPersona (Id del cliente gestionado)

    Fecha (fecha en la que fue creada la gestión)


    lunes, 28 de agosto de 2017 15:44
  • Deberias crear id mas complejos  un ejemplo

       Dependiendo de tu regla de negocio si el cliente solo puede hacer una gestion por dia seria asi

    GES-00001-IDCLIENTE-FPROCESO 

    Si no fuese asi

    GES-00001-1-IDCLIENTE-FPROCESO

    GES-00001-2-IDCLIENTE-FPROCESO

    GES-00001-3-IDCLIENTE-FPROCESO

    Asi evitarias dar constamente ordenes y ver cuantos registros o gestiones han hecho tus clientes obtiendo en un consulta algo  asi

    SELECT  * FROM gestion where icliente=x order by fproceso desc o asc  LIMIT 1 


    Pasa los puntos prro v:

    • Propuesto como respuesta Moderador M lunes, 28 de agosto de 2017 22:23
    • Marcado como respuesta Moderador M viernes, 1 de septiembre de 2017 18:05
    lunes, 28 de agosto de 2017 17:52