none
consultas sql dos tablas RRS feed

  • Pregunta

  • Tengo un código que me refaliza una consulta sql para verificar  si hay un registro

    Sub BUSCAR_POS_REMS()
            Dim suma As Double
            Dim CMD As New SqlCommand("SELECT * FROM ITEM_REMISIONES_DESPACHADAS WHERE POS=@POSI", ConexionSql.cnn)
            CMD.Parameters.AddWithValue("@POSI", FrmControlRemisiones.TxtPosicion3.Text)
            Dim dr As SqlDataReader
            ConexionSql.cnn.Open()
            dr = CMD.ExecuteReader
            While dr.Read
                If encontrar_remision(dr(1)) = True Then
                    suma = suma + dr(4)
                End If
            End While
            ConexionSql.cnn.Close()
            FrmControlRemisiones.TxtPosDespachadas.Text = suma
        End Sub
    Este código  me busca  si un Registros especifico esta en una tabla después que lo encuentra lo compara  con otra para  confirmar que en la otra    con una funcion  y si lo encuentra  retorna el valor verdadero  para que acumule en una variable el valor de la cuarta columna.

      Public Function encontrar_remision(ByVal dato1 As Integer) As Boolean
    
            Dim CMD As New SqlCommand("SELECT * FROM REMISIONES_DESPACHOS WHERE NO_REMISION=@NREMISION AND LETRA=@LET", ConexionSql.cnn)
            CMD.Parameters.AddWithValue("@NREMISION", CInt(dato1))
            CMD.Parameters.AddWithValue("@LET", FrmControlRemisiones.TxtLetra.Text)
            Dim dr As SqlDataReader
            ConexionSql.cnn.Open()
            dr = CMD.ExecuteReader
            If dr.Read Then
                Return True
            Else
                Return False
            End If
            ConexionSql.cnn.Close()
        End Function

    El problema que tengo es que no pasa en la  funcion  de

    dr = CMD.ExecuteReader

    por tal motivo siempre me bota resultado true, hay otra alternativa  para  comparar esta información o si alguien me podría decir  que es lo malo que esta en el código

    Al revisar el código linea por linea la consulta sql de la función no la toma en cuenta.


    Hhendrix2012 Programattion OK


    • Editado Hhendrix2012 miércoles, 26 de septiembre de 2012 21:42
    miércoles, 26 de septiembre de 2012 21:37

Respuestas

  • Podrías hacerlo así.

    Public Function Existe(ByVal dato1 As Integer) As Boolean
            Using conn As New SqlConnection("CadenaConexion")
                Dim query = "SELECT COUNT(*) FROM REMISIONES_DESPACHOS WHERE NO_REMISION=@NREMISION AND LETRA=@LET"
                Dim cmd As New SqlCommand(query, conn)
                cmd.Parameters.AddWithValue("@NREMISION", CInt(dato1))
                cmd.Parameters.AddWithValue("@LET", FrmControlRemisiones.TxtLetra.Text)
                conn.Open()
    
                Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())
                If count = 0 Then
                    Return False
                Else
                    Return True
                End If
            End Using
    End Function

    Devuelve false si no existe y true si existe.

    Saludos


    • Editado Cristian Torres miércoles, 26 de septiembre de 2012 22:04
    • Marcado como respuesta Hhendrix2012 viernes, 28 de septiembre de 2012 17:09
    miércoles, 26 de septiembre de 2012 22:04

Todas las respuestas

  • Podrías hacerlo así.

    Public Function Existe(ByVal dato1 As Integer) As Boolean
            Using conn As New SqlConnection("CadenaConexion")
                Dim query = "SELECT COUNT(*) FROM REMISIONES_DESPACHOS WHERE NO_REMISION=@NREMISION AND LETRA=@LET"
                Dim cmd As New SqlCommand(query, conn)
                cmd.Parameters.AddWithValue("@NREMISION", CInt(dato1))
                cmd.Parameters.AddWithValue("@LET", FrmControlRemisiones.TxtLetra.Text)
                conn.Open()
    
                Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())
                If count = 0 Then
                    Return False
                Else
                    Return True
                End If
            End Using
    End Function

    Devuelve false si no existe y true si existe.

    Saludos


    • Editado Cristian Torres miércoles, 26 de septiembre de 2012 22:04
    • Marcado como respuesta Hhendrix2012 viernes, 28 de septiembre de 2012 17:09
    miércoles, 26 de septiembre de 2012 22:04
  • En cual instruccion se queda, en la primera o en la segunda

    Si la respuesta es correcta, marcala como correcta.
    Tambien puedes votar como util si te fue de ayuda
    DCE 5 ESTRELLAS PLATINO
    Pedro Marquez - Venezuela

    miércoles, 26 de septiembre de 2012 22:12
  • Va realizar la funcion pero no  la realiza toda llega a la mitad y se devuelve al procedimiento, llega 

    dr = CMD.ExecuteReader

    No valida la informacion si la lee o no antes de llegar al if en la funcion pasa de nuevo a donde se llamo la funcion desde el procedimiento


    Hhendrix2012 Programattion OK

    jueves, 27 de septiembre de 2012 13:10
  • Gracias

    El procedimiento Funciona bien el único inconveniente que tengo es que al realizar una nueva consulta sql tengo problemas  con la apertura y cierre de la conexión me explico,  abre la conexión para hacer la consulta inicial pero cuando va a la función  dice que la conexión esta abierta, entonces antes de hacer la consulta de la función cierro la conexión pero sucede, que  cuando va a seguir el procedimiento dice que no puede porque la conexión esta cerrada.


    Hhendrix2012 Programattion OK

    jueves, 27 de septiembre de 2012 13:49