Calcular con valores de consulta en SqlCompact

Uno de los casos más comunes en Consultas es filtrar los datos, o aplicar sumas y/o conteo a los mismos, los cuales se los presenta en un DatagridView. En este apartado vamos a realizar una consulta y que los datos nos sirvan para posterior calculo, por supuesto esto se lo hará internamente gestionando el datatable contenido.

Para tal efecto vamos aplicar un calculo de ingeniería para un laboratorio de calidad de azúcar concretamente el cálculo del color ICUMSA en azúcar blanco. Desarrollando la técnica,  nos regimos a la generación  del resultado, La formula aplicar es:


Cualquiera delas dos formas es aplicable; donde:
As= absorbancia de la solución
b= tamaño de la celda( para este caso consideramos la celda = 1 pulgada)
c= concentración, cuyo calculo implícito integra la densidad
p= densidad de la solución en función del brix

Parametros:
As = 0.225
b= 2.54cm(1 pulgada)
brix = 50.2

Como antes visto y para los manejan ya este lenguaje, les detallo el código completo y al final la captura con los controles que se muestran:
Les recuerdo que si quieren capturar valores de otras tablas se debe aplica la instrucción SQL correcta y obtener el valor como esta indicado en el codigo: 

Dentro del módulo:


Module Module1
    Public path As String = Form1.lbldir.Text
    Public conn As New SqlServerCe.SqlCeConnection("Data Source=" & path + ";Max Database Size=4091")
    Public sql As String
    Public cmd As New SqlServerCe.SqlCeCommand(sql, conn)
    Public Sub conectarse()
        Try
            conn.Open()
            MsgBox("Conexion exitosa")
        Catch ex As Exception
            MsgBox(ex.ToString())
        End Try
        '   conn.Close()
    End Sub
    Public Sub Num_Columnas(ByRef grid As DataGridView)
        For i As Integer = 0 To grid.Rows.Count - 1
            grid.Columns.Item(i).HeaderText = i
        Next
    End Sub
    Public Sub Num_filas_Fijas(ByRef grid As DataGridView)
        For i As Integer = 0 To grid.Rows.Count - 1
            grid.Rows(i).HeaderCell.Value = (i + 1).ToString
        Next i
    End Sub
End Module

Al final sobre el Form principal:


Public Class Form1
    Public concentracion, densidad, resultado As Double
    Public brixcorregido As String
    Sub cargar_datos()
        Try
            conectarse()
            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim strSql As String = "SELECT* FROM DENSID "
            Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
            adp.Fill(dt)
            DataGridView1.DataSource = dt
        Catch ex As Exception
            ex.ToString()
        End Try
        conn.Close()
        DataGridView1.RowHeadersWidth = 100
        Num_filas_Fijas(DataGridView1)
        contar()
    End Sub
    Sub contar()
        Dim i As Integer = DataGridView1.Rows.Count
        lblcounter.Text = "Número de items =" & i
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        cargar_datos()
    End Sub
    Private Sub txtbrix_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtcelda.KeyPress, txtbrix.KeyPress, txtabs.KeyPress, Button2.KeyPress
        If e.KeyChar = "."c Then
            e.Handled = True
            SendKeys.Send(",")
        End If
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub
    Public Sub buscar()
        Try
            Dim dt As New DataTable
            '  Dim strSql As String
            brixcorregido = Format((CDbl(txtbrix.Text) * 0.989), "0.00")
            brixcorregido = Replace(brixcorregido, ",", ".")
            Dim strSql As String = "SELECT brix as brixcorregido, densidad FROM DENSID WHERE BRIX  LIKE'" & brixcorregido & "%'"
            Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
            adp.Fill(dt)
            DataGridView1.DataSource = dt
            '---------------gestiones dentro del datatble---------
            Dim dtx As DataRow ' gestiona el eje de las filas
            Dim i = dt.Rows(0)
            Dim n As Integer = dt.Rows.Count - 1 ' posicion de la ultima fila
            ' Redimensionando el datarow
            dtx = dt.Rows(0) ' busca la posicion de la primera  fila
            densidad = dtx.Item(1) ' almacena el valor  de la densidad buscada
            '-------------------------------
            'dtx = dt.Rows(n)
            'txtUltimoNombre.Text = CStr(dtx(1)) '  muestra el valor contenido en el par (n,3)
            '-------------------------
            'aumentando el ancho de las rowsheader
            DataGridView1.RowHeadersWidth = 70
            ' numerando filas fijas y 
            Num_filas_Fijas(DataGridView1)
        Catch ex As Exception
            ex.ToString()
        End Try
        conn.Close()
        StatusStrip2.Refresh()
        contar()
    End Sub
    Function ColorAB(ByVal brix As Double, ByVal absorbancia As Double, ByVal densidad As Double, ByVal tamaño_celda As Double) As Double
        Try
            brix = brix * 0.989
            concentracion = (brix * (densidad * 1000)) / 100000
            ColorAB = (absorbancia * 1000) / (tamaño_celda * concentracion)
        Catch e As DivideByZeroException
            MsgBox("Resultado infinito")
        End Try
        Return ColorAB
    End Function
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            buscar()
            resultado = ColorAB(CDbl(txtbrix.Text), CDbl(txtabs.Text), densidad, CDbl(txtcelda.Text)) ' llama a la funcion y presenta resultado 
            ' asigna formato de 2 digitos decimales
            resultado = Format(resultado, "0.00")
            'imprime resultado en el textbox
            txtColor.Text = resultado
        Catch ex As Exception
            MsgBox(e.ToString)
        End Try
    End Sub
End Class

La captura en ejecución:



Espero les sea de ayuda!

Les adjunto el link de mi ejemplo



Comentarios

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic