none
ayuda con Imagenes RRS feed

  • Pregunta

  • Hola a todos

    Les comento, trabajo en una aplicación que tiene 3 imágenes que cambian según su estado, Fecha y hora: "Encendida Sin Falla", "Encendida Con Falla", "Apagada sin Falla" y "Apagada con Falla". Lo que necesito es que por ejemplo, cuando yo revise la fecha y la hora en un datetimepicker,  las imágenes cambien según su estado en la base de datos, en este caso que si están encendidas sin falla muestre una imagen de un cuadrado verde que tengo, que si estén apagados sin falla muestre una imagen de cuadrado rojo, y cuando esten con falla apagados o encendidos colocar un gif que parpadee.

    Tengo el siguiente stored procedure

    ALTER procedure [dbo].[FechaValvula]
    @Fecha datetime
    as 
    begin 
    	set nocount on;
    select
    	Val.FechaHora,
    	Val.Nombre,
    	Val.Descripción,
    	EsCo.Estado,
    	EsFa.Estado 
    from 
    	[Valvula] val 
    	Inner join [EstadoComponente] Esco on (val.IdEstadoComponente = EsCo.Id)
    	Inner Join [EstadoFalla] EsFa on (val.IdEstadoFalla = EsFa.Id)
    where 
    	Val.FechaHora = @Fecha
    Order By FechaHora Desc;
    end

    donde estoy complicado es a la hora de realizar la consulta, se que tengo que declarar una variable que me traiga de retorno el estado de las válvulas a una fecha y hora indicada, y me imagino que en cada imagen tengo que hacer un if para que muestre la imagen que sea la adecuada. Como dije antes estoy recién comenzando en esto. Puedo aportar que la tabla "EstadoFalla" tiene dos campos : "id" valores: "0" o "1" y "estado" valores: "con falla" o "sin falla".

    la tabla "EstadoComponente" : tiene dos campos: "Id" valores: "0"o"1" y "Estado" valores: "On" o "Off".

    Tengo ademas el codigo donde construyo la hora para la consulta:

     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    
            Dim fecha As DateTime = DtpFechaIni.Value.Date
            Dim hora As DateTime = DtpHoraIni.Value.ToString
            Dim fechaHoraIni As New DateTime(
                fecha.Year, fecha.Month, fecha.Day, hora.Hour, hora.Minute, hora.Second)
    
    
            Try
    
                Using conexionSQL As New SqlConnection(My.Settings.ValvulaString)
    
                    Dim comando As SqlCommand = conexionSQL.CreateCommand()
    
                    comando.CommandText = "FechaValvula"
                    comando.CommandType = CommandType.StoredProcedure
                    comando.Parameters.AddWithValue("@FechaInicio", fechaHoraIni)
    
          'aqui no se como seguir 
    
    
    
    
                End Using
            Catch ex As Exception
                MessageBox.Show("Se produjo un error : " & ex.Message)
    
            End Try
    
        End Sub
    
        Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox54.Click
            'If 
    'mostrar imagen encendido sin falla 
            'ElseIf
    'mostrar gif encendido con falla
            'ElseIf 
    'mostrar imagen apagado sin falla 
            'Else
    'mostrar gif apagado con falla 
            'End If
    
        End Sub

    Muchas gracias por su tiempo 

     
    • Cambiado Enrique M. Montejo miércoles, 11 de mayo de 2016 9:12 Pregunta relacionada con controles de Windows Forms.
    lunes, 9 de mayo de 2016 13:51

Respuestas

  • Ya encontre la respuesta a lo que necesitaba dejo el codigo por si le sirve a alguien gracias de todos modos a todos por su ayuda 

    Private Sub BtnBuscar_Click(sender As System.Object, e As System.EventArgs) Handles BtnBuscar.Click
    
            BuscarEstadoDisp("Valvula313", PBvalfalla313, PBval313)
            BuscarEstadoDisp("Valvula158", PBvalfalla158, PBval158)
            BuscarEstadoDisp("Valvula258", PBvalfalla258, PBval258)
            BuscarEstadoDisp("Valvula220", PBvalfalla220, PBval220)
            BuscarEstadoDisp("Valvula213", PBvalfalla213, PBval213)
            BuscarEstadoDisp("Valvula206", PBvalfalla206, PBval206)
            BuscarEstadoDisp("Valvula157", PBvalfalla157, PBval157)
            BuscarEstadoDisp("Valvula332", PBvalfalla332, PBval332)
    
    .
    .
    .
    
    end sub
    
    
    Public Sub BuscarEstadoDisp(ByVal Nombre As String, ByVal Imagenfalla As PictureBox, ImagenEstado As PictureBox)
            Dim fecha As DateTime = DtpFechaIni.Value.Date
            Dim hora As DateTime = CDate(DtpHoraIni.Value.ToString)
            Dim fechaHoraIni As New DateTime(
                fecha.Year, fecha.Month, fecha.Day, hora.Hour, hora.Minute, hora.Second)
    
            Dim oDataAdapter As SqlDataAdapter
            Dim oDataSet As DataSet
            Dim CC As SqlConnection
            CC = New SqlConnection
            CC.ConnectionString = My.MySettings.Default.valvulastring
            CC.Open()
            oDataAdapter = New SqlDataAdapter("SELECT Estado, Falla FROM T_Valvula where Nombre='" & Nombre & "'And Fecha='" & fechaHoraIni & "'", CC)
            Dim oCommBuild As SqlCommandBuilder = New SqlCommandBuilder(oDataAdapter)
    
            oDataSet = New DataSet
            oDataAdapter.Fill(oDataSet, "T_Valvula")
    
            If oDataSet.Tables("T_Valvula").Rows(0).Item("Falla") = 1 Then
                Imagenfalla.Visible = True
            Else
                Imagenfalla.Visible = False
            End If
    
            If oDataSet.Tables("T_Valvula").Rows(0).Item("Estado") = 1 Then
                ImagenEstado.Visible = True
            Else
                ImagenEstado.Visible = False
            End If
    
            CC.Close()
        End Sub

    • Marcado como respuesta adriian.91 viernes, 3 de junio de 2016 21:00
    viernes, 3 de junio de 2016 21:00

Todas las respuestas

  • Hola adriian.91,

    Lo primero que observo es que el procedimiento retornará el estado a una determinada fecha y hora de todas las válvulas, no veo un parámetro que filtre por una sola, o ¿necesitas cargar el estado de todas las válvulas? ¿sólo almacenas el registro de una válvula?.  Agrega -en caso tengas que hacerlo- el filtro que determine de que válvula estás realizando la consulta.

    Luego de obtener los valores es claro que tendrás que representar el estado actualizando cada imagen según el valor que hayas obtenido.

    lunes, 9 de mayo de 2016 14:13
  • Hola, lo que necesito es almacenar el registro de todas las válvulas, en este caso no voy a filtrar por una determinada válvula si no por las 3 que tengo y precisamente después de obtener los valores no se como ir actualizando cada imagen. 
    • Editado adriian.91 lunes, 9 de mayo de 2016 14:33
    lunes, 9 de mayo de 2016 14:27
  • adriian.91,

    A ver si entiendo, si necesitas mostrar el estado de todas las válvulas entonces lo conveniente es que los datos los cargues en un contenedor de datos -como por ejemplo un DataGridView- y agregues una columna de tipo DataGridViewImageColumn para la imagen que según el estado cambiará.

    lunes, 9 de mayo de 2016 14:31
  • Realmente no se si me servira un datagridview, por que lo que necesito realmente no es una tabla donde pueda mostrar en una columna los colores de las valvulas, es una imagen tipo mapa en la que se encuentran estas  3 valvulas. yo pensaba que podía ocupar la visibilidad del control picturebox para realizar este problema, ahora como te digo soy nuevo en esto...  el DataGridView me permite mostrar una imagen y no tablas?...

    Esa es la imagen donde se encuentran las valvulas

    https://onedrive.live.com/redir?resid=7177BDB3277E540E!1074&authkey=!ANr3VLhihtV_LUA&v=3&ithint=photo%2cpng

    lunes, 9 de mayo de 2016 14:46
  • alguien mas que me pueda ayudar con este problema?
    lunes, 9 de mayo de 2016 17:09
  • >A ver si entiendo, si necesitas mostrar el estado de todas las válvulas entonces lo conveniente es que los datos los cargues en un >contenedor de datos -como por ejemplo un DataGridView- y agregues una columna de tipo DataGridViewImageColumn para la imagen que >según el estado cambiará.

    Wiliams. Mira te dejo este ejemplo es mas o menos lo que quiero realizar

    Tengo una base de datos con dos tablas:

    EstadoValvula

    Valvula

    y un Procedimiento almacenado que hace un filtro por hora

    alter procedure FechaImagen
    @FechaInicio datetime
    
    as 
    begin 
    	set nocount on;
    select
    	pv.Id,
    	pv.Fecha,
    	pv.NombreValvula,
    	ev.Detalle
    	
    from 
    	[ReporteValvula] pv 
    	Inner join [EstadoValvula] ev on (pv.IdEstadoValvula = ev.Id)
    	where 
    	pv.Fecha = @fechaInicio
    	
    Order By Fecha Desc;
    end

    si lo ejecuto me muestra lo que quiero:

    Lo que necesito ahora es poder hacer que dos controles picturebox, que tengo en el formulario cambien y me muestren una imagen u otra, cuando seleccione una hora y fecha de dos controles DateTimePicker, dependiendo de el estado que estas tengan en la fecha y hora consultada, Los estados como pueden ver son encendido o apagado, Si esta encendida mostrara la imagen1, si esta apagada mostrara la imagen2.

    Como podría hacer esto en código? Yo la verdad solo tengo el filtro por fecha y hora pero he preguntado anteriormente y nadie me ha podido ayudar con esto específicamente. Les dejo el código de como hago el filtro de fecha y hora y como creo que podría hacer el filtro espero me puedan ayudar. 

    Private Sub BtnBuscar_Click(sender As System.Object, e As System.EventArgs) Handles BtnBuscar.Click
    
            Dim fecha As DateTime = DtpFechaIni.Value.Date
            Dim hora As DateTime = CDate(DtpHoraIni.Value.ToString)
            Dim fechaHoraIni As New DateTime(
                fecha.Year, fecha.Month, fecha.Day, hora.Hour, hora.Minute, hora.Second)
    
            Try
    
                Using conexionSQL As New SqlConnection(My.Settings.valvulastring)
    
                    Dim comando As SqlCommand = conexionSQL.CreateCommand()
    
                    comando.CommandText = "FechaValvula"
                    comando.CommandType = CommandType.StoredProcedure
                    comando.Parameters.AddWithValue("@FechaInicio", fechaHoraIni)
    
                    PictureBox1.Tag = "Valvula 313"
    
                    If PictureBox1.Image = PictureBox("Encendido") Then
                        PictureBox1.Image = My.Resources.ValvulaVerde
                        PictureBox1.Image.Dispose()
                    ElseIf PictureBox1 = "Apagado" Then
                        PictureBox1.Image = My.Resources.Valvularoja1
                        PictureBox1.Image.Dispose()
                    End If
    
                    PictureBox2.Tag = "Valvula 158"
    
                    If PictureBox2 = "Encendido" Then
                        PictureBox2.Image = My.Resources.ValvulaVerde
                        PictureBox2.Image.Dispose()
                    ElseIf PictureBox2 = "Apagado" Then
                        PictureBox2.Image = My.Resources.Valvularoja1
                        PictureBox2.Image.Dispose()
                    End If
    
    
                End Using
            Catch ex As Exception
                MessageBox.Show("Se produjo un error : " & ex.Message)
    
            End Try
        End Sub

    Por favor ayuda 
    miércoles, 1 de junio de 2016 13:00
  • Ya encontre la respuesta a lo que necesitaba dejo el codigo por si le sirve a alguien gracias de todos modos a todos por su ayuda 

    Private Sub BtnBuscar_Click(sender As System.Object, e As System.EventArgs) Handles BtnBuscar.Click
    
            BuscarEstadoDisp("Valvula313", PBvalfalla313, PBval313)
            BuscarEstadoDisp("Valvula158", PBvalfalla158, PBval158)
            BuscarEstadoDisp("Valvula258", PBvalfalla258, PBval258)
            BuscarEstadoDisp("Valvula220", PBvalfalla220, PBval220)
            BuscarEstadoDisp("Valvula213", PBvalfalla213, PBval213)
            BuscarEstadoDisp("Valvula206", PBvalfalla206, PBval206)
            BuscarEstadoDisp("Valvula157", PBvalfalla157, PBval157)
            BuscarEstadoDisp("Valvula332", PBvalfalla332, PBval332)
    
    .
    .
    .
    
    end sub
    
    
    Public Sub BuscarEstadoDisp(ByVal Nombre As String, ByVal Imagenfalla As PictureBox, ImagenEstado As PictureBox)
            Dim fecha As DateTime = DtpFechaIni.Value.Date
            Dim hora As DateTime = CDate(DtpHoraIni.Value.ToString)
            Dim fechaHoraIni As New DateTime(
                fecha.Year, fecha.Month, fecha.Day, hora.Hour, hora.Minute, hora.Second)
    
            Dim oDataAdapter As SqlDataAdapter
            Dim oDataSet As DataSet
            Dim CC As SqlConnection
            CC = New SqlConnection
            CC.ConnectionString = My.MySettings.Default.valvulastring
            CC.Open()
            oDataAdapter = New SqlDataAdapter("SELECT Estado, Falla FROM T_Valvula where Nombre='" & Nombre & "'And Fecha='" & fechaHoraIni & "'", CC)
            Dim oCommBuild As SqlCommandBuilder = New SqlCommandBuilder(oDataAdapter)
    
            oDataSet = New DataSet
            oDataAdapter.Fill(oDataSet, "T_Valvula")
    
            If oDataSet.Tables("T_Valvula").Rows(0).Item("Falla") = 1 Then
                Imagenfalla.Visible = True
            Else
                Imagenfalla.Visible = False
            End If
    
            If oDataSet.Tables("T_Valvula").Rows(0).Item("Estado") = 1 Then
                ImagenEstado.Visible = True
            Else
                ImagenEstado.Visible = False
            End If
    
            CC.Close()
        End Sub

    • Marcado como respuesta adriian.91 viernes, 3 de junio de 2016 21:00
    viernes, 3 de junio de 2016 21:00