Creación de un
formulario de encuesta
En esta ocasión aprenderemos como
hacer un formulario de encuesta que guarde, elimine y modifique. También deberá presentar las gráficas de cada
pregunta y al finalizar lanzara un
reporte.
Formulario de encuesta
Paso # 1: para
comenzar tenemos que crear una tabla en Access con las preguntas de la encuesta
y agregaremos una llave primaria al id de nuestra tabla.
Una vez que esté terminada nos vamos
a Visual Basic y agregamos un nuevo formulario.
Lo primero que vamos hacer estando
ahí es crear nuestro DataSet.
Primero nos vamos a la ventana de
orígenes de datos.
Damos clic en el icono superior de la
izquierda “Agregar nuevo origen de dato”
Le damos a la opción “siguiente”,
volvemos a repetir este paso y luego daremos clic en “nueva selección” ahí
seleccionaremos la tabla que ya tenemos creada en Access.
Damos clic en “siguiente”, después se
nos aparecerá un mensaje y responderemos “no”.
Después seleccionamos “Tablas” y
“Finalizar”.
Nuestro DataSet esta creado.
Paso # 2: ahora
crearemos un entorno.
En esta parte del proyecto:
Hacer clic derecho y seleccionar la
opción “Agregar” y luego “Control de Usuario”
Lo llamaremos entorno.
A este entorno le agregaremos un
OleDbDataAdapter y un OleDbConnetion.
En el cuadro de herramientas nos
vamos a la sección de “datos” y le damos clic derecho, luego “Elegir Elementos”
Luego nos aparecerá un cuadro donde
haremos selección en OleDbDataAdapter y un OleDbConnetion.
Luego hacemos clic en “Aceptar”.
Primero pegamos el OleDbDataAdapter
se nos aparecerá un cuadro. Haremos clic en “nueva selección”. Se aparecerá
otro cuadro, entonces haremos clic en “Examinar” y ahí seleccionaremos nuestra
tabla de Access luego “Aceptar” “Siguiente” “No”. Para finalizar nos saldrá una
pregunta y un cuadro blanco y en caso de que esté vacio, haremos clic en
“Generador de Consulta” se nos aparecerá un nuevo cuadro.
Seleccionamos el nombre de la tabla
“Agregar” y luego en el otro cuadro se nos aparecerá una tabla con los campos
que tenemos, haremos clic en “Todas las Columnas” y luego “Aceptar” eso nos mandara al cuadro inicial y
terminaremos con “Finalizar”.
Cambiamos en “Name” a “daFicha” según el nombre de la tabla que
tengamos.
Cuando terminemos esto se nos
aparecerá el OleDbConnetion en la barra inferior y solo cambiaremos en “Name” a
“oConexion”.
Ahora solamente hacemos doble clic
sobre el entorno y copiamos el siguiente código:
Public
Class Entorno
Public Shared Datos As New Entorno
Public Sub Conectar()
If
oConexion.State <> ConnectionState.Open
Then
oConexion.Open()
End If
End Sub
Public Function ObtenerDatos() As
DataSet
Dim ds As New DataSet
Conectar()
daFicha.Fill(ds, "Ficha")
oConexion.Close()
Return
ds
End Function
Public Sub salvarFicha(ByRef
ds As DataSet)
Conectar()
daFicha.Update(ds)
oConexion.Close()
End Sub
Private Sub Entorno_Load(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
MyBase.Load
End
Sub
End
Class
Paso # 3: ahora
pegaremos en nuestro formulario cada una de las preguntas de la encuesta que
están en nuestro DataSet.
Seleccionamos nuestra primera
pregunta y arrastramos. Si nuestra pregunta es cerrada y requiere de un
ComboBox, entonces seleccionamos la pregunta y damos clic en la flecha que
aparece al lado y por ultimo seleccionamos un ComboBox. Si es un CheckBox hacemos lo mismo.
Y si lo que tenemos primero es
nuestro id, entonces solo lo arrastramos al formulario, después damos clic en
la flecha y seleccionamos “ninguno”.
En nuestros ComboBox haremos algunos
cambios.
Seleccionamos el ComboBox y hacemos
selección a la flecha de la esquina superior derecha y nos vamos a la opción
“Editar Elementos” estando ahí escribiremos las respuestas de la pregunta “si”
o “no” o cualquiera que sea.
Luego nos vamos al cuadro de
herramientas y buscamos el DropDownStyle y luego seleccionamos la opción DropDownList.
En el caso del CheckBox solo
cambiamos la opción “Text” y escribimos el nombre de la respuesta en caso de
que no se haya aparecido.
En nuestro formulario deberán aparecer ya un
BindingNavigator, un BindingSource y nuestro DataSet.
Paso # 4: ahora
procederemos a programar. Presionamos F7 para abrir la ventana de código y
escribimos lo siguiente:
Imports
Ficha_Estadistica.Entorno
Public
Class frmEvento
Private Sub frmEvento_Load(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
MyBase.Load
dsTablas.Merge(Datos.ObtenerDatos,
False)
End
Sub
Private Function validar() As
Boolean
Return True
End Function
End
Class
Luego doble
clic en el botón de salvar y escribimos:
Private
Sub FichaBindingNavigatorSaveItem_Click(ByVal sender As
System.Object, ByVal
e As System.EventArgs)
Handles FichaBindingNavigatorSaveItem.Click
If
validar() = True Then
FichaBindingSource.EndEdit()
Datos.salvarFicha(dsTablas)
dsTablas.AcceptChanges()
MsgBox("Los
datos se han almacenado correctamente", MsgBoxStyle.Information,
"salvar")
IdEventoTextBox.Focus()
End If
End Sub
Botón de
eliminar:
Private
Sub BindingNavigatorDeleteItem_Click(ByVal sender As
System.Object, ByVal
e As System.EventArgs)
Handles BindingNavigatorDeleteItem.Click
If
MsgBox("Desea eliminar este registro",
MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Eliminar")
= MsgBoxResult.Yes Then
FichaBindingSource.EndEdit()
FichaBindingSource.RemoveCurrent()
Datos.salvarFicha(dsTablas)
dsTablas.AcceptChanges()
MsgBox("El
registro se ha eliminado de manera permanente", MsgBoxStyle.Information, "confirmado")
IdEventoTextBox.Focus()
End If
End Sub
Y el botón de
Nuevo:
Private
Sub BindingNavigatorAddNewItem_Click(ByVal sender As
System.Object, ByVal
e As System.EventArgs)
Handles BindingNavigatorAddNewItem.Click
FichaBindingSource.EndEdit()
FichaBindingSource.AddNew()
IdEventoTextBox.Focus()
End
Sub
Nuestra tabla ya deberá guardar, modificar y eliminar.
En caso de algún error podría ser el lugar donde está guardada la tabla.
En mi caso, por ejemplo tengo mi propia carpeta con mi trabajo en visual Basic
y mi tabla de Access guardados en el disco local C.
Graficas
para formulario de encuesta
En esta ocasión escribiré como hacer las graficas para ComboBox o
CheckBox.
Graficas para
ComboBox:
Creamos un nuevo formulario. Agregamos el objeto Chart, nos vamos a la tabla
de propiedades y modificamos en “Name” y lo llamaremos “ografico”.
Luego pegamos en el formulario un “Button” y cambiamos en “Name” a
“cmdactualizar” y en “Text” “Actualizar”.
Hacemos doble clic en el botón actualizar y escribimos el siguiente código:
Imports
System.Data.OleDb
Public
Class frmgrafica1
Public
cadena As String
= "Provider =Microsoft.ACE.OLEDB.12.0; Data
Source = C:\Ficha_Estadistica\Ficha.accdb"
Private Sub cmdactualizar_Click(ByVal
sender As System.Object,
ByVal e As System.EventArgs) Handles
cmdactualizar.Click
Dim
cSQL As String
= "SELECT Preg1, count (Preg1) AS Total FROM
Ficha GROUP BY Preg1"
Dim
oConexion As New
OleDbConnection(cadena)
oConexion.Open()
Dim
comando As New OleDbCommand(cSQL, oConexion)
Dim
lector As OleDbDataReader
= comando.ExecuteReader
ografico.ChartAreas.Clear()
ografico.Series.Clear()
ografico.Titles.Clear()
ografico.ChartAreas.Add(0)
ografico.Titles.Add("¿Has participado en un evento organizado?")
ografico.DataBindTable(lector, "Preg1")
ografico.Series(0).IsValueShownAsLabel
= True
ografico.ChartAreas(0).Area3DStyle.Enable3D
= True
oConexion.Close()
End Sub
End
Class
En esta línea se debe escribir la dirección de la tabla de Access, ósea
donde está guardada
"Provider =Microsoft.ACE.OLEDB.12.0; Data Source
= C:\Ficha_Estadistica\Ficha.accdb"
Nuestra grafica esta lista.
Graficas para
CheckBox:
Nos vamos al DataSet que ya tenemos creado, cuando nos aparezca la tabla
haremos clic derecho en la pantalla, “Agregar” “Tabla de Datos”
Cambiamos el nombre por “FichaGrafico” luego hacemos clic derecho
“Agregar” “Columna” ahí escribiremos “Categoría”. Hacemos el mismo
procedimiento para agregar una nueva columna y escribimos “Total”.
Hacemos clic derecho en la tabla “Agregar” “Clave” aparecerá un cuadro
con “categoría” seleccionado y damos en “Aceptar”.
Ahora solo creamos un nuevo formulario, le pegamos un Chart y un Button.
Doble clic en el botón “Actualizar” (porque así se llamara el Button
cuando cambien el nombre)
Y copiamos el siguiente código:
Imports
Ficha_Estadistica.Entorno
Imports
System.Data.OleDb
Public
Class frmGrafica1
Private Sub cmdactualizar_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
cmdactualizar.Click
DsTablas.EmpresasGrafico.Clear()
'1er paso, array de distintos rubros
Dim aRubros As String() = {"Turismo",
"Caficultura", "Agroindustria", "Ganaderia", "Artesania",
"Horticultura", _
"Psicultura", "Ecoturismo",
"Apiario", " Floricultura", "Otros",
"Ninguno"}
'2do paso, ciclo repetitivo que recorre el array
For i As Integer = 0 To
aRubros.Count - 1
'paso 2.1, crear la SQL-Select para obtener
los datos de cada rubro
Dim cSQL As String = "Select
" & aRubros(i) & ", count
(" & aRubros(i) & ") as
Total from Ficha Where " & aRubros(i) & " = true " & _
"group
by " & aRubros(i)
Datos.Conectar()
Dim
comando As New OleDbCommand(cSQL, Datos.oConexion)
Dim
lector As OleDbDataReader
= comando.ExecuteReader
Dim Fila As DataRow = DsTablas.EmpresasGrafico.NewRow
If lector.Read Then
Fila("Categoria")
= aRubros(i)
Fila("Total") = lector("Total")
'Agrgar esta informacion a la tabla del
dataset
DsTablas.EmpresasGrafico.Rows.Add(Fila)
End If
Datos.oConexion.Close()
Next
DsTablas.EmpresasGrafico.AcceptChanges()
'Verificar si hay en la tabla del dataset para generar la
grafica
If DsTablas.EmpresasGrafico.Count > -1 Then
'Generar la grfica
ografico.Series.Clear()
ografico.Titles.Clear()
ografico.DataBindTable(EmpresasGraficoBindingSource, "Categoria")
ografico.Series(0).ChartType
= DataVisualization.Charting.SeriesChartType.Pie
ografico.ChartAreas(0).Area3DStyle.Enable3D = True
ografico.Series(0).IsValueShownAsLabel = True
ografico.Titles.Add("Otras
actividades a invertir")
Else
MsgBox("No se ha generado la grafica,
porque no se encontro la informacion " & " para crear la misma", MsgBoxStyle.Information, "sin
Datos")
End If
End Sub
End
Class
Reporte
Vamos al Explorador de Soluciones, clic derecho “Agregar” “Nuevo Elemento”,
cuando nos aparezca el cuadro vamos a la columna izquierda y seleccionamos
“Reporting”, se nos aparecerán 3 opciones de reporte y escogeremos la segunda,
que dice “Informe”, le damos un nombre y “Aceptar”.
Ahora pegamos un objeto “Lista”
del cuadro de herramientas, aparecerá un cuadro que será necesario para hacer
la conexión con nuestra tabla.
En “Nuevo” se selecciona el DataSet que ya tenemos y en “Conjunto de datos
disponibles” seleccionamos el nombre de la Tabla, “Aceptar”.
Agrandamos el reporte del tamaño que más nos convenga y el objeto “Lista”
también debe llevar el mismo tamaño.
Agregamos cuadros de texto (del cuadro de herramientas) y escribimos el
titulo. Agregamos más cuadros de textos para escribir las preguntas y otros
para las respuestas. En caso de que el formulario de encuesta lleve nombre o
cosas así, en el reporte, en el segundo cuadro de texto (respuesta) haremos
clic en un cuadrito azul que aparece y seleccionaremos el campo “Nombre”.
Que en mi caso es mi idEvento.
Agregamos más cuadros de texto para
las respuestas que podrían ser de selección única como “A, B o C”.
Primero las ponemos en el reporte, con sus respectivas respuestas al lado. Luego
selecciono solo el cuadro de texto que dice “A”, vamos a la ventana de
propiedades y seleccionamos “BackGroundColor” escogemos el color que más nos
parezca.
Luego hacemos clic derecho en “A” “propiedades del cuadro de texto”, se
aparecerá un cuadro, entonces nos vamos a la sección de “Visibilidad” damos
clic en “mostrar u ocultar en Función de
una Expresión” clic en el icono del cuadro de texto en blanco.
Luego se aparecerá una línea de
código que tendremos que complementar y aquí esta: =not(Fields!preg1.Value
= "Si")
Y al final quedara algo así:
Repetiremos este procedimiento hasta terminar el reporte.
Pero si nuestra pregunta tiene respuestas con selección múltiple,
cambiaremos la línea de código, que será esta: =not (Fields!Turismo.Value = "True"
or "False")
Al final
quedara así:
Para finalizar, seleccionaremos “Detalles” (esta en la parte inferior
del proyecto) y haremos clic en la pequeña flecha, luego “Propiedades de
grupo”, aparece un cuadro en el cual nos iremos a la sección de “Salto de
pagina” y ahí seleccionamos “En cada instancia de grupo” y “También al
principio de grupo”.
Y después nos vamos a la sección “General” la opción “Agregar” y
seleccionamos nuestro id y aceptar.
Por último creamos un nuevo formulario y en el cuadro de herramientas en
la sección de “Informe” seleccionamos un “ReportViewer” y lo pegamos al
formulario.
Lo seleccionamos y hacemos clic en la flecha negra de la esquina
superior derecha, hacemos clic en la opción “Acoplar a contenido primario”
y en “Elegir informe” seleccionaremos el
informe que acabamos de hacer.
Hacemos doble clic en el formulario y copiamos el siguiente código:
Imports
Ficha_Estadistica.Entorno
Public
Class frmReporte
Private Sub frmReporte_Load(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
MyBase.Load
dsTablas.Merge(Datos.ObtenerDatos,
False)
Me.ReportViewer1.RefreshReport()
End Sub
End
Class
Con esto finalizamos nuestro reporte.
De esta manera concluyo con el formulario de encuesta, la grafica y el
reporte.
Espero que les sirva.






















No hay comentarios:
Publicar un comentario