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 ModuleAl 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 ClassLa captura en ejecución:
Espero les sea de ayuda!
Les adjunto el link de mi ejemplo
Comentarios
Publicar un comentario