ASP.NET - problema para actulizar rut Proveedor

   
Vista:

problema para actulizar rut Proveedor

Publicado por djnilo (20 intervenciones) el 09/07/2015 15:03:27
Buenos días
Amigos Foro si alguien me puede orientar por fa tengo un procedimiento almacenado para actualizar el rut de un proveedor
mysql
asp.net vb
este es mi procedimiento almacenado para actulizar rut e agregado un parametro mas para actulizar rut del proveedor
rut hago la consulta al procedemiento where Rut_Proveedor = Rut_Proveedor pero tambien quiero actulizar rut
entoces agregar un paramentro mas para actulizar y puse. UPDATE Rut_Proveedor = Rut_Change pero lo que paso es que actulizo toda tabla con el mismo rut quedo la envarrada
si me puede orientar para ver que me falta gracias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_ACTULIZARPROVEEDOR`(IN Rut_Proveedor int,
IN Rut_Change int,
IN Proveedor VARCHAR(60),
IN Nombre VARCHAR(50),
IN Giro VARCHAR(50),
IN Direccion VARCHAR(60),
IN Ciudad VARCHAR(60),
IN Fono int,
IN Fax VARCHAR(45),
IN Correo VARCHAR(60),
IN web VARCHAR(100))
BEGIN
UPDATE proveedor SET
Rut_Proveedor=Rut_Change,Nombre=Nombre,Giro=Giro,Direccion=Direccion,Ciudad=Ciudad,Fono=Fono,Fax=Fax,Correo=Correo,Web=web
WHERE Rut_Proveedor = Rut_Proveedor;
end

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
Public Function ActulizarProveedor(datos As vproveedor) As Integer
 
        'Declaramos una variable Mysqlcomand'
        Dim cmd As New MySqlCommand
        Try
            'Usuamos nuestra conexion' 
            cmd.Connection = conn
            'indicamos que utilizaremos un procedimiento'
            cmd.CommandType = CommandType.StoredProcedure
            'indicamos el nombre del procedimiento de nuestra base de datos MYSQL'
            cmd.CommandText = "SP_ACTULIZARPROVEEDOR"
            'Declaramos e igualamos los parametros nuestro procedimiento SP_INSERT_Coti y de la funcion'
            cmd.Parameters.Add("?Rut_Proveedor", MySqlDbType.Int32).Value = datos._Rut_Proveedor
            cmd.Parameters.Add("?Rut_Change", MySqlDbType.Int32).Value = datos._Rut_Proveedor
            cmd.Parameters.Add("?Proveedor", MySqlDbType.VarChar, 60).Value = datos._Proveedor
            cmd.Parameters.Add("?Nombre", MySqlDbType.VarChar, 50).Value = datos._Nombre
            cmd.Parameters.Add("?Giro", MySqlDbType.VarChar, 60).Value = datos._Giro
            cmd.Parameters.Add("?Direccion", MySqlDbType.VarChar, 60).Value = datos._Direccion
            cmd.Parameters.Add("?Ciudad", MySqlDbType.VarChar, 60).Value = datos._Ciudad
            cmd.Parameters.Add("?Fono", MySqlDbType.Int32).Value = datos._fono
            cmd.Parameters.Add("?Fax", MySqlDbType.VarChar, 45).Value = datos._Fax
            cmd.Parameters.Add("?Correo", MySqlDbType.VarChar, 60).Value = datos._Correo
            cmd.Parameters.Add("?web", MySqlDbType.VarChar, 100).Value = datos._Web
 
 
            'Declaramos un integer(entero)'
            Dim i As Integer
            'Abrimos nuestra conexion'
            conn.Open()
            'Se almacenara en nuestro entero el valor de la ejecucion de nuestro procedimiento'
            'por ejemplo si 0 no se pudo ejecutar, en cambio si es 1 se ejecuto correctamente'
            i = cmd.ExecuteNonQuery()
            'Cerramos nuestra conexion'
            conn.Close()
            'Nos retornara un resultado'
            Return i
        Catch ex As MySqlException
            Return MsgBox(ex.Message)
            'MsgBox("Error al operar con la base de datos!", MsgBoxStyle.Critical, "Error!")
        End Try
 
    End Function
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
Protected Sub BtnActulizar_Click(sender As Object, e As System.EventArgs) Handles BtnActulizar.Click
        Dim datos As New vproveedor
        Dim actulizar As New fproveedor
 
        If Txtrut.Text = "" Then
            MsgBox("el Rut no debe estar en blanco", MsgBoxStyle.Information, "Sic Atacama")
            Txtrut.Focus()
        ElseIf TxtProveedor.Text = "" Then
            MsgBox("El campo Proveedor no puede estar en blanco.", _
                  vbExclamation + vbOKOnly, _
                  "Proveedor")
            TxtProveedor.Focus()
        ElseIf TxtContacto.Text = "" Then
            MsgBox("El campo Contacto no puede estar en blanco.", _
                   vbExclamation + vbOKOnly, _
                   "Contacto")
            TxtContacto.Focus()
        ElseIf TxtDireccion.Text = "" Then
 
            MsgBox("El campo Direccion no puede estar en blanco.", _
                   vbExclamation + vbOKOnly, _
                   "Direccion")
            TxtDireccion.Focus()
        Else
 
            datos._Rut_Proveedor = Txtrut.Text
            datos._Rut_Change = Txtrut.Text
            datos._Proveedor = TxtProveedor.Text
            datos._Nombre = TxtContacto.Text
            datos._Giro = TxtGiro.Text
            datos._Direccion = TxtDireccion.Text
            datos._Ciudad = TxtCiudad.Text
            datos._fono = TxtFono.Text
            datos._Fax = TxtFax.Text
            datos._Correo = TxtCorreo.Text
            datos._Web = TxtWeb.Text
 
 
 
            If actulizar.ActulizarProveedor(datos) Then
                MsgBox("los datos se actulizaron correctamente...", MsgBoxStyle.Information, "Sic Atacama")
                'LLenarGrid()
                Limpiar()
                Txtrut.Focus()
            Else
                MsgBox("Error al actulizar datos...", MsgBoxStyle.Information, "Sic Atacama")
            End If
        End If
    End Sub




20039c0
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

problema para actulizar rut Proveedor

Publicado por Khristtian (80 intervenciones) el 10/07/2015 16:02:12
Cuando el RUT es un campo clave.... no se puede cambiar.

Si el RUT pudiese cambiarse, cosa, que suele pasar, por ejemplo, cuando un usuario ingresa un RUT erróneo, resulta necesario actualizar a la persona su RUT correcto.

Lo que debes hacer es pensar siempre antes de modelar tu base de datos, las posibilidades que se podrían dar.

Yo al menos, siempre incluyo un campo ID (No clave, pero si único) de tipo autonumerico, de manera que cuando quiero actualizar un Rut, la consulta del RUT debe devolverte el ID que representa la fila de ese RUT en la base de datos, así, en dos pasos (o en uno), puedes recuperar los datos del cliente asociado al RUT erróneo, y obtener su ID, de manera que en un segundo paso, actualizas el RUT no por el campo del mismo RUT, sino que por su ID.

-----

Por que si el procedimiento es para actualizar el RUT... actualizar todos los campos???

Cuando recibes parámetros.... NO deben llamarse igual que el campo...!

Prueba así:
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_ACTULIZARPROVEEDOR`(IN rutProveedor int....
....
....
....
WHERE Rut_Proveedor = rutProveedorProveedor;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

problema para actulizar rut Proveedor

Publicado por djnilo (20 intervenciones) el 10/07/2015 20:00:19
gracias khristian despuedes de tanto pensar decir dejarlo asi como dices tu con el id gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar