Jump to content

problemas no case [Resolvido]


duduml
 Share

Recommended Posts

Boa tarde!!!  🙂

mais uma vez, cá estou eu... 👍

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

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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...  😁

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

CUMPS  👍

"use windows, você merece!"

Link to comment
Share on other sites

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... 😁

"use windows, você merece!"

Link to comment
Share on other sites

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...👍

CUMPS

"use windows, você merece!"

Link to comment
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
 Share

×
×
  • Create New...

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.