none
Funcion que devulva un valor numerico

    Pregunta

  •  Private Function Total_Adeudado(Total_Adeudado_ABCD_Subtotal As Decimal) As Integer
            Using cnn As New SqlConnection(configuracion.ConnectionString)
                Dim cmd As SqlCommand = cnn.CreateCommand()
                cmd.CommandText = "select Total_Adeudado_ABCD_Subtotal from " & _
                    "Contrato_Matricula_Tabla where Num_Contrato in(select Max(Num_Contrato) " & _
                    "from Contrato_Matricula_Tabla Where Num_Estudiante=@Dato) "
                cmd.Parameters.AddWithValue("@Dato", txtbusquedaestudiantes.Text)
                cnn.Open()
                Return (Total_Adeudado_ABCD_Subtotal)
            End Using
        End Function

     Using cnn As New SqlConnection(configuracion.ConnectionString)
                    Dim cmd As New SqlCommand("SP_INSERTAR_RECIBO", cnn)
                    cmd.CommandType = CommandType.StoredProcedure
                    With cmd
                        .Parameters.AddWithValue("@Num_Recibo", CInt(Me.txtnumero.Text))
                        .Parameters.AddWithValue("@Num_Estudiante", Me.lblnumestudiante.Text)
                        .Parameters.AddWithValue("@Num_Empleado", CInt(numero))
                        .Parameters.AddWithValue("@Tipo_Pago", "AJUSTE CANCELACION")
                        .Parameters.AddWithValue("@Total", Convert.ToDecimal(txtcodigoBarra.Text))
                        .Parameters.AddWithValue("@Cambio", CDec(cambio))
                        '.Parameters.AddWithValue("@Fecha", Format("yyyy/MM/dd", CDate(lblfecha.Text)))
                        .Parameters.AddWithValue("@Fecha", Date.Now.ToString("MM/dd/yyyy"))
                        .Parameters.AddWithValue("@Hora", Format("hh:mm tt", lblhora.Text))
                    End With
                    Try
                        cnn.Open()
                        cmd.ExecuteNonQuery()
                    Catch ex As Exception
                        MessageBox.Show(ex.Message)
                    Finally
                        cmd.Dispose()
                    End Try
                End Using

    necesito que el parametro

     .Parameters.AddWithValue("@Total", Convert.ToDecimal(txtcodigoBarra.Text))

    venga del valor que me devuelve la function y no del Convert.ToDecimal(txtcodigoBarra.Text

    martes, 31 de enero de 2017 15:27

Respuestas

  • Hola, pero la función que has creado Total_Adeudado aparentemente devuelve el mismo valor que se envía como parámetro ,debería ser algo como

     Private Function Total_Adeudado() As Decimal
            Using cnn As New SqlConnection(configuracion.ConnectionString)
                Dim cmd As SqlCommand = cnn.CreateCommand()
                cmd.CommandText = "select Total_Adeudado_ABCD_Subtotal from " & _
                    "Contrato_Matricula_Tabla where Num_Contrato in(select Max(Num_Contrato) " & _
                    "from Contrato_Matricula_Tabla Where Num_Estudiante=@Dato) "
                cmd.Parameters.AddWithValue("@Dato", txtbusquedaestudiantes.Text)
                cnn.Open()
                Dim resultado As Decimal
                resultado = Convert.ToDecimal(cmd.ExecuteScalar())
                Return resultado
            End Using
        End Function

    el Execute.Scalar devuelve un tipo object que corresponde a la primera fila y primera columna de la ejecución de una sentencia sql aquí una referencia ExecuteScalar, ExecuteNonQuery

            Dim TotalAdeudado As Decimal
            TotalAdeudado = Total_Adeudado()
            Using cnn As New SqlConnection(configuracion.ConnectionString)
                Dim cmd As New SqlCommand("SP_INSERTAR_RECIBO", cnn)
                cmd.CommandType = CommandType.StoredProcedure
                With cmd
                    .Parameters.AddWithValue("@Num_Recibo", CInt(Me.txtnumero.Text))
                    .Parameters.AddWithValue("@Num_Estudiante", Me.lblnumestudiante.Text)
                    .Parameters.AddWithValue("@Num_Empleado", CInt(numero))
                    .Parameters.AddWithValue("@Tipo_Pago", "AJUSTE CANCELACION")
                    .Parameters.AddWithValue("@Total", TotalAdeudado)
                    .Parameters.AddWithValue("@Cambio", CDec(cambio))
                    '.Parameters.AddWithValue("@Fecha", Format("yyyy/MM/dd", CDate(lblfecha.Text)))
                    .Parameters.AddWithValue("@Fecha", Date.Now.ToString("MM/dd/yyyy"))
                    .Parameters.AddWithValue("@Hora", Format("hh:mm tt", lblhora.Text))
                End With
                Try
                    cnn.Open()
                    cmd.ExecuteNonQuery()
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                Finally
                    cmd.Dispose()
                End Try
            End Using



    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.


    • Marcado como respuesta Efrain Diaz martes, 31 de enero de 2017 15:48
    • Editado Augusto1982 martes, 31 de enero de 2017 15:49
    martes, 31 de enero de 2017 15:46

Todas las respuestas

  • Hola, pero la función que has creado Total_Adeudado aparentemente devuelve el mismo valor que se envía como parámetro ,debería ser algo como

     Private Function Total_Adeudado() As Decimal
            Using cnn As New SqlConnection(configuracion.ConnectionString)
                Dim cmd As SqlCommand = cnn.CreateCommand()
                cmd.CommandText = "select Total_Adeudado_ABCD_Subtotal from " & _
                    "Contrato_Matricula_Tabla where Num_Contrato in(select Max(Num_Contrato) " & _
                    "from Contrato_Matricula_Tabla Where Num_Estudiante=@Dato) "
                cmd.Parameters.AddWithValue("@Dato", txtbusquedaestudiantes.Text)
                cnn.Open()
                Dim resultado As Decimal
                resultado = Convert.ToDecimal(cmd.ExecuteScalar())
                Return resultado
            End Using
        End Function

    el Execute.Scalar devuelve un tipo object que corresponde a la primera fila y primera columna de la ejecución de una sentencia sql aquí una referencia ExecuteScalar, ExecuteNonQuery

            Dim TotalAdeudado As Decimal
            TotalAdeudado = Total_Adeudado()
            Using cnn As New SqlConnection(configuracion.ConnectionString)
                Dim cmd As New SqlCommand("SP_INSERTAR_RECIBO", cnn)
                cmd.CommandType = CommandType.StoredProcedure
                With cmd
                    .Parameters.AddWithValue("@Num_Recibo", CInt(Me.txtnumero.Text))
                    .Parameters.AddWithValue("@Num_Estudiante", Me.lblnumestudiante.Text)
                    .Parameters.AddWithValue("@Num_Empleado", CInt(numero))
                    .Parameters.AddWithValue("@Tipo_Pago", "AJUSTE CANCELACION")
                    .Parameters.AddWithValue("@Total", TotalAdeudado)
                    .Parameters.AddWithValue("@Cambio", CDec(cambio))
                    '.Parameters.AddWithValue("@Fecha", Format("yyyy/MM/dd", CDate(lblfecha.Text)))
                    .Parameters.AddWithValue("@Fecha", Date.Now.ToString("MM/dd/yyyy"))
                    .Parameters.AddWithValue("@Hora", Format("hh:mm tt", lblhora.Text))
                End With
                Try
                    cnn.Open()
                    cmd.ExecuteNonQuery()
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                Finally
                    cmd.Dispose()
                End Try
            End Using



    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.


    • Marcado como respuesta Efrain Diaz martes, 31 de enero de 2017 15:48
    • Editado Augusto1982 martes, 31 de enero de 2017 15:49
    martes, 31 de enero de 2017 15:46
  • Aunque esto no resuleve tu problema (el amigo de Lima-peru te da la solucion) yo analizando la consulta de SQL considera no esta muy bien optimizada.

    Te recomiendo optimises esta consulta, en especifico el uso del IN...

    select Total_Adeudado_ABCD_Subtotal 
    	from Contrato_Matricula_Tabla 
    	where Num_Contrato in(select Max(Num_Contrato) from Contrato_Matricula_Tabla Where Num_Estudiante=@Dato)

    Saludos

    sábado, 4 de febrero de 2017 6:19