SETAR RECORSET

ASHKATCHUP 14/01/2010 21:46:48
#331943
Quais são as colunas da tabela de Aplicacoes? Como ela funciona?

O que eu e o Alex falamos é que você utiliza está comparando com um código de usuário não setado. Você tem que preencher algo na variável [Ô]codigo[Ô].
NEREU1301 14/01/2010 21:57:06
#331946
a tabela Aplicacoes tem a coluna Cod_aplicacao que é de autonumeração, a coluna Aplicacao que são os form que o projeto tem (Tipo cadastro, produtos...) e a coluna descrção que é a descrição desses forms.

e a tabela Acesso tem a coluna Cod_Usuario que que é o numero autonumeração que o usuario recebe quando é cadastrado, tem tambem a coluna Cod_Aplicação que é o código autonumeração que surge na tabela Aplicacoes e tambem a coluna Acesso que[ô]recebe o numero um quando o usuário é autorizado a acessar.

explicação complicada. Espero que entenda.

Nereu
NEREU1301 14/01/2010 22:16:33
#331948
[txt-color=#e80000]aqui eu cadastro ousuario[/txt-color]

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeys [Ô]{Tab}[Ô]
End If
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
Private Sub Form_Load()
Call montarLista
Call limpar
Call desabilita
End Sub
Private Sub ListView1_Cabecalho()
With ListView1
.ListItems.Clear
With .ColumnHeaders
.Clear
.Add , , [Ô]Usuario[Ô], 1100
.Add , , [Ô]Nome[Ô], 2000
.Add , , [Ô]Dpto[Ô], 1500
.Add , , [Ô]Cargo[Ô], 1500
.Add , , [Ô]Senha[Ô], 1100
End With
.View = lvwReport
.LabelEdit = lvwManual
End With
End Sub
Private Sub ListView1_ItemClick(ByVal item As ComctlLib.ListItem) [ô] rotina que preenche os campos do Form após o usuário clicar em um item no ListView
Call limpar
Call habilita
If item = [Ô]<Novo>[Ô] Then
CmdAtualizar.Caption = [Ô]&Incluir[Ô]
cmdExcluir.Enabled = False
Else
CmdAtualizar.Caption = [Ô]&Atualizar[Ô]
codUsuario = item.Tag
txtUsuario.Text = item.Text
txtNome.Text = item.SubItems(1)
txtDpto.Text = item.SubItems(2)
txtCargo.Text = item.SubItems(3)
txtSenha.Text = item.SubItems(4)
End If
txtUsuario.SetFocus
End Sub
Private Sub cmdAtualizar_Click() [ô] rotina para atualizar e/ou incluir os dados selecionados pelo usuário
On Error GoTo errInclusao
If CmdAtualizar.Caption = [Ô]&Incluir[Ô] Then
cnn.Execute ([Ô]insert into Usuarios(Usuario,Nome,Dpto,Cargo,Senha) values([ô][Ô] & _
txtUsuario.Text & [Ô][ô],[ô][Ô] & txtNome.Text & [Ô][ô], [ô][Ô] & txtDpto.Text & [Ô][ô],[ô][Ô] & _
txtCargo.Text & [Ô][ô],[ô][Ô] & txtSenha.Text & [Ô][ô])[Ô])
MsgBox [Ô]inclusão concluída com sucesso.[Ô], vbExclamation
Else
cnn.Execute [Ô]update Usuarios set Usuario= [ô][Ô] & txtUsuario.Text & [Ô][ô], Nome= [ô][Ô] & _
txtNome.Text & [Ô][ô], Dpto= [ô][Ô] & txtDpto.Text & [Ô][ô], Cargo= [ô][Ô] & txtCargo.Text & [Ô][ô], Senha= [ô][Ô] & _
txtSenha.Text & [Ô][ô] where cod_usuario = [Ô] & codUsuario & [Ô][Ô]
MsgBox [Ô]Atualização concluida com sucesso.[Ô], vbExclamation
End If
Call montarLista
Call limpar
Call desabilita
errInclusao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Ocorreu um Erro! Usuário ou Senha já existe.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
[ô] rotina para excluir os dados selecionados pelo usuário
Private Sub cmdExcluir_Click()
cnn.Execute [Ô]delete * from Usuarios where cod_usuario=[Ô] & codUsuario
MsgBox [Ô]Exclusão concluíida com sucesso.[Ô], vbExclamation
Call montarLista
Call limpar
Call desabilita
End Sub
[ô] rotina que preenche o ListView com os usuários já cadastrados no banco
Private Sub montarLista()
Dim lstUsuaria As ListItem
Dim i As Integer
With rsUsuarios
.Open [Ô]select * from Usuarios order by nome[Ô], cnn, adOpenKeyset, adLockOptimistic
[ô]limpar lista
ListView1.ListItems.Clear
ListView1_Cabecalho
[ô]carregar a lista
Set lstUsuaria = ListView1.ListItems.Add(, , [Ô]<Novo>[Ô])
If .EOF Then
MsgBox [Ô]Não existem usuários cadastrados no sistema.[Ô], vbExclamation
Else
Do Until rsUsuarios.EOF
Set lstUsuaria = ListView1.ListItems.Add(, , rsUsuarios([Ô]Usuario[Ô]))
lstUsuaria.Tag = rsUsuarios([Ô]Cod_Usuario[Ô])
lstUsuaria.SubItems(1) = rsUsuarios([Ô]Nome[Ô])
lstUsuaria.SubItems(2) = rsUsuarios([Ô]Dpto[Ô])
lstUsuaria.SubItems(3) = rsUsuarios([Ô]Cargo[Ô])
lstUsuaria.SubItems(4) = rsUsuarios([Ô]Senha[Ô])
rsUsuarios.MoveNext
Loop
End If
.Close
End With
Call limpar
End Sub
Private Sub cmdSair_Click()
Set rsusuario = Nothing
Unload Me
End Sub
Private Sub limpar()
cod_Usuario = 0
txtUsuario.Text = [Ô][Ô]
txtNome.Text = [Ô][Ô]
txtDpto.Text = [Ô][Ô]
txtCargo.Text = [Ô][Ô]
txtSenha.Text = [Ô][Ô]
End Sub
Private Sub desabilita()
txtUsuario.Locked = True
txtNome.Locked = True
txtDpto.Locked = True
txtCargo.Locked = True
txtSenha.Locked = True
cmdExcluir.Enabled = False
CmdAtualizar.Enabled = False
End Sub
Private Sub habilita()
txtUsuario.Locked = False
txtNome.Locked = False
txtDpto.Locked = False
txtCargo.Locked = False
txtSenha.Locked = False
cmdExcluir.Enabled = True
CmdAtualizar.Enabled = True
End Sub


[txt-color=#e80000]aqui eu cadastro as Aplicações[/txt-color]

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeys [Ô]{Tab}[Ô]
End If
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
Private Sub Form_Load()
Call montarLista
Call limpar
Call desabilita
End Sub
Private Sub ListView1_ItemClick(ByVal item As ComctlLib.ListItem) [ô] rotina que preenche os campos do Form após o usuário
[ô] clicar em um item no ListView
Call habilita
Call limpar
If item = [Ô]<Novo>[Ô] Then
CmdAtualizar.Caption = [Ô]&Incluir[Ô]
CmdExcluir.Enabled = False
Else
CmdAtualizar.Caption = [Ô]&Atualizar[Ô]
codAplicacao = item.Tag
TxtAplicacao.Text = item.Text
TxtDescricao.Text = item.SubItems(1)
End If
TxtAplicacao.SetFocus
End Sub
Private Sub cmdAtualizar_Click()
If CmdAtualizar.Caption = [Ô]&Incluir[Ô] Then
cnn.Execute ([Ô]insert into Aplicacoes(aplicacao,descricao)[Ô] _
& [Ô]values([ô][Ô] & TxtAplicacao.Text & [Ô][ô],[ô][Ô] & TxtDescricao.Text & [Ô][ô])[Ô])

MsgBox [Ô]Inclusão concluída com sucesso.[Ô], vbExclamation
Else
cnn.Execute [Ô]update Aplicacoes set aplicacao= [ô][Ô] & TxtAplicacao.Text & [Ô][ô], [Ô] _
& [Ô]descricao= [ô][Ô] & TxtDescricao.Text & [Ô][ô] where cod_aplicacao = [Ô] & codAplicacao & [Ô][Ô]

MsgBox [Ô]Atualização concluída com sucesso.[Ô], vbExclamation
End If

Call limpar
Call desabilita
Call montarLista
End Sub
Private Sub cmdExcluir_Click()
cnn.Execute [Ô]delete * from Aplicacoes where Cod_Aplicacao=[Ô] & codAplicacao & [Ô][Ô]

MsgBox [Ô]Exclusão concluída com sucesso.[Ô], vbExclamation

Call limpar
Call desabilita
Call montarLista
End Sub
Private Sub ListView1_Cabecalho()
With ListView1
.ListItems.Clear
With .ColumnHeaders
.Clear
.Add , , [Ô]Aplicacao[Ô], 2500
.Add , , [Ô]Descricao[Ô], 3000
End With
.View = lvwReport
.LabelEdit = lvwManual
End With
End Sub
Private Sub montarLista()
Dim lstAplicacao As ListItem

Set rsAplicacoes = CreateObject([Ô]ADODB.Recordset[Ô])
With rsAplicacoes
.Open [Ô]select * from Aplicacoes order by descricao[Ô], cnn, adOpenKeyset, adLockOptimistic

[ô]limpar lista
ListView1.ListItems.Clear
Call ListView1_Cabecalho
[ô]carregar a lista
Set lstAplicacao = ListView1.ListItems.Add(, , [Ô]<Novo>[Ô])
If .EOF Then
MsgBox [Ô]Não existem aplicacões cadastrados no sistema.[Ô], vbExclamation
Else
Do Until rsAplicacoes.EOF
Set lstAplicacao = ListView1.ListItems.Add(, , rsAplicacoes([Ô]aplicacao[Ô]))
lstAplicacao.Tag = rsAplicacoes([Ô]cod_aplicacao[Ô])
lstAplicacao.SubItems(1) = rsAplicacoes([Ô]descricao[Ô])

rsAplicacoes.MoveNext
Loop
End If
.Close
End With
End Sub
Private Sub cmdSair_Click()
Unload Me
End Sub
Private Sub desabilita()
TxtAplicacao.Locked = True
TxtDescricao.Locked = True
CmdExcluir.Enabled = False
CmdAtualizar.Enabled = False
End Sub
Private Sub habilita()
TxtAplicacao.Locked = False
TxtDescricao.Locked = False
CmdExcluir.Enabled = True
CmdAtualizar.Enabled = True
End Sub
Private Sub limpar()
codUsuario = 0
TxtAplicacao.Text = [Ô][Ô]
TxtDescricao.Text = [Ô][Ô]
End Sub

[txt-color=#e80000]e aqui cadastro o acesso[/txt-color]

Private Sub Form_Load()
Call montarCombo
Call desabilita
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeys [Ô]{Tab}[Ô]
End If
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
Private Sub montarCombo() [ô] rotina que preenche o Combobox com os usuários já cadastrados no banco
Set rsAcesso = CreateObject([Ô]ADODB.Recordset[Ô])
With rsAcesso
.Open [Ô]select cod_usuario, usuario from usuarios order by usuario[Ô], cnn, adOpenKeyset, adLockOptimistic

Do Until rsAcesso.EOF
CboUsuario.AddItem rsAcesso([Ô]usuario[Ô])
CboUsuario.ItemData(CboUsuario.NewIndex) = CLng(rsAcesso([Ô]cod_usuario[Ô]))
rsAcesso.MoveNext
Loop
.Close
End With
End Sub
Private Sub montarLista(ByVal intUsuario As Integer) [ô] rotina que preenche o ListBox Lista com as aplicações já cadastradas no banco

Set rsAcesso = CreateObject([Ô]ADODB.Recordset[Ô])
With rsAcesso
.Open [Ô]select * from aplicacoes order by aplicacao[Ô], cnn, adOpenKeyset, adLockOptimistic
[ô]limpar lista
lstLista.Clear
[ô]carregar a lista
Do Until rsAcesso.EOF
lstLista.AddItem CStr(rsAcesso([Ô]aplicacao[Ô]))
lstLista.ItemData(lstLista.NewIndex) = CInt(rsAcesso([Ô]cod_aplicacao[Ô]))
rsAcesso.MoveNext
Loop
.Close
End With
End Sub
Private Sub montarSelecao(ByVal intUsuario As Integer) [ô] rotina que preenche o ListBox Seleção com as aplicações do usuário
Set rsAcesso = CreateObject([Ô]ADODB.Recordset[Ô]) [ô] selecionado
With rsAcesso
.Open [Ô]select a.cod_aplicacao, b.aplicacao from acesso a, aplicacoes b where a.cod_usuario=[Ô] & intUsuario & [Ô][Ô]
NEREU1301 14/01/2010 22:19:25
#331949
[txt-color=#e80000]Complementando a sub[/txt-color]

& [Ô]and a.cod_aplicacao = b.cod_aplicacao order by b.aplicacao[Ô], cnn, adOpenKeyset, adLockOptimistic
[ô]limpar selecao
LstSelecao.Clear

[ô]carregar a selecao
Do Until rsAcesso.EOF
LstSelecao.AddItem rsAcesso([Ô]aplicacao[Ô])
LstSelecao.ItemData(LstSelecao.NewIndex) = CInt(rsAcesso([Ô]cod_aplicacao[Ô]))

rsAcesso.MoveNext
Loop
.Close
End With
End Sub
Private Sub cboUsuario_Click() [ô] rotina que preenche os ListBox Seleção e ListBox Lista após o usuário
Call limpar
montarLista (CInt(CboUsuario.ItemData(CboUsuario.ListIndex))) [ô] clicar no Combox Usuário
montarSelecao (CInt(CboUsuario.ItemData(CboUsuario.ListIndex)))
Call habilita
End Sub
Private Sub cmdADD_Click()
For n = 0 To (lstLista.ListCount - 1)
If lstLista.Selected(n) = True Then
Set rsAcesso = CreateObject([Ô]ADODB.Recordset[Ô])
With rsAcesso
.Open [Ô]select cod_usuario from Acesso where cod_usuario=[Ô] & CboUsuario.ItemData(CboUsuario.ListIndex) & [Ô] and cod_aplicacao=[Ô] & lstLista.ItemData(n), cnn, adOpenKeyset, adLockOptimistic
If rsAcesso.RecordCount <= 0 Then
cnn.Execute ([Ô]insert into acesso(cod_usuario,cod_aplicacao,acesso)[Ô] _
& [Ô]values([ô][Ô] & CboUsuario.ItemData(CboUsuario.ListIndex) & [Ô][ô],[ô][Ô] & lstLista.ItemData(n) & [Ô][ô], 1)[Ô])
Else
MsgBox [Ô]A aplicação - [Ô] & lstLista.List(n) & [Ô] - já esta cadastrada para o usuário selecionado![Ô], vbExclamation
End If
End With
End If
Next n
montarLista (CInt(CboUsuario.ItemData(CboUsuario.ListIndex)))
montarSelecao (CInt(CboUsuario.ItemData(CboUsuario.ListIndex)))
End Sub
Private Sub cmdDEL_Click()
For n = 0 To (LstSelecao.ListCount - 1)
If LstSelecao.Selected(n) = True Then
cnn.Execute [Ô]delete * from acesso where cod_usuario=[Ô] & CboUsuario.ItemData(CboUsuario.ListIndex) & [Ô] and cod_aplicacao=[Ô] & LstSelecao.ItemData(n)
End If
Next n
montarLista (CInt(CboUsuario.ItemData(CboUsuario.ListIndex)))
montarSelecao (CInt(CboUsuario.ItemData(CboUsuario.ListIndex)))
End Sub
Private Sub limpar()
lstLista.Clear
LstSelecao.Clear
End Sub
Private Sub habilita()
CmdAdd.Enabled = True
CmdDel.Enabled = True
End Sub
Private Sub desabilita()
CmdAdd.Enabled = False
CmdDel.Enabled = False
End Sub
Private Sub cmdSair_Click()
Unload Me
End Sub



DEBORACOLE 28/01/2010 09:16:55
#332989
Bom dia Pessoal!
Bom dia Nereu!!!
Pessoal, quero deixar claro que não sei programar em VB, meu campo é o Java, mas estou indo pela lógica, por favor me corrijam se eu estiver errada!
Olha só, tava pensando aqui depois de ver os teus posts: Um usuário pode ter vários [ô]módulos[ô] cadastrados e um [ô]módulo[ô] pode ter vários usuários cadastrados nele não é mesmo? Então seria um relacionamento many-to-many (muitos-pra-muitos), sendo assim é necessário uma tabela associativa, exemplo: ModuloUsuario, vc tem essa tabela associativa??
Se tiver a consulta seria +/- assim: (vou fazer em sql pq não sei como são feitas as consultas em VB)

---Aqui vc pode fazer tudo em uma unica consulta:
select DISTINCT a.aplicacao, b.acesso FROM aplicacoes a, Acesso b
WHERE a.cod_aplicacao = b.cod_aplicacao AND
AND b.cod_usuario IN
(SELECT codigoAplicacao
FROM ModuloUsuario
WHERE codigo= 1);

Ou vc pode fazer assim: 1º vc precisa faz um SELECT pra verificar se o usuário realmente está cadastrado, isso pode ser feito em um SELECT. Depois da consulta pelo usuário ter retornado um registro vc ve quais são os módulos associados aquele usuário então vc faz essa consulta ai em cima (não sei se o nome dos campos está correta, é melhor conferir antes)
1º SELECT pra encontrar o usuário:
variavelRecebeConsulta = SELECT DISTINCT u.login, u.senha FROM usuario u
WHERE u.login = variavelLogin AND u.senha = variavelSenha;

2º SELECT pra encontrar os [ô]modulos[ô] que o usuário tem acesso:
select DISTINCT a.aplicacoes, mu.ModuloUsuarioFROM aplicacoes a, ModuloUsuario mu
WHERE a.codigoAplicacao = ta.codAplicacao
AND mu.codUsuario = variavelRecebeConsulta



bom Nereu, acho q isso vai resolver teu problema, qlqr coisa posta ai de novo!!

Espero ter ajudado!!
NEREU1301 30/01/2010 21:41:30
#333257
então debora, voce passou por aqui mesmo! Valorizou o forum.

Vou testar e retorno.

Nereu

NEREU1301 31/01/2010 16:27:58
#333274
boa tarde Debora

Seguinte
na primeira dica retorna que conexão está fechada ou invalida no contexto e fechada não tá.

na segunda já faço com dois select que é um no formLogin que é quando coloco o usuario e senha, que funciona bem, e outro select é esse que não funciona.

Infelizmente continuo com o problema, mas valeu pela dica.

nereu
NEREU1301 16/02/2010 09:59:01
#334473
Bom Dia

Finalmente consegui solucionar. Ao invés de fazer comparações entre duas tabelas como era a idéia do autor do Sistema de Acesso, usei só a tabela de Acesso e funcionou beleza.

Ficou assim:

Private Sub MDIForm_Load()
i = 1 [ô]efeito deslizante
MnuCalculadora.Enabled = False
MnuDesconectar.Enabled = False
MnuOficina1.Enabled = False
MnuOficina2.Enabled = False
MnuOrcamento.Enabled = False
MnuRecepçao.Enabled = False
MnuProtocolo.Enabled = False
MnuBackup.Enabled = False
MnuCadUsuarios.Enabled = False
Set rsAcesso = CreateObject([Ô]ADODB.Recordset[Ô])
With rsAcesso
.Open [Ô]select * from Acesso where cod_usuario=[Ô] & codigo, cnn, adOpenKeyset, adLockOptimistic
If .RecordCount = 0 Then
MsgBox [Ô]Usuário sem acesso ao sistema![Ô], vbExclamation, [Ô]Erro[Ô]
Else
Do While Not .EOF
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]1[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuRecepçao.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]2[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuOficina1.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]3[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuOficina2.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]4[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuOrcamento.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]5[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuCalculadora.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]6[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuProtocolo.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]7[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuCadUsuarios.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]8[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuBackup.Enabled = True
End If
If rsAcesso([Ô]Cod_Aplicacao[Ô]) = [Ô]9[Ô] And rsAcesso([Ô]Acessos[Ô]) = 1 Then
MnuDesconectar.Enabled = True
End If
.MoveNext
Loop
End If
.Close
End With
End Sub


Obrigado a todos pela paciência.

Abraços

Nereu
Página 2 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas