• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bioshock

MessageBox Vb 2008 (Resolvido)

24 mensagens neste tópico

Dim x As Object
        x = command.ExecuteScalar
        'Caso seja utilizador Comum
        If Boolean.Parse(x.ToString) = Nothing Then
            MsgBox("Bem vindo!", MsgBoxStyle.Information, "Login")
            Me.Close()
        ElseIf MessageBox.Show("Os dados que inseriu, estão incorrectos!", "Dados Incorrectos", MessageBoxButtons.OK) Then
        Else
            'Caso seja Administrador
            MsgBox("Bem vindo, tens acesso a todo o conteúdo da Aplicação!", MsgBoxStyle.Information, "Login")
        End If

O problema está na mensagem de erro "Os dados que inseriu, estão incorrectos".

Não consigo por a funcionar...alguma sugestão?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu IF do ELSEIF não está a fazer nenhum teste lógico.

A messagebox deveria ser consequência do teste lógico que não existe e não estar no lugar do teste lógico que a pode eventualmente disparar.

As messageboxes só devem ser alvo de teste lógico se quiseres verificar em que butão o user carregou, por exemplo:

        If MessageBox.Show("Sim ou não pah?", "Decide-te!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            MsgBox("Carregou no SIM")
        Else
            MsgBox("Carregou no NÃO")
        End If

Se não efectuares o teste lógico dessa forma, o que ele te devolve é o primeiro valor verdadeiro, e como a messagebox existe... é verdadeira, e por isso nunca te vai chegar à msgbox que avisa o tipo que é administrador.

Se o erro te está a dar na síntaxe da messagebox em si... isso não tem problema. Está correcta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais obrigado:

Mas tipo, o que eu quero é:

No botão, ele verifica se o utilizador é administrador ou comum. Até aqui tudo bem. Depois o que eu quero é: Caso a pessoa insira mal os dados..tem que aparecer uma mensagem de erro..percebes?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Certo.

Se não nos disseres o que significa "inserir mal os dados" no contexto da tua aplicação é difícil de te dar uma ajuda.

Contextualiza o problema, e já que estás nisso, descreve-o.

Porque se dá erro, ainda não percebi qual é.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Correcto:

Em baixo está o código do Botão "Entrar" no Form Login:

Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Application.Info.DirectoryPath & "\basededados.mdb';Persist Security Info=True;"
        Dim OLE As String = "SELECT Admin From utilizadores where username = @utilizador and password = @password;"
        Dim connection As New OleDbConnection(myConnectionString)

        Dim command As New OleDbCommand(OLE, connection)
        command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = TextBox1.Text
        command.Parameters.Add("@password", OleDbType.VarChar).Value = TextBox2.Text
        connection.Open()
        Dim x As Object
        x = command.ExecuteScalar
        'Caso seja utilizador Comum
If Boolean.Parse(x.ToString) = Nothing Then
            MsgBox("Bem vindo!", MsgBoxStyle.Information, "Login")
            Me.Close()
        Else
            'Caso seja Administrador
            MsgBox("Bem vindo, tens acesso a todo o conteúdo da Aplicação!", MsgBoxStyle.Information, "Login")
            Me.Close()
        End If


        connection.Close()
        connection = Nothing
        command = Nothing

Está a funcionar correctamente..o problema está em: Caso a pessoa, introduza os dados incorrectamente, não acontece nada e eu gostava que aparecesse uma mensagem de erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

        If Boolean.Parse(x.ToString) = Nothing Then
            MsgBox("Bem vindo!", MsgBoxStyle.Information, "Login")
            Me.Close()
        ElseIf Boolean.Parse(x.ToString) = False
MessageBox.Show("Os dados que inseriu, estão incorrectos!", "Dados Incorrectos", MessageBoxButtons.OK) Then
        Else
            'Caso seja Administrador
            MsgBox("Bem vindo, tens acesso a todo o conteúdo da Aplicação!", MsgBoxStyle.Information, "Login")
        End If

Continuas sem especificar o que são "dados incorrectos". É tipo não existir na DB?

Se for isso, tens de fazer uma query, sei lá, tipo um SELECT COUNT com esses parâmetros para verificar se existe algum registo com esses dados ou não, e actuar com isso em vista.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, eu editei o post, mas secalhar não viste:

Está assim neste momento:

 If Boolean.Parse(x.ToString) = Nothing Then
            MsgBox("Bem vindo!", MsgBoxStyle.Information, "Login")
            Me.Close()
        Else
            'Caso seja Administrador
            MsgBox("Bem vindo, tens acesso a todo o conteúdo da Aplicação!", MsgBoxStyle.Information, "Login")
            Me.Close()
        End If

E eu, como já te disse, queria a tal mensagem de erro.

Falaste em Select count?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de tentares verificar se o campo Admin vem True, deves verificar o que pretendes.

Das duas uma, ou fazes uma query com SELECT COUNT:

SELECT COUNT(*) FROM utilizadores WHERE username = @utilizador and password = @password

E verificas o valor que vem (devolve o número de registos contados, 0 se nenhum)

OU, verificas se essa query, que estás a fazer, não devolve nada. Se não devolver nada significa que os dados estão incorrectos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Prefiro a 2ª Opção.

Contudo, o que tu me disseste foi que:

Caso X fosse = Nada então os dados estão incorrectos?

Desculpa a ignorância, mas ainda sou novo nisto, tentei fazer algo:

        Dim x As Object
        x = command.ExecuteScalar
        'Caso seja utilizador Comum
        If Boolean.Parse(x.ToString) = Nothing Then
            MessageBox.Show("Dados Incorrectos")
        Else
            If MsgBox("Bem vindo!", MsgBoxStyle.Information, "Login") Then
                Me.Close()
            Else
                'Caso seja Administrador
                MsgBox("Bem vindo, tens acesso a todo o conteúdo da Aplicação!", MsgBoxStyle.Information, "Login")
                Me.Close()
            End If
        End If

Obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de verificar se o que vem da base de dados é nada.

Se tentares fazer um parse a nada é capaz de te devolver um erro.

Não sei o que raio é o ExecuteScalar (nem tenho muita disponibilidade agora para procurar), e por isso não sei o que te é devolvido.

Normalmente quando trabalho com bases de dados mando preencher sempre uma DataTable.

Receio que não te possa indicar muito mais acerca disso, há-de passar por aqui alguém que saiba isso de cor :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim por alto:

ExecuteScalar vai à base de dados buscar o valor da 1ª Linha.

Obrigado na mesma, vou esperar e ver se alguém me pode ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vai buscar o valor à primeira linha, e primeira coluna, presumo.

Porque se é mesmo só a primeira linha, devolverá um DataRow ?

Exprimenta meter uma messagebox com o resultado do scalar .toString e testas todas as situações.

Depois de estudares o que é devolvido em todas as situações já estás pronto para preparar lógica.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exactamente, à primeira coluna.

Vou experimentar o que disseste.

Mas estás a sugerir algo do género: messagebox.show("ksdkskd", x.tostring") ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por exemplo.

Assim vais ver o que te é devolvido.

Só depois de analisar o que volta em todas as situações podes preparar um background lógico.

Isto mais porque estás a declarar como Object. Daí pode vir muita coisa... i mean.. tudo. :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Portanto..por outras palavras: Estou feito ao bife?  :confused:

Vou ver se consigo algo, obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) não. Isso é verdadeiramente fácil, não te preocupes.

É uma questão de analisar a devolução e preparar a lógica para as possibilidades.

Se não conseguires, alguém te há-de aparecer com uma solução brutal, aqui não falta malta que sabe :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, eu fiz isto:

If Boolean.Parse(x.ToString) = Nothing Then
            MsgBox("Bem vindo!", MsgBoxStyle.Information, "Login")
            Me.Close()
        Else
            'Caso seja Administrador
            MsgBox("Bem vindo, tens acesso a todo o conteúdo da Aplicação!", MsgBoxStyle.Information, "Login")
            Me.Close()
        End If

        MessageBox.Show(x.ToString)

Caso entre como utilizador comum recebo a mensagem "False", caso entre como administrador recebo a mensagem "true".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, até agora só tens de trocar o Nothing para False.

E se meteres dados que nao existam? (como querias controlar)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se meter dados incorrectos aparece o seguinte erro:

"Object reference not set to an instance of an object."

Vou experimentar trocar Nothing para False.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aha!

Então só tens de fazer o seguinte:

If x Is Nothing Then
            MsgBox("Dados incorrectos e tal", MsgBoxStyle.Information, "Login")
            Exit Sub
End If

If Boolean.Parse(x.ToString) = False Then
            MsgBox("Bem vindo!", MsgBoxStyle.Information, "Login")
            Me.Close()
        Else
            'Caso seja Administrador
            MsgBox("Bem vindo, tens acesso a todo o conteúdo da Aplicação!", MsgBoxStyle.Information, "Login")
            Me.Close()
        End If

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já está feito! Deu certo.

Só uma coisa, o que faz concretamente o Exit sub? Fecha o processo em cima para começar o de baixo?

Obrigado :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É que sem o exit sub, não funciona o que me disseste.

Bem, obrigado pela ajuda :confused:

0

Partilhar esta mensagem


Link 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