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

duduml

problemas no case [Resolvido]

Recommended Posts

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!"

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other sites
duduml

Boas!

então ninguém tem palpites??:)

Weasel, agradecia a tua sabia ajuda...:P

CUMPS


"use windows, você merece!"

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.