Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Patrijosa

vb.NET + MSSQL

Mensagens Recomendadas

Patrijosa

olá manos...

Como faço consultas na base de dados SQL Server com o VB.Net...

Exemplo:

tenho duas tabelas na minha base de dados: tblUser (id, Nome, foto) e  tblPermissao (idPermissao, idUser, horaEntrada, horaSaida)...

a ideia é: o user só deve ter permissão se a hora actual estiver entre a horaEntrada e a horaSaida... caso houver permissao, a aplicação deve ir na tblUSer, buscar a foto numa picture box e o nome numa label... e aparecer uma msgbox, por exemplo do tipo "Acesso Permitido", caso contrário, "Acesso negado"...

como faço isso no Visual Basic 2008 + MS SQL Server 2008?

grato pela atenção

Cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Se pretendes só consultar tens muitas opções podes faze-lo por uma gridview e depois carregar a informação lá para dentro. relativamente simples.

Metodo:

Arrastar uma gridview para o form depois fazê-lo pelo wizard que é uma opção fiável para iniciação.

Cumpriementos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

Se pretendes só consultar tens muitas opções podes faze-lo por uma gridview e depois carregar a informação lá para dentro. relativamente simples.

Metodo:

Arrastar uma gridview para o form depois fazê-lo pelo wizard que é uma opção fiável para iniciação.

Cumpriementos Paulo Silva

bem... não verdade acho que é mais validação do que consulta... verificar se o utilizador existe e obter os seus dados e verificar se está a entrar no horário permitido...

??

cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Pelo que entendi o que pretendes é como se fosse uma sessão de login certo? ou algo do genero?

   
            Dim ID As Integer
           
                Dim codigo_sql As String
                Dim conexao As New SqlConnection
                Dim Comando As New SqlCommand
                Dim meudatareader As SqlDataReader
                Dim perfilID As Integer
                Dim UtilizadorNome As String
                UtilizadorNome = ""
                ' Ligação à base de dados
                conexao="ligação à base de dados"
                'Abro a conexao
                Try
                    conexao.Open()
                    codigo_sql = "Select * from tblPermissao  where horaEntrada > '" & date.now & "' and HoraSaida < '" & date.now & "' 
                    Comando = New SqlCommand(codigo_sql, conexao)
                    meudatareader = Comando.ExecuteReader()
                    'Precorro a tabela e verifico de existe o username e password
                    While meudatareader.Read
                        ' Aqui ficas com o ID do horario acho que com este código já consegues avançar
                        ID = meudatareader.Item("idPermissao")
                        
                    End While
                Catch ex As Exception
                    MsgBox(ex.Message)
                    laErro.Text = "Erro ao carregar"
                Finally
                    conexao.Close()
                    'meudatareader.Close()
                    Comando.Dispose()
                End Try

              
              
          

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

o que pretendo fazer em PHP seria o seguinte:

<?php
resquire ('conexao.php');
$sql = "SELECT * FROM permissoes WHERE CodEntidade='$CodEntidade' && DataInicio <= '" . date('Y-m-d') . "' && DataFim >= '" .date('Y-m-d'). "' && Estado='A' ";
$query = mysql_query($sql);
$resultado = mysql_num_rows($query);

if ($resultado > 0){

$sql1 = "select  * from users where CodEntidade='$CodEntidade' ";
$query1 = mysql_query($sql1);

$res = mysql_fecth_assoc($query1);

echo "Nome: $res['nomeEntidade']<br />";
echo "Nivel Acesso: $res['nivelAcesso']<br />";
echo "Entrada Permitida!";

} else {
echo "acesso negado!";
}

essa é a ideia...

como fazer isso em vb.NET + MSSQL?

grato pela atenção

Cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

:thumbsup: peço desculpa, isso foi tirado e modificado de código meu e retirei a validação que tenho.

Peço desculpa já edito.

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

olá manos

segui um dos procedimentos acima e cosnegui verificar se o user tem acesso ou não.. daí tentei buscar as informações do user e me aparece o erro apresentado na imagem abaixo:

vberror.png

Este é o trecho do meu código

Private Sub txtCardNum_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCardNum.KeyPress
        If Char.IsNumber(e.KeyChar) Or e.KeyChar = Chr(13) Or e.KeyChar = Chr(8) Then
            e.Handled = False
            If e.KeyChar = Chr(13) Then
                ' Se a tecla enter for pressionada...
                If txtCardNum.Text = "" Then
                    MsgBox("Digite um Número Válido")
                Else
                    ' Pesquisar se existe...
                    'Dim SQL As String = "Select count(* ) N FROM tblFacturas WHERE [CodEntidade]=@CodEntidade AND DataInicio <= '" + Date.Today + "' AND DataFim >= '" + Date.Today + "' AND Estado='A' "
                    'Dim command As New SqlCommand(SQL, myConnection)

                    'command.Parameters.Add("@CodEntidade", SqlDbType.VarChar).Value = txtCardNum.Text
                    'Dim reader As SqlDataReader = command.ExecuteReader()

                    myCommand = New SqlCommand("Select * FROM tblFacturas WHERE CodEntidade=@Entidade AND Estado='A' ", myConnection)
                    myCommand.Parameters.Add("@Entidade", SqlDbType.VarChar).Value = txtCardNum.Text

                    Dim reader As SqlDataReader = myCommand.ExecuteReader()

                    'Caso existam linhas
                    If reader.HasRows Then

                        myCommandd = New SqlCommand("SELECT * FROM Entidades WHERE CodEntidade=@Entidade", myConnection)
                        myCommandd.Parameters.Add("Entidade", SqlDbType.VarChar).Value = txtCardNum.Text


                        Dim readerr As SqlDataReader = myCommandd.ExecuteScalar()
                        If readerr.HasRows Then
                            While readerr.Read()
                                lblNomeCliente.Text = readerr.Item(1)
                                readerr.Close()
                            End While
                        Else
                            lblNomeCliente.Text = "Utilizador Não Existe!"
                            readerr.Close()
                        End If

                        'While reader.Read()
                        'MsgBox("Acesso Permitido: ") '& reader.Item(1))
                        'lblNomeCliente.Text = txtCardNum.Text
                        lblInfoAcesso.Text = "Permitido"
                        txtCardNum.Text = ""
                        reader.Close()
                    Else
                        lblNomeCliente.Text = txtCardNum.Text
                        lblInfoAcesso.Text = "Negado"
                        txtCardNum.Text = ""
                        reader.Close()
                    End If
                    ' myCommand = New SqlCommand("Select count(* ) N FROM tblFacturas WHERE CodEntidade='" + txtCardNum.Text + "' AND DataInicio <= '" + Date.Today + "' AND DataFim >= '" + Date.Today + "' AND Estado='A' ", myConnection)

                    'dataReader = myCommand.ExecuteReader()

                    ' Percorendo a tabela e ver se existe user...
                    '   While dataReader.Read
                    'MsgBox("Acesso Permitido")
                    ' dataReader.Close()
                    'End While

                End If
                End If
            Else
                e.Handled = True
        End If

    End Sub

o que será que está errado?

cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Não podes ter dois datareader abertos ao mesmo tempo para abrires o segundo terias de fechar o primeiro percebes?

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

Não podes ter dois datareader abertos ao mesmo tempo para abrires o segundo terias de fechar o primeiro percebes?

Cumprimentos Paulo Silva

o que acontece é que quando fecho o primeiro, não consigo executar o segundo ... dá um outro erro... já tentei utilizar datareaders com nomes diferentes e nada

Grato pela atenção

Cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Esperimenta em vez de fechares fazeres .dispose.

Eu já tive esse problema tive de usar outra maneira sem ser com o datareader.

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

Esperimenta em vez de fechares fazeres .dispose.

Eu já tive esse problema tive de usar outra maneira sem ser com o datareader.

Cumprimentos Paulo Silva

olá...

desculpe aí.... sou novato em VB.Net... pois programo em PHP, mas apareceu um problema que me exigiu mexer com VB.NET...

Como utilizo este .dispose ???

pois é fazer pesquisa em duas tabelas... a primeira na tabela permissoes, verificando se o utilizado possui permissões, caso o utilizador possuir permissoes de acesso aí faz-se outra consulta na tabela utilizadores onde vou a busca das informações do mesmo, como o nome, data de registo, foto... etc...

grato pela atenção

Cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Usa sugestão porque não fazes tudo de uma vez, fazes uma consulta onde unes as duas tabelas e ao mesmo tempo de validas as permissões já carregas as informações dos utilizadores assim é dois em 1.

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

Usa sugestão porque não fazes tudo de uma vez, fazes uma consulta onde unes as duas tabelas e ao mesmo tempo de validas as permissões já carregas as informações dos utilizadores assim é dois em 1.

Cumprimentos Paulo Silva

este é o x do problema... como fazer esta consulta nas duas tabelas e obter os resultados com o vb.net?

grato pela atenção

cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

O mais correcto era no sql fazeres uma view ou consulta. mas podes por esta instrução sql:

SELECT     dbo.tblpermissao.*, dbo.tblUser.*
FROM         dbo.tblpermissao INNER JOIN
                      dbo.tblUser ON dbo.tblpermissao.IDuser = dbo.tblUser.ID
WHERE CodEntidade='$CodEntidade' && DataInicio <= '" . date('Y-m-d') . "' && DataFim >= '" .date('Y-m-d'). "' && Estado='A' ";

não te esqueças de por tudo em linha

tudo em linha por a que estava :

 "SELECT * FROM permissoes WHERE CodEntidade='$CodEntidade' && DataInicio <= '" . date('Y-m-d') . "' && DataFim >= '" .date('Y-m-d'). "' && Estado='A' ";

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

resolvido

com base nesse código:

SELECT     dbo.tblpermissao.*, dbo.tblUser.*
FROM         dbo.tblpermissao INNER JOIN
                      dbo.tblUser ON dbo.tblpermissao.IDuser = dbo.tblUser.ID
WHERE CodEntidade='$CodEntidade' && DataInicio <= '" . date('Y-m-d') . "' && DataFim >= '" .date('Y-m-d'). "' && Estado='A' ";

obrigado a todos

Cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Patrijosa

prezados,

acho que me enganei ao dizer que o problema foi resolvido... na verdade só uma parte do problema foi resolvido....

se notarem, a query acima só retornará valor se o utilizador existir e o acesso for permitido... e como fazer para imprimir o nome do utilizador se o mesmo existisse mas não tivesse acesso?

pois já tentei continua a dar o erro de um datareader já aberto.... já fechei a conexão e o data reader mas continua com o mesmo erro

obrigado pela atenção

cumps

PS


O verdadeiro sábio é um eterno aprendiz!

http://www.patriciodossantos.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.