none
pasar valor de una variable de sql a visual basic. RRS feed

  • Pregunta

  • estoy desarrollando una aplicacion en visual basic con sql, en esta necesito tomar la id de el ultimo registro que ingrese, he usado la funcion scope_identity() para lograrlo,despues paso el valor que devuelve la funcion a una variable , despues intento pasar el valor de esta variable de sql a una de visual basic, pero no me devuelve nada, el codigo es el siguiente : 

     Public Sub checa(ByVal a As String)

            cmmd.Connection = conn
            conn.Open()
            cmmd.CommandText = a
            cmmd.ExecuteNonQuery()
            i = cmmd.ExecuteScalar()
            conn.Close()
        End Sub

    este codigo es el que tengo en el form:

     Dim carga4 = New cargador
            Dim sacamyid As String = "declare @myid int select @myid = scope_identity()"
            carga.checa(sacamyid)
            Dim myid As String = carga4.i
            carga4.Close()

    gracias.

    sábado, 4 de mayo de 2013 17:34

Respuestas

  • De todas formas por que haces esto?

    cmmd.ExecuteNonQuery()
            i = cmmd.ExecuteScalar()

    Ejecutas y luego quieres obtener un valor con la misma consulta.

    Revisa este enlace de SCOPE_INDENTITY () porque me parece que no es lo que buscas...

    "SCOPE_IDENTITY y @@IDENTITY devuelven los últimos valores de identidad generados en una tabla en la sesión actual.No obstante, SCOPE_IDENTITY solo devuelve los valores insertados en el ámbito actual; @@IDENTITY no se limita a un ámbito específico"

    Te recomiendo usar IDENT_CURRENT, te devuelve el ultimo identity dada una tabla pasada como parámetro


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    • Editado Sergio Parra sábado, 4 de mayo de 2013 18:20
    • Marcado como respuesta Irving dls sábado, 4 de mayo de 2013 18:45
    sábado, 4 de mayo de 2013 18:17

Todas las respuestas

  • Primeramente cambia

    Public Sub checa(ByVal a As String)

            cmmd.Connection = conn
            conn.Open()
            cmmd.CommandText = a
            cmmd.ExecuteNonQuery()
            i = cmmd.ExecuteScalar()
            conn.Close()
        End Sub

    a una funcion

    Public Function checa(ByVal a As String) As Integer

            Dim i As Integer

    cmmd.Connection = conn
            conn.Open()
            cmmd.CommandText = a
            cmmd.ExecuteNonQuery()
            i = cmmd.ExecuteScalar()
            conn.Close()

     Return i

        End Function


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 4 de mayo de 2013 18:05
  • carga.checa(sacamyid)
            Dim myid As String = carga4.i

    Cambialo por 
            Dim myid As Integer = carga4.checa(sacamyid)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 4 de mayo de 2013 18:07
  • creo que no se entendio bien mi problema,bueno el sub que uso (checa), es un metodo de una clase, anteriormente he usado esta clase y me regresa el valor del qwery, pero lo que yo intento es ejecutar el scope_identity() y conseguir la id de el elemento recien agregado, lo intento pero no me devuelve nada, osea e usado este metodo con qwery con sentencias select y no hay problema, pero en este qwery ( "declare @myid int select @myid = scope_identity()" ) no me regresa ningun valor.
    sábado, 4 de mayo de 2013 18:15
  • De todas formas por que haces esto?

    cmmd.ExecuteNonQuery()
            i = cmmd.ExecuteScalar()

    Ejecutas y luego quieres obtener un valor con la misma consulta.

    Revisa este enlace de SCOPE_INDENTITY () porque me parece que no es lo que buscas...

    "SCOPE_IDENTITY y @@IDENTITY devuelven los últimos valores de identidad generados en una tabla en la sesión actual.No obstante, SCOPE_IDENTITY solo devuelve los valores insertados en el ámbito actual; @@IDENTITY no se limita a un ámbito específico"

    Te recomiendo usar IDENT_CURRENT, te devuelve el ultimo identity dada una tabla pasada como parámetro


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    • Editado Sergio Parra sábado, 4 de mayo de 2013 18:20
    • Marcado como respuesta Irving dls sábado, 4 de mayo de 2013 18:45
    sábado, 4 de mayo de 2013 18:17
  • Cambia qwery ("declare @myid int select @myid = scope_identity()" )  por qwery ("  select   scope_identity()" ) y prueba si solamente ejecutando el scalar() te devuelve datos

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    sábado, 4 de mayo de 2013 18:34
  • hola

    [ADO.NET] Parte 6 - Ejemplos simples Campos Autonumerico (Identity)

    analiza el ejmeplo del articulo

    si usas el cope_identity debes hacerlo en la misma accion insertar y devolver e id en la misma operacion

    si son en dos operaciones usarias el @@identity

    como explico ambos casos en el articulo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 4 de mayo de 2013 18:39
  • investigue la función ident_current y esta si me devolvió el valor que esperaba, muchas gracias.
    sábado, 4 de mayo de 2013 18:46