OCULTAR FOMULARIO NO VB6

ANABON0106 30/05/2011 00:57:08
#375272
Olá bom dia pessoal

Estou criando um programa em vb6 e queria ocultar alguns formulários dependendo do login ... No form de cadastro de novos usuarios coloquei alguns CheckBox, e gostaria de ocutar os form selecionados no CheckBox para aquele usuario... Mas não tenho a menor ideia de como fazer isso...

Se alguém tiver um tutorial .. ou alguma dica eu agradeceria muito....

Forte abraço
FEDERHEN 30/05/2011 08:24:21
#375281
Você precisa evitar de dar o .show no form.
Caso você apresenta um menu no seu projeto para fazer a chamada do form, você pode colocar um IF no LOAD do form e caso o form não deve ser disponibilizado para o usuário, deixe a opção invisivel atravez da propriedade VISIBLE=FALSE no menu.

Exemplo: Suponha que o nome da opção do menu seja mnuClientes e você não quer que o usuario tenha acesso a essa opção. Coloque no LOAD do form onde está o menu a linha de código [txt-color=#e80000]mnuClientes.Visible = False[/txt-color]

ANABON0106 30/05/2011 22:24:46
#375376
Amigos muito obrigada pela ajuda... mas passei o dia todo e naum consegui resultado algum.....
No meu form de cadastro de novos usuarios eu uso o seguite codigo para salvar num banco acess 2003

Citação:

Private Sub cmdsalvar_Click()
Set con = New ADODB.Connection
Set RS = New ADODB.Recordset
con.Open (cnSQL)

RS.Open [Ô]Select * from login[Ô], con, adOpenKeyset, adLockOptimistic


If txtapelido = [Ô][Ô] Then
MsgBox [Ô]Informe o login do usuário[Ô], vbOKOnly, [Ô]Campo Vazio[Ô]
Exit Sub
End If

If txtsenha = [Ô][Ô] Then
MsgBox [Ô]Informe a senha de acesso[Ô], vbOKOnly, [Ô]Campo Vazio[Ô]
Exit Sub
End If

With RS
.AddNew
.Fields([Ô]apelido[Ô]) = Me.txtapelido
.Fields([Ô]senha[Ô]) = Me.txtsenha
.Fields([Ô]cadastrocliente[Ô]).Value = CBool(Check1.Value)
.Fields([Ô]cadastroprodutos[Ô]).Value = CBool(Check2.Value)
.Fields([Ô]cadastrofornecedor[Ô]).Value = CBool(Check3.Value)
.Fields([Ô]novousuario[Ô]).Value = CBool(Check4.Value)
.Fields([Ô]vendas[Ô]).Value = CBool(Check5.Value)
.Fields([Ô]apagar[Ô]).Value = CBool(Check6.Value)
.Fields([Ô]areceber[Ô]).Value = CBool(Check7.Value)
.Fields([Ô]comprasclientes[Ô]).Value = CBool(Check8.Value)
.Fields([Ô]buscarapia[Ô]).Value = CBool(Check9.Value)
.Fields([Ô]estoque[Ô]).Value = CBool(Check10.Value)
.Fields([Ô]caixa[Ô]).Value = CBool(Check11.Value)
.Update
.Close
End With
MsgBox [Ô]Dados salvos com sucesso!!![Ô]

Set RS = Nothing
Set con = Nothing

Unload Me
End Sub



no form login:

Citação:

Private Sub cmdok_Click()
Set RS = New ADODB.Recordset
Set con = New ADODB.Connection
con.Open (cnSQL)
Dim flag As Boolean

RS.Open [Ô]Select apelido, senha from login[Ô], con, adOpenKeyset, adLockOptimistic

While RS.EOF <> True
If Me.txtapelido = RS!apelido And Me.txtsenha = RS!senha Then
flag = True
End If
RS.MoveNext
Wend
If flag = True Then
Me.Hide

frmprincipal.Show


Else
MsgBox [Ô]Usuário ou senha inválidos[Ô], vbInformation, [Ô]Erro[Ô]
End If
End Sub



Me desculpem se a resposta estiver muito obvia.... Mas naum to entedendo como posso verificar as telas permitidas ou não para o usuario....

Ops: nos bancos representados pelo CheckBox uso a opção sim/não
ANABON0106 02/06/2011 00:27:42
#375639
Olá amigos ... Bom Dia....

Obrigada pelas dicas!!!!! Porém ainda naum consegui....

Usei o exemplo do amigo ALEVALE, no meu form login e então acresentei a linha:

Citação:

If RS!cliente.Value Then
Else
frmcadastro_clientes.Enabled = False



frmprincipal.Show
End If



e da o seguinte erro:

Citação:

Run-Time [ô]3265[ô]:
O Item não pode ser encontrado na coleção correspondente ao nome ou a ordinal solicitado.



e a linha q aponta o erro é exatamente essa:
Citação:

If RS!cliente.Value Then



Já tentei:
Citação:

If RS.Fields!cliente.Value Then


Citação:

If RS.Fields!cliente = [Ô]sim[Ô] Then



E nada sempre da o mesmo erro....
Porque oque estou fazendo de errado? Desculpa se a resposta estiver muito obvia ... é q é a 1° x que faço isso...

forte abraço...
ANABON0106 02/06/2011 17:37:23
#375709
Oi... ninguém tem nehuma ideia para me ajudar??????

Por Favor!!!!!!!
MARCELO.TREZE 02/06/2011 17:54:53
#375716
Resposta escolhida
ANABON0106 vou tentar esplicar de forma bem simples.

vc cria uma tabela em um banco de dados que irá administrar issO.

exemplo:

suponha que vc possua um projeto com 03 forms ( form1, form2, form3 )
você poderá criar uma tabela com a seguinte estrutura

codigousuario,nome, form1,form2,form3

e salvaria os dados assim

CodUser Nome form1 form2 form 2
01 Jose s n s
02 Pedro n n s
03 Ana s s s


então vamos supor agora que vc possua um botão para chamar os forms, neste botão bastaria verificar a condição assim

Private Sub BtnAbreForm1_Click()
[ô] uma query
set rs = cnn.execute([Ô]select * from tabela where coduser = ao_codigo_do_usuario_logado[Ô])
if rs!Form1 = [Ô]s[Ô] then
abre o form1
else
informa que o usuario não pode abrir este form
End if
End Sub



acima expliquei a forma mais simples possivel de como se proceder

o codigo de usuario vc pode pegar ao fazer o login no sistema, crie uma variavel global em um modulo

exemplo

Global Codigo As integer

ANABON0106 02/06/2011 23:15:30
#375747
Olá boa noite...

Muito obrigada MARCELO-TREZE, em fim .... demorou mais entendi como funciona .....

o meu codigo ficou assim:

Lá no modulo eu declarei

Global codigo_usuario As Integer

No botão que chama o form cadastro_clientes eu coloquei

Citação:

Set RS = New ADODB.Recordset
Set con = New ADODB.Connection
con.Open (cnSQL)

Set RS = con.Execute([Ô]select * from login where codigo_usuario = ao_codigo_do_usuario_logado[Ô])
If RS!cadastrocliente = [Ô]s[Ô] Then
frmcadastro_clientes.Show
Else
MsgBox [Ô]Você não está autorizado, para está tela![Ô]
End If



só que agora o erro que ta dando é [Ô] run-time error[ô]-2147217904(80040e10)[ô]: nenhum valor foi fornecido para um ou mais parâmetros.[Ô]

já conferi o banco .... mas infelismente naum vi o erro!!!!

ops: a linha que da o erro é:
Citação:

Set RS = con.Execute([Ô]select * from login where codigo_usuario = ao_codigo_do_usuario_logado[Ô])

ANABON0106 03/06/2011 01:25:57
#375752
Já tentei tbm colocar uma textbox no form login e chama ele no load do form principal...
e ficou assim:

Citação:

Private Sub Form_Load()
Set RS = New ADODB.Recordset
Set con = New ADODB.Connection
con.Open (cnSQL)

Set RS = con.Execute([Ô]select * from login where codigo_usuario = frmLogin.txtcodigo.text[Ô])
If RS!cadastrocliente = [Ô]s[Ô] Then
frmmenu_cadastro.cmdcadastro_cliente.enabled = false

Else

End If



Mas infelismente continua dando o mesmo erro, oque não entendo, é que no form login ele me da uma resposta do codigo que ta no banco, mas qndo mando verificar para bloquiar a tela ele da que nenhum valor foi fornecido!!!!

aff... pq?
MARCELO.TREZE 03/06/2011 10:46:27
#375769
vc não pode apontar o textbox dentro da query, isto deve ser feito assim

Set RS = con.Execute([Ô]select * from login where codigo_usuario =[Ô] & frmLogin.txtcodigo.text)

teste com a alteração acima
Página 1 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas