domingo, 15 de abril de 2012

Encuesta paso a paso Visual

Hola a todos este blog es para mostrarles paso a paso como crear una encuesta en visual basic. También le crearemos un reporte y un informe y graficaremos cada pregunta de nuestro proyecto a continuación todo eso:
Primer paso:

Creamos una tabla en Access colocamos el id y todas las preguntas así como la que muestro



Este es un ejemplo de los que seria la tabla de Access luego la guardamos y nos dirigimos a visual basic.

 Y creamos un nuevo proyecto lo llamamos encuesta creamos un nuevo formulario y lo llamamos frmencuesta



Se nos creara un documento vacio ahora creamos el objeto entorno nos vamos a la pestana encuesta de nuestro proyecto le damos agregar nuevo elemento

Y hay seleccionamos el objeto Control de Usuario lo llamamos entorno y click en aceptar.
Luego nos vamos al objeto entorno y nos vamos al cuadro de herramientas y nos vamos a la pestana datos y damos click derecho y ponemos elegir elementos hay nos saldrá una tabla donde podemos buscar elementos en este caso ocupamos
Un OleDbdatadapter y un OleDbconnection






luego pegamos los dos objetos en el entorno y al oledbconnection lo llamamos oConexion. Y en el cuadro de propiedades en el connectionstring buscamos la tabla de Access.
Y pegamos el dataAdapter y le damos click derecho para configurar la coneccion con la tabla de Access. Una vez configurado todo en el objeto entorno nos vamos a nuestro frmencuesta hay buscamos la pestana orígenes de datos y arrastramos cada elemento a nuestro formulario asta que tengan algo como esto.



 
  Este es el diseño de mi encuesta ustedes pueden cambiar los nombres de las preguntas en este caso como mi encuesta de de SI y NO yo use combobox
Luego verán que se creo una barra arriba de nuestro formulario hay es donde comensaremos programando códigos comenzaremos con eliminar le damos doble click en el botón con una x roja : y ponemos el siguiente código
   If MsgBox("desea eliminar el registro", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "eliminar") = MsgBoxResult.Yes Then
            EncuestaBindingSource.EndEdit()
            EncuestaBindingSource.RemoveCurrent()
            Datos.salvarencuesta(Dsencuesta)
            Dsencuesta.AcceptChanges()
            MsgBox("el registro se ha eliminado de manera permanente", MsgBoxStyle.Information, "confirmado")
            Preg1ComboBox.Focus()
        End If
este código esta compuesto x las siguientes partes la primera sirve cuando das click en eliminar registro el automáticamente tirara un mensaje preguntando que si keremos borrar el registro permanentemente y le damos si o no y si damos si sale otro mensaje diciendo registro eliminado.
Ahora el botón guardar es el que tiene el símbolo de un disquec :
   If validar() = True Then
            EncuestaBindingSource.EndEdit()
            Datos.salvarencuesta(Dsencuesta)
            Dsencuesta.AcceptChanges()
            MsgBox("Los datos se han almacenado correctamente", MsgBoxStyle.Information, "salvar")
        End If

este código lo que hace que guarda los registro en la tabla de Access osea usa el DSencuesta que ya explicare como ponerlo para guardas el registro.

Ahora el botón nuevo registro:
EncuestaBindingSource.EndEdit()
        EncuestaBindingSource.AddNew()
        Preg1ComboBox.Focus()
        Preg1ComboBox.SelectedIndex = -1
        Preg2ComboBox.SelectedIndex = -1
        Preg3ComboBox.SelectedIndex = -1
        Preg5ComboBox.SelectedIndex = -1
        Preg6ComboBox.SelectedIndex = -1
        Preg7ComboBox.SelectedIndex = -1
        Preg8ComboBox.SelectedIndex = -1
        Preg9ComboBox.SelectedIndex = -1
        Preg10ComboBox.SelectedIndex = -1
        Preg11ComboBox.SelectedIndex = -1
        Preg12ComboBox.SelectedIndex = -1
        Preg13ComboBox.SelectedIndex = -1
        Preg14ComboBox.SelectedIndex = -1
        Preg15ComboBox.SelectedIndex = -1
        Preg16ComboBox.SelectedIndex = -1
        Preg17ComboBox.SelectedIndex = -1
        Preg18ComboBox.SelectedIndex = -1
        Preg19ComboBox.SelectedIndex = -1
        Preg20ComboBox.SelectedIndex = -1

Este al dar click sobre el crea un nuevo registro lo único que hace que cambia el numero de Id de la encuesta y los códigos fuentes usado luego sirven para que tu formulario muestre en Access los registro que usan si o no osea los combobox en la encuesta.

Elementos que pegamos en nuestro formulario:


son los 4 objetos que aparecen en la imagen el dataSet, bindingSource, Errorprovider y bindingnavigator.
El dataSet es el elemento que enlasa la tabla de access con nuestro formulario osea este sirve a la hora de guardar un registro o a la hora de eliminarlo tiena la coneccion abierta hacia la tabla.
El ErrorProvider es el elemento que muestra un mensaje al usuario que use la encuesta por ejemplo a la hora de guardar un registro y hay una pregunta vacia este objeto dara un mensaje diciendo que se tiene que rellenar la pregunta.
Bindingsource es el elemento que tiene los origenes de datos osea la coneccion con la tabla esto ase que si algun dato se cambia en la tabla de access tambien se cambie en el formulario
El bindingnavigator es el elemento que o la parte del formulario que esta en la superficie osea la barra de elementos guardar,eliminar,nuevo y todos los demas controles del formulario.
Para que nuestro formulario no lanse ningun error hay que pegar este codigo al principio:
Imports nombre de tabla.entorno

para la función validar este seria el código que yo use:
este es por si usan un textbox
If IdencuestaTextBox.Text = "" Then
            Err.SetError(IdencuestaTextBox, "por favor escriba el nombre de la empresa")
            Return False
        End If
Este es por si usan combobox :
If Preg1ComboBox.SelectedIndex = -1 Then
            Err.SetError(Preg1ComboBox, "por favor escriba el nombre del propietario")
            Return False
        End If
En los códigos prodran observar el Err es el elemento que dara el mensaje al usuario en este caso si no tiene el nombre dara un mensaje que dira “por favor escriba el nombre del usuario”

Err.SetError(IdencuestaTextBox, "")
        Err.SetError(DireccionTextBox, "")

Y al final al escribir cada código para cada elemento del formulario se pega este código para cada elemento siempre y eso seria la función validar.

En el objeto Entorno este seria el código:

ahora mostrare como crear el informe
y el reporte:
reporte:
primero creamos un nuevo formulario y lo llamamos frmencuesta
en el pegamos un elemento llamado reportviewer sale en el cuadro de herramientas lo arrastramos asta el formulario y tocamos la flecha que sale en una esquina derechar superior del elemento y le damos acoplar. Esto es para acoplar el elemento al formulario.





Luego le damos a la opción disenar nuevo y saldrá una ventana asi:


 

Le damos nuevo origen de datos buscamos nuestra tabla el nombre yo por lo general siempre lo dejo asi dataset1 y le damos siguiente a todo luego agregamos el idencuesta y siguiente y finalizar.
Luego de esto se creara un agregada un dataset y un bindingsource a nuestro reporte. Son los mismo usados en el formulario y se agregan automáticamente.
Ahora crearemos el informe:

Agregamos un nuevo elemento a nuestro proyecto nos vamos a la pestanas reporting y usamos el elemento informe y lo nombramos frmencuesta.


Asi como en la imagen.
Ahora tenemos como una hoja vacia luego nos vamos al cuadro de herramientas y buscamos el objeto tabla y la arrastramos asta la hoja.
Esto elemento es como el encabezado de nuestra encuesta donde va el titulo el id o numero de encuesta bueno para nombrar cada cuadro o casilla solo damos click en una y ponemos el nombre luego para poner el id en mi caso yo use la esquina superior derecha del informe.
Para que nuestra informe tire el numero de encuesta tienes que aser lo siguiente:
Tocas el recuadro de idencuesta le das click derecho luego le das a la opción. Propiedades del marcador de posición hay saldrá unas pestanas le das a la visibilidad y luego abilitas Mostrar u ocultar expresión hay saldrá un recuadro donde eliges tu tabla de Access que en mi caso seria dataset y pones el siguiente código
="encuesta":"&Fields!IdEncuesta.Value.tostring
Ese código sirve para que muestre el numero de cada encuesta en nuestro informe
Ahora comenzamos el diseño de nuestro informe osea ordenamos las preguntas como keramos en mi caso solo use preguntas de si o no entonces yo solo pego un cuadro de texto y pongo la pregunta pero a la hora de ejecutar tiene que señalarme la respuesta que use si si o no para eso tenemos un código usando los mismos pasos para el idencuesta le dasmo click derecho al cuadro de texto que pegamos le damos propiedades de posición pestana visibilidad y abilitar mostrar y ocultar expresión asemos lo mismo actuvamos el dataset y salen los nombres de las preguntas en Access en mi caso yo solo nombre diferente al idencuesta al nombre la dirección y los demás ban preg1, preg2, preg3 y asi asta preg20.

Entonces como estamos en preg1
Solo ponemos este código
=not(aki damos doble click en preg1 y saldrá este código: Fields!Preg.Value="si")
                Como esta es para la respuesta si por eso esta si luego del igual si y para la no seria lo mismo nada mas que no al final

=not(aki damos doble click en preg1 y saldrá este código: Fields!Preg.Value="no")

         Al final nos tiene que quedar asi:
Si
=not(Fields!Preg1.Value="Si")

No
=not(Fields!Preg1.Value="no")

Luego le damos relleno siempre con el click derecho en propiedades buscamos relleno y ponemos el color que deseamos a mi me recomendaron usar color plateado
Esto lo asemos para que a la hora de que el formulario muestre la respuesta si o no salga en color la respuesta mas adelante mostrare un ejemplo de como kedaria.
Y para los cuadros de texto normales osea con respuestas normales usamos el mismo código del id pero recuerden siempre cambiar el valor del dataset1 no vayan a usar el  mismo código de doble click del id borran ese y le dan doble click al que usaran







esto es el interfax de mi informe ustedes pueden poner cualquier tipo de letra colores y ordenarla de la manera que mas les guste yo lo ise haci por que creo que se mira mas serio y profesional y por que también es un ejemplo.
Comenzaremos con las graficas:
Primero creamos un nuevo formulario lo llamamos frmGraficas luego pegaremos un objeto que una companera me enseno a usar que es mas interactivo y da mejor presentacion a nuestro trabajo se llama TabControl este es mas fácil de usar ya que en un mismo formulario puedes poner todas tus graficas sin que te quite mucho espacio.



Esta es una imagen de como quedaría el orden de los graficos en un tabcontrol.
Entonces comensamos pegando un objeto chart en el primer espacio y un botón con el  nombre de actualizar
Luego le damos doble click al botón y escribimos el siguiente código bueno yo no pegue el código entero solo pegue el código para dos graficas cuando bayas por el botón de la otra grafica o
Grafico ya no se llamara asi se llamara oGrafico1 y asi sucesivamente

Imports System.Data.OleDb
Public Class frmGraficas

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        TabGraficos.SelectedIndex = ComboBox1.SelectedIndex

    End Sub
    Public cadena As String = " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\III BTC_2012\Encuesta\Encuesta.accdb"

    Private Sub Actualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Actualizar.Click
        Dim cSQL As String = "Select Preg1,Count(Preg1) as Total From Encuesta  group by Preg1"
        Dim oConexion As New OleDbConnection(cadena)
        oConexion.Open()
        Dim Comando As New OleDbCommand(cSQL, oConexion)
        Dim Lector As OleDbDataReader = Comando.ExecuteReader
        'limpiar la grafica anterior
        oGrafico.ChartAreas.Clear()
        oGrafico.Series.Clear()
        oGrafico.Titles.Clear()
        'Agregar una area,titulo y Tamaño del titulo a la grafica
        oGrafico.ChartAreas.Add(0)
        oGrafico.Titles.Add("Porque medio contacto al laboratorio?")
        oGrafico.Titles(0).Font = New Font("Perpetua", 18, FontStyle.Bold)
        'Enlazar  la grafica con los datos obtenidos mediante la SQL
        oGrafico.DataBindTable(Lector, "Preg1")
        oGrafico.Series(0).IsValueShownAsLabel = True
        oGrafico.ChartAreas(0).Area3DStyle.Enable3D = True
        oConexion.Close()
    End Sub

    Private Sub Actualizar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Actualizar2.Click
        Dim cSQL1 As String = "Select Preg2,Count(Preg2) as Total From Encuesta  group by Preg2"
        Dim oConexion1 As New OleDbConnection(cadena)
        oConexion1.Open()
        Dim Comando1 As New OleDbCommand(cSQL1, oConexion1)
        Dim Lector1 As OleDbDataReader = Comando1.ExecuteReader
        'limpiar la grafica anterior
        oGrafico2.ChartAreas.Clear()
        oGrafico2.Series.Clear()
        oGrafico2.Titles.Clear()
        'Agregar una area,titulo y Tamaño del titulo a la grafica
        oGrafico2.ChartAreas.Add(0)
        oGrafico2.Titles.Add("Si lo hizo por la pagina, encontro todo la informacion clara y necesaria")
        oGrafico2.Titles(0).Font = New Font("Perpetua", 18, FontStyle.Bold)
        'Enlazar  la grafica con los datos obtenidos mediante la SQL
        oGrafico2.DataBindTable(Lector1, "Preg2")
        oGrafico2.Series(0).IsValueShownAsLabel = True
        oGrafico2.ChartAreas(0).Area3DStyle.Enable3D = True
        oConexion1.Close()
    End Sub
End class

 Y ESO SERIA NUESTRA INFORMACION SI HAY ERRORES RUGAMOS AYUDA NO SOY PERFECTO OK ATTE:LUIS H.

BUENO ESO SERIA TODO ESPERO LES SIRVA. GRACIAS.