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

duduml

problemas no case [Resolvido]

Mensagens Recomendadas

duduml

Boa tarde!!!  :)

mais uma vez, cá estou eu... :thumbsup:

O meu problema agora, é ...nem sei bem qual...  🤔

é o seguinte, eu tenho um sistema de login que passo a explicar:

1- abre a janela login, utilizador insere os dados...são veficados (procedimentos normais) e depois, se estiver tudo bem, chama o MDIParent2...

2- no MDIParent2 load...tenho o seguinte código (aqui começa o problema):

Private Sub MDIParent2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim nick As String = login.nickTextBox1.Text
        Dim conn As New NpgsqlConnection(con_str)
        '============== Criar consultas =================================================================
        Dim consulta As String = String.Empty
        Dim insere As String = String.Empty
        Dim administra As String = String.Empty
        consulta = "SELECT consultar FROM funcionarios WHERE nickname='" & nick & "'"
        insere = "SELECT inserir FROM funcionarios WHERE nickname='" & nick & "'"
        administra = "SELECT administrar FROM funcionarios WHERE nickname='" & nick & "'"
        '============= verificar as permissões de acordo com o utilizador ===============================
        conn.Open()
        Dim Consultar As New NpgsqlCommand(consulta, conn)
        Dim dr_consulta As String = Consultar.ExecuteScalar

        Dim Inserir As New NpgsqlCommand(insere, conn)
        Dim dr_insere As String = Inserir.ExecuteScalar

        Dim Administrar As New NpgsqlCommand(administra, conn)
        Dim dr_administra As String = Administrar.ExecuteScalar

        '============= Mostra ou não determinadas ABA's ===================================
        Select Case dr_administra.Trim
            Case True
                NovoToolStripMenuItem.Visible = True
                ConsultarToolStripMenuItem2.Visible = True
                UtilizadoresToolStripMenuItem.Visible = True
                ProdutosToolStripMenuItem.Visible = True
                GerirToolStripMenuItem3.Visible = True
                Exit Sub
        End Select
        Select Case dr_consulta.Trim
            Case True
                ConsultarToolStripMenuItem2.Visible = True
        End Select
        Select Case dr_insere.Trim
            Case True
                NovoToolStripMenuItem.Visible = True
        End Select
        Inserir.Dispose()
        Consultar.Dispose()
        Administrar.Dispose()
        conn.Close()
        conn.Dispose()
    End Sub

com esse código pretende ficar aqui:

consulta = "SELECT consultar FROM funcionarios WHERE nickname='" & nick & "'"
        insere = "SELECT inserir FROM funcionarios WHERE nickname='" & nick & "'"
        administra = "SELECT administrar FROM funcionarios WHERE nickname='" & nick & "'"

nas variaveis consulta, insere e administra com valores "true" ou "false", visto que é os valores que possuem na BD, é boolean

Depois consoante o seu grau de utilizador, ponho ou não visíveis diferentes ABA's do menu...

Select Case dr_administra.Trim
            Case True
                NovoToolStripMenuItem.Visible = True
                ConsultarToolStripMenuItem2.Visible = True
                UtilizadoresToolStripMenuItem.Visible = True
                ProdutosToolStripMenuItem.Visible = True
                GerirToolStripMenuItem3.Visible = True
                Exit Sub

e agora pergunto...

dúvidas...

o valor que as consultas retornam é boolean??

devo fazer o caso como?

assim:

case true

    ou    assim 

case "true"

o que tenho mal??? como corregir???

desculpem-la a extensão da questão...mas foi para perceberem...:S ou pelo menos, tentei...:)

cumps e obrigado!


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Select Case Boolean.Parse(dr_administra.Trim)

    Case True

    Case False

End Select

Alternativamente usa CBool em vez de Boolean.Parse, apenas porque o CBool consegue agarrar em "1" e "0" e o Boolean.Parse, estupidamente não.

Se quiseres agarrar na string podes:

Select Case dr_administra.Trim.ToUpper

    Case "TRUE"
        MsgBox("Verdadeiro")
    Case "FALSE"
        MsgBox("Falso")
    Case Else
        MsgBox("Nem verdadeiro nem falso. Não faço ideia do que seja.")

End Select


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

nem um nem o outro deram...  :down:

dá este erro: A referência de objecto não foi definida como uma instância de um objecto.

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

pensei que era na declaração de variáveis....mas não tive sucesso nem sorte!  :wallbash:

o que será este problema...:thumbsup:


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

dr_administra só pode vir a Nothing.

Começa a tirar partido de Debug.Print, breakpoints, e outras ferramentas de debug 😡


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

eu bem uso o breakpoint, mas não me estão a aparecer valores nenhums!!! :thumbsup:

uma das linhas onde o uso é esta: dr_administra = Administrar.ExecuteScalar

mas nada....fogo...:)

cumps


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Não tens mais nada para adiantar.

A variável vem a "Nothing", ou vazia, com referência a nada.

Provavelmente não estão a surgir resultados do comando.

Usa as ferramentas de debug para descobrir o valor da variável antes e depois da execução do comando.

If dr_administra Is Nothing
    MsgBox ("dr_administra não se refere a nada! Está vazio! Não tem nada para avaliar ou com o que fazer testes lógicos!")
End If


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

já percebi de onde vem o problema....

Dim nick As String
        nick = login.nickTextBox1.Text

eu com esse código pretendo ir buscar o nick do user que fez login....através de uma variável que defini global no form login...

porém, a variável fica "nothing"....daí não ir buscar nada...  :cheesygrin:

como faço para ficar com o nick do user que fez o login???

CUMPS  :thumbsup:


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

no outro dia o weasel disse que isto dava:

Public Dim variavel as String

e na outra from

txtTextBox1.Text = Form1.variavel

mas depois dissseram-me isto:

Funciona, mas idealmente deverias conseguir passar o valor através de um método, por exemplo:

Form2 f2 as new Form2()
f2.alterarValor(valor)
f2.Show()

E no Form2 a tua função ficaria algo como:

public sub alterarValor(valor as int)
  meuValor = valor;
end sub

(Acho que é esta sintaxe em VB)

Assim não precisas de alterar a acessibilidade dos atributos.

No entanto, não dá nem uma nem a outra... :cheesygrin:


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

A solução não tinha a ver com o código em si, mas sim com o valor da variavel...que era perdido...

o que fiz foi passar o nick no user para uma var publica num modulo, e vou buscar o valor para verificar...:thumbsup:

CUMPS


"use windows, você merece!"

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.