none
Validar existencia

    Pregunta

  • Hola, tengo una función la cual se encarga de comparar que no se repitan ciertos valores de los campos a la hora de guardarlos, el error que tengo es el siguiente

    En la linea de codigo  Return CInt(cmd.ExecuteScalar) > 0 el siguiente mensaje "Debe declarar la variable escalar ""@codigoAND"

     Public Function ValidarExistencia(ByVal Nombre As String, ByVal Id_producto As Integer, ByVal Codigo As String) As Boolean
    
            Using con As New SqlConnection("...")
                con.Open()
    
                Dim query = "SELECT COUNT(*) FROM Productos WHERE Nombre = @Nombre or Codigo = @Codigo" &
                 "AND Id_producto <> @Id_producto"
                Dim cmd As New SqlCommand(query, con)
                cmd.Parameters.AddWithValue("@Nombre", Nombre)
                cmd.Parameters.AddWithValue("@Id_producto", Id_producto)
                cmd.Parameters.AddWithValue("@Codigo", Codigo)
                Return CInt(cmd.ExecuteScalar) > 0
            End Using
    
        End Function
        If Not ValidarExistencia(txtNombre.Text, Id_producto, txtcodigobar.Text) Then
    ...


    Como podría solucionarlo?

    Saludos


    • Editado Laura321 miércoles, 11 de enero de 2017 0:54
    miércoles, 11 de enero de 2017 0:53

Respuestas

  • Laura321,

    El error menciona que no encuentra la variable @codigoAND, ¿no crees que el nombre la variable y el operador lógico lo toma como una sola variable porque olvidaste colocar un espacio en blanco entre ambas palabras?

    " AND Id_producto <> @Id_producto"

    Te recomiendo tomar bastante atención al mensaje de la excepción, por lo general la descripción es suficiente para entender el problema que indica la excepción.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Laura321 miércoles, 11 de enero de 2017 3:26
    miércoles, 11 de enero de 2017 1:07
  • Laura321,

    Debes discriminar -del filtro- la fila que intentas actualizar y lo que intentas hacer hasta cierto punto es correcto, el problema es que no agrupas las condiciones en la expresión:

    SELECT 
        COUNT(*) 
    FROM 
        Productos 
    WHERE 
        (Nombre = @Nombre OR Codigo = @Codigo) 
        AND Id_producto <> @Id_producto;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Laura321 sábado, 14 de enero de 2017 17:57
    viernes, 13 de enero de 2017 17:38

Todas las respuestas

  • Laura321,

    El error menciona que no encuentra la variable @codigoAND, ¿no crees que el nombre la variable y el operador lógico lo toma como una sola variable porque olvidaste colocar un espacio en blanco entre ambas palabras?

    " AND Id_producto <> @Id_producto"

    Te recomiendo tomar bastante atención al mensaje de la excepción, por lo general la descripción es suficiente para entender el problema que indica la excepción.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Laura321 miércoles, 11 de enero de 2017 3:26
    miércoles, 11 de enero de 2017 1:07
  • Tengo el problema ahora de que no me deja actualizar los datos, me envía "else". Por ejemplo si intento cambiar el precio unitario me ocurre esto. Teniendo en cuenta que a la hora de agregar un producto no se puede repetir el nombre y el código.

    Dim Id_producto As Integer = TxtId.Text
    
            If Not ValidarExistencia(txtNombre.Text, Id_producto, txtcodigobar.Text) Then
                Using con As New SqlConnection("...")
    
                    Dim query = "UPDATE Productos SET Nombre = @Nombre,  " &
                     "PrecioUnitario = @PrecioUnitario, CantidadStock = @CantidadStock, Observacion = @Observacion, Proveedor = @Proveedor, Codigo = @Codigo WHERE Nombre = @Nombre"
    
                    Dim cmd As New SqlCommand(query, con)
    
                    cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text)
                    cmd.Parameters.AddWithValue("@PrecioUnitario", CDec(txtpunitario.Text))
                    cmd.Parameters.AddWithValue("@CantidadStock", CDec(txtcantst.Text))
                    cmd.Parameters.AddWithValue("@Observacion", CChar(txtobs.Text))
                    cmd.Parameters.AddWithValue("@Proveedor", CChar(txtpro.Text))
                    cmd.Parameters.AddWithValue("@Codigo", CStr(txtcodigobar.Text))
                    con.Open()
    
                    cmd.ExecuteNonQuery()
                  ProcedimientoActualizar()
                End Using
            Else
                MessageBox.Show("Este nombre o codigo de barra ya esta registrado.")
            End If
        Public Function ValidarExistencia(ByVal Nombre As String, ByVal Id_producto As Integer, ByVal Codigo As String) As Boolean
    
            Using con As New SqlConnection("...")
                con.Open()
    
                Dim query = "SELECT COUNT(*) FROM Productos WHERE Nombre = @Nombre or Codigo = @Codigo " &
                 "AND Id_producto <> @Id_producto"
                Dim cmd As New SqlCommand(query, con)
                cmd.Parameters.AddWithValue("@Nombre", Nombre)
                cmd.Parameters.AddWithValue("@Id_producto", Id_producto)
                cmd.Parameters.AddWithValue("@Codigo", Codigo)
                Return CInt(cmd.ExecuteScalar) > 0
            End Using
    
        End Function



    • Editado Laura321 viernes, 13 de enero de 2017 23:32
    viernes, 13 de enero de 2017 16:19
  • Laura321,

    Debes discriminar -del filtro- la fila que intentas actualizar y lo que intentas hacer hasta cierto punto es correcto, el problema es que no agrupas las condiciones en la expresión:

    SELECT 
        COUNT(*) 
    FROM 
        Productos 
    WHERE 
        (Nombre = @Nombre OR Codigo = @Codigo) 
        AND Id_producto <> @Id_producto;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Laura321 sábado, 14 de enero de 2017 17:57
    viernes, 13 de enero de 2017 17:38
  • Implemente lo que me dijiste y solamente me deja modificar el "Nombre" los otros campos como Código, Proveedor, etc no me deja modificarlos enviándome al "Else".

    A los valores en "Validar existencia" me los trae bien.

    • Editado Laura321 viernes, 13 de enero de 2017 21:36
    viernes, 13 de enero de 2017 21:29
  • Laura321,

    {!}- A los valores en "Validar existencia" me los trae bien.

    No entiendo, te agradeceré invertir algo de tiempo en escribir los requerimientos de manera clara (no es lo mismo que extenso).

    viernes, 13 de enero de 2017 21:41