[SOLUCIONADO] Problema con Eliminar 1 registro de la base de datos

Iniciado por kannalla, 5 Noviembre 2009, 02:08 AM

0 Miembros y 1 Visitante están viendo este tema.

kannalla

bueno mi problema es el siguiente... este codigo que hize funciona 100% pero hay un detalle que no me gusta y no cacho como sacarlo.. tengo una clase persona y lo llamo desde mi frmEliminar .

el problema es el siguiente.. yo para eliminar, mi sistema me exige que tenga un txtclave.text y txttipo.text (texbox1) en el formulario.

y todos sabemos que para eliminar un registro no es necesario colocar su clave y tipo , basta con el nombre o rut y listo. pero en mi caso si le saco los txtclave.text y txttipo.text no me corre y me tira errores...
alguien me puede decir donde esta el detalle para poder sacar de mi formulario los textbox


CODIGO DE LA CLASE
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Data.SqlClient
Imports System.Data
Imports Auditoria_de_impresion

Public Class clasePersona

   Public Sub New(ByVal perNombre As String, ByVal perContraseña As String, ByVal perTipo As Integer)
       Dim usuNombre As String
       Dim usuClave As String
       Dim usuTipo As Integer
       usuNombre = perNombre
       usuClave = perContraseña
       usuTipo = perTipo

   End Sub

Dim conexion As String = "Data Source=localhost\SQLExpress;Initial Catalog=BDIMPRESION;database = usuario; trusted_connection = yes;Integrated Security = True; User Instance=True"

Public Function eliminarUsuario(ByVal usuario As String, ByVal clave As String, ByVal tipo As Integer) As Boolean
       Dim cn As New SqlClient.SqlConnection(conexion)
       Dim cmd As New SqlClient.SqlCommand("Delete from usuarios Where perNombre = '" & usuario & "' ", cn)
       Dim valor As Integer
       Try
           If cn.State = ConnectionState.Closed Then
               cn.Open()
           End If
           valor = cmd.ExecuteNonQuery()
           MsgBox("Usuario Eliminado del Sistema ", MsgBoxStyle.Information)
       Finally
           cn.Close()
       End Try
       Return valor
   End Function


CODIGO DEL FORM

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       Dim clasePersona As clasePersona = New clasePersona(txtEliminar.Text, txtclave.Text, txttipo.Text)
       clasePersona.eliminarUsuario(txtEliminar.Text, txtclave.Text, txttipo.Text)


       'If MsgBox("Desea Eliminar al Usuario", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Eliminar") = MsgBoxResult.Yes Then

       ' End If
   End Sub

seba123neo

Hola, seria bueno que digas que error te esta tirando y en que parte del codigo...mira veo varias cosas que podes mejorar, una es que la clase deberia tener sus propiedades o sea los Get y Set...la otra es que no es bueno estar conectandose y desconectandose a cada rato, te conectas una sola vez a la base y listo despues manejas esa conexion como publica y listo la usas en cualquier lado, pero no estar haciendo el .Open a cada rato...lo haces una vez y ya esta, lo mismo para las clases, las deberias declarar una sola vez como publicas y usar ese objeto en todo el proyecto cuando te de la gana, y no estar creando a cada rato la clase.un registro se borra principalmete por su ID que lo identifica y debe ser unico, ahi estas borrando por nombre y si por casualidad hay 2 personas con el mismo nombre te las borra todas..debes usar el ID, no el nombre.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

kannalla

ahora puedo eliminar sin que tenga que agregar los textbox de contraseña y de tipo... ahora solo con el nombre y listo.

Gracias amigo Seba tuve que hacerle algunos cambios deacuerdo a tus criticas del codigo... bueno no soy tan experto en visual.. de a poquito me estoy puliendo jejjejee  aca el codigo 100% operativo


SOLUCION PARA LOS QUE LO QUIERAN:



Public Class clasePersona

    Public Sub New(ByVal perNombre As String, ByVal perContraseña As String, ByVal perTipo As Integer)
        Dim Nombre As String
        Dim Clave As String
        Dim Tipo As Integer
        Nombre = perNombre
        Clave = perContraseña
        Tipo = perTipo

    End Sub


Public Function eliminarUsuario(ByVal usuario As String) As Boolean
        Dim cn As New SqlClient.SqlConnection(conexion)
        Dim cmd As New SqlClient.SqlCommand("Delete from usuarios Where perNombre = '" & usuario & "' ", cn)
        Dim valor As Integer
        Try
            If cn.State = ConnectionState.Closed Then
                cn.Open()
            End If
            valor = cmd.ExecuteNonQuery()
            MsgBox("Usuario Eliminado del Sistema ", MsgBoxStyle.Information)
        Finally
            cn.Close()
        End Try
        Return valor
    End Function





Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim clasePersona As clasePersona = New clasePersona("usuario", "clave", tipo)

        clasePersona.eliminarUsuario(txtNombre.Text)

    End Sub