• Sábado 9 de Noviembre de 2024, 02:21

Autor Tema:  Sintaxis Delete  (Leído 3033 veces)

Vortice

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Sintaxis Delete
« en: Viernes 7 de Septiembre de 2007, 23:22 »
0
tengo una aplicacion en donde quiero eliminar registros de una BD Sql Server 2000 y lo hago desde VB.Net y no hace nada, adjunto codigo si alguien me hecha una mano gracias, aunque a estas alturas de la semana se comprenderia q no haiga nadie....de antemano gracias

If condicion = 2 Then
                Try
                    conectar_bd()
                    Command = New SqlCommand("DELETE FROM Tsolicitud (ID_solicitud_BD) WHERE condicion = 2")
                    Command.ExecuteNonQuery()
                    MsgBox("El Registro fue Eliminado Satisfactoriamnte")
                Catch ex As Exception
                    MsgBox("Se produjo un error intentelo denuevo")
                End Try
                Connection.Close()
Solo el Bueno muere joven...

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Sintaxis Delete
« Respuesta #1 en: Domingo 9 de Septiembre de 2007, 01:01 »
0
Borrar de una base de datos, noes tan simple como 'enviarle' la misión... la base de datos SQL están bastante afianzadas, lo que implica varias cosas: de entrada   debes tener privilegios como usuario en la base de datos ... y hacer el loogin correspondiente acorde a dichos privilegios ....

Dependiendo de la forma en que hayas implementado otras partes del programa deberás modificar la conectionstring y/o los permisos en la propia base de datos ... si ambas partes no son acordes no hay acuerdo para llevar a cabo la petición...
«Ma non troppo»
----> ModoVacaciones = False<----

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Sintaxis Delete
« Respuesta #2 en: Lunes 10 de Septiembre de 2007, 18:35 »
0
Hola, deberías mirar si simplemente no te hace nada o si te está devolviendo una excepción.

Si simplemente no te está haciendo nada es porque a lo mejor estás intentando borrar un registro que no existe (devería devolverte un valor 0 como valor de retorno el método ExecuteNonQuery() ). En el caso que te comenta Nebire, si no tuvieras permisos para hacer un borrado, CREO que el comando ExecuteNonQuery() te devolvería una SqlException, por lo que si haces un Try...Catch deberías poder capturar dicha excepción.

Si puedes facilitar más información sobre qué pasa una vez lanzas el DELETE (si te da excepción o no) a lo mejor podemos acotar el problema.

En caso que te dé excepción, mira a ver el mensaje descriptivo de la excepción, seguro que da información útil sobre qué te está pasando.

Saludos

Vortice

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Re: Sintaxis Delete
« Respuesta #3 en: Lunes 10 de Septiembre de 2007, 21:20 »
0
Camaradas valoro mucho su ayuda desde antemano gracias, adjunto parte del codigo q tengo ahora...

If condicion = 2 Then
                carga_datos()
                Try
                    conectar_bd()
                    Command = New SqlCommand("DELETE FROM Tsolicitud WHERE ID_solicitud_BD = 21")
                    Command.ExecuteNonQuery()
                    MsgBox("El Registro fue Eliminado Satisfactoriamnte")
                Catch ex As Exception
                    MsgBox("Se produjo un error intentelo denuevo")
                End Try
                Connection.Close()

al ejecutar el programa presiono el boton eliminar y lo unico q hace es darle el valor 2 a condicion luego presiono el boton confirmar y ahi se viene a esta parte del programa q adjunto y luego recorro el programa y llega al Query pasa al ExecuteNonQuery y salta al Catch, luego voy a la base de datos al administrador corpoartivo de SQL y el registro no lo ha borrado y no es un tema de Permisos porq tengo todos los permisos la base de datos es para hacer pruebas, cuando este listo el programa lo implementare a la base de datos original, espero haberme explicado.
Lo otro el mismo Query lo ejecuto en Transact SQL y lo elimina sin nigun problema espero puedan ayudarme......Gracias.
quizas el ExecuteNonQuery este mal utilizado (si pudieran explicarme la instruccion ExecuteNonQuery o algun lugar donde encontrar info con respecto a esas instrucciones relacionadas a base de datos).
Solo el Bueno muere joven...

Vortice

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Re: Sintaxis Delete
« Respuesta #4 en: Lunes 10 de Septiembre de 2007, 22:32 »
0
Camaradas ya descubri por que no funcionaba me faltaba agregar el Connection(variable conexion) al final del Query  :blink: pero ahora mi duda es otra .....

Funciona para elimiar un registro especifico, pero yo necesito q borre cualquier registro segun necesite el Usuario.

Al ejecutar mi programa pincho en el datagrid y me aparecen los datos de los diferentes campos en las diferentes cajas de texto, despues esos valores los cargo a diferentes variables y luego en el query condiciono despues del where si ID_solicitud_BD = ID_solicitud, donde la 1º variable es de la base de datos y la 2º variable es a la que le cargo los datos, esta mal hecho Camaradas, una ayudita please....

adjunto codigo
 
    Public Sub carga_datos()
        ID_solicitud = id_solic.Text
        Fecha_solicitud = fecha_solic.Text
        'Hora_solicitud = hora_solic.Text
        Nom_solicitante = Nom_solicitante
        Emp_solicitante = emp_solic.Text
        producto = com_prod_solic.Text
        contacto = com_contacto_solic.Text
        Tipo_soporte = com_tipo_de_soporte_solic.Text
        Fecha_venta = fecha_venta_solic.Text
        problematica = prob_solic.Text
    End Sub

If condicion = 3 Then
                    carga_datos()
                    Try
                        conectar_bd()
                        Command = New SqlCommand("DELETE FROM Tsolicitud WHERE ID_solicitud_BD = ID_solicitud", Connection)
                        Command.ExecuteNonQuery()
                        MsgBox("El Registro fue Eliminado Satisfactoriamnte")
                    Catch ex As Exception
                        MsgBox("Se produjo un error intentelo denuevo")
                    End Try
                    Connection.Close()
 :D
Solo el Bueno muere joven...

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Sintaxis Delete
« Respuesta #5 en: Martes 11 de Septiembre de 2007, 09:45 »
0
No estoy muy seguro de cuál es el problema al que te refieres, pero supongo que te refieres a que si pones directamente un "2" (por ejemplo) en la consulta te funciona, pero si pones lo de "ID_solicitud" ya no te funciona.

Esto es debido a que no tienes bien construida la consulta. Si pones "ID_solicitud" dentro de las comillas, lo que estás haciendo es meter la palabra "ID_solicitud" literalmente en la consulta, es decir, imagina que el usuario ha pinchado en la solicitud 5, la query que te queda con tu código:

Código: Text
  1.  
  2. Command = New SqlCommand(&#34;DELETE FROM Tsolicitud WHERE ID_solicitud_BD = ID_solicitud&#34;, Connection)
  3.  
  4.  

sería así (esto sería lo que enviarías al SQL Server y que por lógica debería darte una SqlException):

Código: Text
  1.  
  2. DELETE FROM Tsolicitud WHERE ID_solicitud_BD = ID_solicitud
  3.  
  4.  

Como ves, mete la palabra "ID_solicitud" en la propia consulta, no está metiendo su valor (el 5) porque lo has puesto dentro de las comillas en tu instrucción.

Sin embargo si cambias tu instrucción por ésta:

Código: Text
  1.  
  2. Command = New SqlCommand(&#34;DELETE FROM Tsolicitud WHERE ID_solicitud_BD = &#34; & ID_solicitud, Connection)
  3.  
  4.  

Tendrías que se envía al SQL Server la siguiente consulta:

Código: Text
  1.  
  2. DELETE FROM Tsolicitud WHERE ID_solicitud_BD = 5
  3.  
  4.  

Como ves, ahora sí hay un "5" dentro de la consulta, porque como "ID_solicitud" estaba fuera de las comillas en la instrucción lo que está haciendo es poner el valor de la variable, no su nombre.

Siempre que pongas cosas dentro de comillas en una consulta de este tipo, lo que estás haciendo es poner literalmente eso que has escrito dentro. Si lo que quieres es que se ponga el valor de una variable, has de ponerlo fuera de las comillas y concatenarlo (con el "&").

Saludos

Vortice

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Re: Sintaxis Delete
« Respuesta #6 en: Martes 11 de Septiembre de 2007, 15:47 »
0
Gracias Camarada Scherzo, resulto a la perfeccion ahora vamos por el actualizar pero ya se como hacerlo muchas gracias...... :kicking:
Solo el Bueno muere joven...

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Sintaxis Delete
« Respuesta #7 en: Martes 11 de Septiembre de 2007, 17:06 »
0
De nada, suerte con la actualización. ;)

Saludos