Foros del Web » Programación para mayores de 30 ;) » .NET »

[Ayuda]Graficos estadisticos en tiempo real

Estas en el tema de [Ayuda]Graficos estadisticos en tiempo real en el foro de .NET en Foros del Web. Hola a todos, Estoy queriendo hacer un sistema de Tablero de Comandos con Graficos estadisticos actualizados en tiempo real (o lo mas real posible). Ahora ...
  #1 (permalink)  
Antiguo 03/07/2012, 10:21
Avatar de difilippocarlos  
Fecha de Ingreso: junio-2010
Mensajes: 109
Antigüedad: 13 años, 10 meses
Puntos: 1
[Ayuda]Graficos estadisticos en tiempo real

Hola a todos,

Estoy queriendo hacer un sistema de Tablero de Comandos con Graficos estadisticos actualizados en tiempo real (o lo mas real posible).

Ahora necesitaria ayuda con la forma o metodo en el que se actualizarian los graficos y los elementos que deberia utilizar.


Por ahora estaba usando un Chart, un Timer y un Data Set (común)

Con el timer actualizaba cada 5 minutos una consulta (consulta probada en vb 6, que llenando un recordset actualiza una grilla con los datos correspondientes).

Pero al utilizarlo en VB.Net solo la primera consulta era correcta y el Chart graficaba los datos de ese momento, al realizarlo por segunda vez, despues de vaciar el Data Set, este se llenaba con los datos de la 1 consulta, seguidos de los datos actuales, y el Chart no varia en nada.


Quisiera saber que puedo estar haciendo mal, o quizas hay elementos mas idoneos para este tipo de proyectos.

les dejo el codigo abajo:
Formulario
Código:
Imports System.Data.OleDb
Imports System.Windows.Forms.DataVisualization.Charting
Public Class frmTableroRec
    Private DA As New OleDbDataAdapter(cmdSql)
    Private sSql As String
    Dim fecHasta As Date = Now
    Dim fecDesde As Date = Now
    Dim bPrimeraVez As Boolean

    Private Sub frmTableroRec_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Conectarse()
        CalcularRecDiaria()
    End Sub

    Private Sub CalcularRecDiaria()
        Dim rsD As New DataSet
        Dim rsServ As New DataSet
        Dim cRedondeo As Double
        Dim cTotalRendicion As Double

        cmdSql.Connection = cnnSql
        cmdSql.CommandType = CommandType.Text

        On Error Resume Next
        sSql = "drop table tmp_ResCob"
        cmdSql.CommandText = sSql
        cmdSql.ExecuteNonQuery()

        On Error GoTo mensaje
        Me.Cursor = Cursors.WaitCursor

        lblProceso.Text = "Procesando Cajas..."
        ' Application.DoEvents()

        'Creo la tabla auxiliar
        sSql = "create table tmp_ResCob(IdCobro int, " & _
               "                        IdUsuario int, " & _
               "                        FecCobro datetime, " & _
               "                        CobroParcial bit, " & _
               "                        IntMora bit, " & _
               "                        IntCh bit, " & _
               "                        IdComprobante int, " & _
               "                        IdServicio int,  " & _
               "                        DsComp char(50), " & _
               "                        IdCtaFact int, " & _
               "                        Nombre char(50), " & _
               "                        FecEmision datetime, " & _
               "                        FecVto datetime, " & _
               "                        Total money)"

        cmdSql.CommandText = sSql
        cmdSql.ExecuteNonQuery()

        'Redondeo
        sSql = "select sum(D1.Importe)*-1 as Importe " & _
               "from DET_COBRO D1, DET_COBRANZA D2, COBRANZA CZ " & _
               "where D1.IdCobro = D2.IdCobro and " & _
               "      D2.IdCobranza = CZ.IdCobranza and " & _
               "      CZ.FecInicio between '" & Format(fecDesde, "yyyyMMdd") & "' and '" & Format(fecHasta, "yyyyMMdd 23:59") & "' AND " & _
               "      D1.IdTipoCobro = 5 "
        cmdSql.CommandText = sSql
        DA.Fill(rsD, "Recaudacion")

        cRedondeo = IIf(rsD.Tables("Recaudacion").Rows.Count > 0, (rsD.Tables("Recaudacion").Rows(0)("Importe")), 0)

        'Cobros Generales
        lblProceso.Text = "Procesando Cobros..."
     
        sSql = "insert into tmp_ResCob(IdCobro, IdUsuario,   FecCobro,    CobroParcial,    IntMora,    IntCh,    IdComprobante,IdServicio,                                                           DsComp,      IdCtaFact, Nombre, FecEmision,    FecVto, Total) " & _
               "select              CB.IdCobro, CZ.IdUsuario, CB.FecCobro, CB.CobroParcial, CC.IntMora, CC.IntCh, CC.IdComprobante,IdServicio,rtrim(TC.Abreviatura) + ' '+ rtrim(convert(char(10), CV.Numero)), CV.IdCtaFact, CV.Nombre, CV.FecEmision, CV.FecVto, CV.Total * TC.Signo as Total " & _
               "from DET_COBRANZA DC, COBRO CB, COMP_COBRO CC, COMP_VENTA CV, TIPO_COMPROBANTE TC, COBRANZA CZ " & _
               "where DC.IdCobro = CB.IdCobro and " & _
               "      DC.IdCobranza = CZ.IdCobranza and " & _
               "      CZ.FecInicio between '" & Format(fecDesde, "yyyyMMdd") & "' and '" & Format(fecHasta, "yyyyMMdd 23:59") & "' and " & _
               "      CB.IdCobro = CC.IdCobro and " & _
               "      CC.IdComprobante = CV.IdComprobante and " & _
               "      CV.IdTipoComp = TC.IdTipoComp and " & _
               "      TC.IdTipoComp in(1,2,3,29,30,32,33,34,35) and " & _
               "      CB.CobroParcial = 0 " & _
               "order by DC.IdCobro"
        cmdSql.CommandText = sSql
        cmdSql.ExecuteNonQuery()

        lblProceso.Text = "Procesando Cobros Parciales..."
    
        sSql = "select CB.IdCobro, CV.Total, CZ.IdUsuario " & _
               "from DET_COBRANZA DC, COBRO CB, COMP_COBRO CC, COMP_VENTA CV, TIPO_COMPROBANTE TC, COBRANZA CZ " & _
               "where DC.IdCobranza = CZ.IdCobranza and " & _
               "      CZ.FecInicio between '" & Format(fecDesde, "yyyyMMdd") & "' and '" & Format(fecHasta, "yyyyMMdd 23:59") & "' and " & _
               "      DC.IdCobro = CB.IdCobro and " & _
               "      CB.CobroParcial = 1 and " & _
               "      CB.IdCobro = CC.IdCobro and " & _
               "      CC.IdComprobante = CV.IdComprobante and " & _
               "      CV.IdTipoComp = TC.IdTipoComp and " & _
               "      TC.IdTipoComp = 34 " & _
               "order by DC.IdCobro"
        cmdSql.CommandText = sSql
        rsD.Clear()
        DA.Fill(rsD, "Recaudacion")

        If rsD.Tables("Recaudacion").Rows.Count > 0 Then
            Dim DT As New DataTable
            DT = _
            rsD.Tables("Recaudacion")
            Dim nombre As Long
            Dim cobro As Long
            Dim total As Double
            Dim i As Integer = 0
            For Each row As DataRow In DT.Rows
                nombre = rsD.Tables("Recaudacion").Rows(i)("IdUsuario")
                cobro = rsD.Tables("Recaudacion").Rows(i)("IdCobro")
                total = rsD.Tables("Recaudacion").Rows(i)("Total")
                sSql = "insert into tmp_ResCob(IdCobro, IdUsuario,   FecCobro,    CobroParcial,    IntMora,    IntCh,    IdComprobante,IdServicio,                                              DsComp,      IdCtaFact,    Nombre, FecEmision,    FecVto, Total) " & _
                       "select CB.IdCobro," & nombre & ", CB.FecCobro, CB.CobroParcial, CC.IntMora, CC.IntCh, CC.IdComprobante,IdServicio, rtrim(TC.Abreviatura) + ' '+ rtrim(convert(char(10), CV.Numero)), CV.IdCtaFact, CV.Nombre, CV.FecEmision, CV.FecVto, " & total & " " & _
                       "from COBRO CB, COMP_COBRO CC, COMP_VENTA CV, TIPO_COMPROBANTE TC " & _
                       "where CB.IdCobro = " & cobro & " and " & _
                       "      CB.IdCobro = CC.IdCobro and " & _
                       "      CC.IdComprobante = CV.IdComprobante and " & _
                       "      CV.IdTipoComp = TC.IdTipoComp and " & _
                       "      TC.IdTipoComp <> 34"
                cmdSql.CommandText = sSql
                cmdSql.ExecuteNonQuery()
                i = i + 1
            Next

        End If

        'Total General.
        lblProceso.Text = "Procesando Resumen de Caja..."
     
        sSql = "select Sum(Total) as Total " & _
               "from tmp_ResCob RE "
        cmdSql.CommandText = sSql
        DA.Fill(rsServ, "Recaudacion")

        'Resumen de Cobranza por Servicio.
        sSql = "select SE.IdServicio, SE.DsServicio , Sum(Total) as Total " & _
               "from SERVICIOS SE, tmp_ResCob RE " & _
               "where SE.idServicio = RE.idServicio " & _
               "group by SE.IdServicio, SE.DsServicio " & _
               "order by SE.DsServicio"
        rsServ.Clear()
        cmdSql.CommandText = sSql
        DA.Fill(rsServ, "Recaudacion")

        Graficar(rsServ)
    
        sSql = "drop table tmp_ResCob"
        cmdSql.CommandText = sSql
        cmdSql.ExecuteNonQuery()

        Me.Cursor = Cursors.Arrow

        lblProceso.Text = "PROCESO FINALIZADO!!!"

        Exit Sub

mensaje:
        MsgBox("Error Nº: " & Err.Number & Chr(13) & Err.Description, vbCritical, "Error")

    End Sub

    Private Sub Graficar(ByVal Origen As DataSet)
        chrRecaudaciones.Show()
        chrRecaudaciones.Series("Series1").XValueMember = "DsServicio"
        chrRecaudaciones.Series("Series1").YValueMembers = "Total"

        chrRecaudaciones.DataSource = Origen.Tables("Recaudacion")

        lblTotal.Text = Origen.Tables("Recaudacion").Rows(0)(0)

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        CalcularRecDiaria()
     End Sub
End Class
  #2 (permalink)  
Antiguo 03/07/2012, 10:22
Avatar de difilippocarlos  
Fecha de Ingreso: junio-2010
Mensajes: 109
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: [Ayuda]Graficos estadisticos en tiempo real

Modulo
Código:
Imports System.Data.OleDb
Module Conexion
    Public cnnSql As New OleDbConnection
    Public cmdSql As New OleDbCommand
    Public rs As DataTable
    Public varDSN As String
    Public Declare Function GetComputerName _
    Lib "Kernel32" Alias "GetComputerNameA" _
    (ByVal lpBuffer As String, ByVal nSize As Long) As Long

    Public Sub Conectarse()
        Dim DB As String
        Dim sServer As String
        Dim sSql As String
        cnnSql = New OleDbConnection

        DB = "SGC_CAROYA"
        sServer = "192.168.100.115"   'SRV2
        cnnSql.ConnectionString = "Provider=SQLOLEDB.1;Data Source=" & Trim(sServer) & ";Initial Catalog=" & Trim(DB) & ";UID=sa;PWD=password"

        'Seteo la DB
        sSql = "set CONCAT_NULL_YIELDS_NULL OFF"
    
        cnnSql.Open()
        cmdSql.Connection = cnnSql
        cmdSql.CommandType = CommandType.Text
        cmdSql.CommandText = sSql
        cmdSql.ExecuteNonQuery()
    End Sub

    Public Sub Desconectarse()
         cnnSql.Close()
    End Sub
End Module
  #3 (permalink)  
Antiguo 11/07/2012, 05:25
Avatar de difilippocarlos  
Fecha de Ingreso: junio-2010
Mensajes: 109
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: [Ayuda]Graficos estadisticos en tiempo real

nadie sabe como hacer un grafico con actualizaciones minuto a minuto?

Etiquetas: real, sql, tabla, vb, visual, windows
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:07.