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.