NETITC

 Busca Online:
 

Seja bem vindo(a) Visitante, voc no est logado deseja logar
na comunidade ASPNETi.COM e participar de servios e promoes ? clique aqui.

Como fazer uma enquete - parte 1



Data Publicação: 9/12/2008 16:28:51
Total de visualizações: 3064

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras


 

Tecnologias usadas:

Banco de dados SQL Server 2005

Linguagem de programação: C#.NET

Tecnologia: ASP.NET

Stored Procedure

 

Objetivo:

         O meu objetivo é mostrar a todos vocês leitores, como é fácil fazer passo a passo um sistema de enquete. As perguntas são buscadas no banco de dados utilizando Stored Procedure junto com as respostas.

        

 

Figuras e Solução:

         Todas as figuras neste texto não é de ilustração, ou seja, são figuras reais; buscadas da solução real. Todo o software mostrado nestes passos, foi feito, comprovado e testado.

 

Projeto:

         Vamos começar de camada debaixo para cima, ou seja, da parte de acesso a dados para depois irmos à camada de aplicação. O primeiro passo é mostrar como está o banco de dados, ou seja, tabela e stored procedures. (Referência 1.1)

 

Referência 1.1

 

         É importante dizer que, quando pensei em fazer uma enquete; pensei em duas tabelas diferentes, uma apenas com as perguntas e outra com as respostas. Lógico que, contendo uma chave com co-relação entre tabelas.

 

Tabela TB_ENQUETE_PER

         Note que, na tabela TB_ENQUETE_PER o campo CH_PER é a chave que não permite NULL e é AUTO-INCREMENTADO. O campo NO_PER fica a descrição da pergunta, ou seja, propriamente a pergunta da enquete.

         No campo DT_PER fica a data da pergunta para controle e o último campo ST_PER é o status da pergunta, isto é, ativo ou inativo (0 ou 1) que no meu caso escolhi. Você pode colocar ‘A’ ou ‘I’ sem nenhum problema; lembrando que no momento de pegar as perguntas o status deve ser correlativo.

 

Tabela TB_ENQUETE_RES

         O campo CH_RES funciona como chave da tabela de resposta, auto-incremento e não permite NULL. CH_PER é o campo relacionado a pergunta cadastrado na tabela anterior, ou seja, cadastrado na tabela TB_ENQUETE_PER. Este é o campo importante para relacionar a pergunta com as resposta. Lembro que, para cada pergunta podem ter várias respostas.

         No campo OPCAO_RES, posso colocar a descrição da resposta, por exemplo (Sim, Não). O campo VOTOS_RES é para computar os votos postados pelos usuários, ou seja, o número de votos para esta opção escolhida.

 

Negócio

         Em regra de negócio, é bom enfatizar que um mesmo usuário não pode votar duas vezes no mesmo dia. Isso para, não haver fraude de voto, nem mesmo de usuário querendo trapacear.

         Portanto no sistema de enquete, deve ser verificado o IP da máquina antes do voto ser computado. Caso o IP não for achado, o mesmo deve ser inserido em uma tabela e depois computado o voto. Se o mesmo usuário tentar votar no mesmo dia, essa verificação será feita novamente e o IP será encontrado.

         Para isso, construí uma outra tabela para manter este controle. (Referência 1.2)

 

Referência 1.2

 

 

Tabela de IP

         A tabela para guardar IP do usuário é bem simples. O primeiro campo CH_IP é auto-numérico e chave da tabela, não aceita NULL. O segundo campo, IP é propriamente o número do IP do usuário que está votando.

         O campo DT_IP grava a data DD/MM/YYYY que o usuário votou. Esses dois campos, DT_IP e IP são verificados diretamente antes de ocorrer a votação.

 

Stored Procedure

         Foram feitas 4 (quatro) procedures para toda essa aplicação, ou seja, para inserir, buscar, somar e verificar os dados da enquete. Segue as mesmas:

 

Primeira Procedure

 

 

CREATE PROCEDURE [dbo].[ASPNETI_EXEMPLO1]

 

AS

         SELECT

         PER.CH_PER, PER.NO_PER, RES.OPCAO_RES

FROM

         TB_ENQUETE_PER PER,

         TB_ENQUETE_RES RES

WHERE

         PER.CH_PER = RES.CH_PER AND

         ST_PER=1

 

 

Table 1.1

 

         Nessa procedure (table 1.1) apenas seleciono os campos de duas tabelas (TB_ENQUETE_PER e TB_ENQUETE_RES). Os dados trazidos são: CH_PER, NO_PER, OPCAO_RES. A camada de apresentação busca nessa procedure.

 


Segunda Procedure

 

 

CREATE PROCEDURE [dbo].[ASPNETI_EXEMPLO2]

 

         @OPCAO_RES AS VARCHAR(3)

AS

 

DECLARE @VOTO AS INT

 

SET @VOTO = (SELECT VOTOS_RES FROM TB_ENQUETE_RES WHERE OPCAO_RES = @OPCAO_RES

         AND  CH_PER =

         (SELECT MAX(CH_PER) AS CH_PER FROM TB_ENQUETE_RES))

 

SET @VOTO = @VOTO + 1

 

UPDATE

         TB_ENQUETE_RES SET VOTOS_RES=@VOTO

WHERE CH_PER =

         (SELECT MAX(CH_PER) AS CH_PER FROM TB_ENQUETE_RES)

         AND

         OPCAO_RES = @OPCAO_RES

 

Table 1.2

 

         Na procedure (table 1.2) recebo como parâmetro de entrada a opção escolhida pelo usuário, ou seja, (Sim ou Não). Note que coloquei apenas VARCHAR(3). Caso suas opção tenham mais de três letras, favor alterar esse número de caracter.

         Depois, declarei a variável VOTO como INT. É o número de votos contabilizados na tabela. No passo seguinte, fiz um select pegando o número máximo de votos, somando mais um e atualizando na tabela.

         Esse select sempre pega a enquete ativa, ou seja, a de chave com número maior.

 

Terceira Procedure

 

        

 

CREATE PROCEDURE [dbo].[ASPNETI_EXEMPLO3]

 

       @IP AS NVARCHAR(50)

AS

 

INSERT INTO TB_IP (IP, DT_IP) VALUES (@IP,CONVERT(CHAR(10),GETDATE(),102))

 

Table 1.3

 

         Na procedure (table 1.3) apenas faço o insert na tabela IP (TB_IP) o ip do usuário e a data no formato (dd/mm/yyyy).

 

Quarta procedure

        

CREATE PROCEDURE [dbo].[ASPNETI_EXEMPLO4]

 

         @IP AS NVARCHAR(50)

AS

 

SELECT

         COUNT(CH_IP) AS CH_IP

FROM

         TB_IP

WHERE

         IP = @IP AND

         DT_IP = CONVERT(CHAR(10),GETDATE(),102)

Table 1.4

 

         Na procedure (table 1.4) apenas faço um select count no banco de dados e na tabela TB_IP se o valor passado e o dia são iguais. Caso retornar 1, o usuário não pode votar, se for 0, ele pode votar e depois é inserido o IP do mesmo no banco de dados.

         Com isso, eliminamos o problema do usuário votar mais de uma vez no mesmo dia. Isso pode ser definido de outra forma, por exemplo: um voto por mês, por semana e até por ano.

 

         Bom, aqui eu termino a primeira parte do artigo, com banco de dados. A segunda parte vem o software e interfaces de acesso. Qualquer dúvida, favor entrar em contato ou comente o mesmo que respondo.



Total de visualizações: 3064
voltar   comente  subir


Comentários:

Comentado por: davids - 10/12/2008 0:00:00
Só uma sugestão: devia definir o objectivo do projecto duma forma mais clara porque senão não se entende o que pretende fazer. Eu não sei o que é uma "enquete" logo o resto do artigo deixou de ser interessante.
Comentado por: Mauricio Junior - 10/12/2008 0:00:00
Obrigado pela sugestão. Para te explicar: enquete é quase um sistema de pesquisa de satisfação / votação. Existe uma pergunta e existem alternativas a serem escolhidas; isso é enquete.
Comentado por: fernando rubim - 17/9/2009 0:00:00
Mauricio, é possivel disponibilizar todo o projeto pois está díficil de copiar todos os comandos(enquete II)
obrigado

Comente (dê sua opinião): VOCÊ PRECISA LOGAR

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

TV no Celular com Windows Mobile
Inserindo Usuário no Banco de Dados MYSQL Usando Tecnologia AJAX
ASP.NET MVC
Ler RSS usando o Visual Studio.NET 2005
Microsoft Kin
Evento Brasil DotNet - gratuíto
Microsoft Mobile Explorer 3.0
Microsoft Preview Windows Phone 7 in NYC
Backup, qual a importância dele na sua vida?
Microsoft Answers
Evento BrasilDotNet 2008
Criando, utilizando e agendando sistema de backup
Como utilizar CSS no VS 2003
Prepare o Sql Server para o VS 2005
Sistema iGas - Controle de Gasolina
Reconhecimento do Google
Vídeo sobre banco de dados
CES em Las Vegas
My Tracks
Conecte - novidades tecnológicas revolucionam a medicina
Visual SourceSafe - Série 5
Vídeo - Ler EventLog do Windows usando C#.NET
Desenvolvimento de Aplicativos para TV Digital - Parte 4
Visual SourceSafe - Série 3
Chama método que está dentro do COM PLUS (COM +)
Criando Números Aleatoriamente
Generics na prática
Abrindo Janela de Forma Modal
Orientação a Objetos com Visual Studio.NET 2005 (o famoso OO) – parte 1
E-mail Carta de Amor - Vírus
Vírus - Telegrama Eletrônico
Visualizar no Próprio Mail (Macbook)
Usando ProgressBar com Visual Studio.NET 2005
Criando uma aplicação de uma maneira nova para melhor publicação
Como criptografar a string de conexão no Web.Config.
Sobre o Autor
  [sumir] [aparecer]
 
Mauricio Junior Maurício Júnior
Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog:  blog.mauriciojunior.orgSite pessoal  www.mauriciojunior.org

Informaes Online
Usurios Online: 114
Artigos:  749
Vdeos:  61
PodCast's:  44
Frum:  3128
Empregos:  1385
Usurios Cadastrados: 6163
Publicidade
LAYERDEV




Vdeos Publicados
 

Duas dicas de internet - Google RealTime e OpenDNS

Desconfie sempre da internet e emails

Microsoft Office online no Safari funcionando

Inovação Visual Studio .NET 2010 - parte 4

Office Live online

TAB TAB na ferramenta Visual Studio .NET

Apresentação do IMC - Sistema de Controle de Peso Mobile

Inovação Visual Studio .NET 2010 - parte 3

Inovação Visual Studio .NET 2010 - parte 1

Download de vídeos com o Safari

Criando Chart - Novo componente integrado com o Visual Studio.NET 2010

Serviços: SAC e SMS integrado

Café com TI - Info sobre o Visual Studio.NET 2010 - WebConfig

Café com TI - Info sobre o Visual Studio.NET 2010

Café com TI - Vírus se passando por Correios

Café com TI - Novo jeito de mandar e-mail com vírus

Café com TI - Formatando todo tipo de String

Resolvido erro do Banco do Brasil no browser

Erro no site do Banco do Brasil com o Safari

Duas dicas do Snow Leopard

Incompatibilidade no Snow Leopard

E-mail com vírus, veja os detalhes

Café com TI - Continuando a configuração de Themes no site

Café com Ti - Banner Rotativo

Café com TI - Evento Eco Brasília

Café com TI - Themes dentro do ASPNETi.COM

Café com TI - Trabalhando com o iCal no Macbook

Café com TI - Deixando o rodapé do seu site fixo

Café com TI - Windows 7 sendo utilizado sem qualquer incompatibilidade

Café com Ti - ASP.NET - Explicando o componente ModalDialogExtender do Ajax Toolkit

Café com TI - Indexação de URL com ASP.NET

Café com TI - Configurando Mail para sua conta no HotMail
Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC