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:
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:
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
Publicar un comentario