SETAR RECORSET

NEREU1301 12/01/2010 22:35:47
#331731
Boa noite

Não estou conseguindo entender e não encontrei em nenhum lugar como esclarescer essa duvida:

Quando me refiro a duas tabelas qual devo setar como no exemplo abaixo

Set rs = CreateObject([Ô]ADODB.Recordset[Ô])
With rs
.Open [Ô]select a.aplicacao, b.acesso from aplicacoes a, acesso b where a.cod_aplicacao = b.cod_aplicacao [Ô] _
& [Ô]and b.cod_usuario=[Ô] & codigo, cnn, adOpenKeyset, adLockOptimistic

tenho ai duas tabelas aplicacoes e acesso mas se eu seto uma só retorna erro e usando and tambem

Se alguem puder me dar uma dica ou onde encontrar uma solução, agradeço

Nereu
ALEXLUGON 12/01/2010 23:32:38
#331735
Resposta escolhida
Eu faço assim

Declaro uma variavel

Dim SQL as String

SQL = [Ô]SELECT [Ô]
SQL = SQL & [Ô]aplicacoes.aplicacao, [Ô]
SQL = SQL & [Ô]acesso.acesso [Ô]
SQL = SQL & [Ô]FROM [Ô]
SQL = SQL & [Ô]aplicacoes, acesso [Ô]
SQL = SQL & [Ô]WHERE aplicacoes.cod_aplicacao = acesso.cod_aplicacao [Ô]
SQL = SQL & [Ô]AND acesso.cod_usuario = [Ô] & codigo [ô]OBS Se o campo cod_usuario for do tipo String tem que coloca-lo entre Aspas Simples

Set rs = CreateObject([Ô]ADODB.Recordset[Ô])
rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic


Tenta ai e posta ai para saber-mos...
NEREU1301 13/01/2010 21:43:39
#331821
Boa noite AlexLugon
Retornou erro sinalizando no rs dizento que a variavel não está declarada.

Estou tentando fazer um sistema de acesso com definições de acesso para cada usuário e a sub toda é:

Private Sub MDIForm_Load()
Dim codigo As Long


MnuCalculadora.Enabled = False
MnuDesconectar.Enabled = True
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 a.aplicacao, b.acesso from aplicacoes a, Acesso b where a.cod_aplicacao = b.cod_aplicacao [Ô] _
& [Ô]and b.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 rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]Calculadora[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuCalculadora.Enabled = True
End If
If rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]Oficina1[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuOficina1.Enabled = True
End If
If rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]Oficina2[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuOficina2.Enabled = True
End If
If rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]Orcamento[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuOrcamento.Enabled = True
End If
If rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]Recepçao[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuRecepçao.Enabled = True
End If
If rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]Protocolo[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuProtocolo.Enabled = True
End If
If rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]Backup[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuBackup.Enabled = True
End If
If rsAplicacoes([Ô]Aplicacao[Ô]) = [Ô]CadUsuarios[Ô] And rsAcesso([Ô]Acesso[Ô]) = 1 Then
MnuCadUsuarios.Enabled = True
End If
.MoveNext
Loop
End If
.Close
End With
End Sub

e ele não tá entendendo ou não encontrando na tabela Acesso, quando o acesso é igual a [Ô]1[Ô] e retornando sempre [Ô]Usuário sem acesso ao sistema![Ô] quer dizer acesso igual a [Ô]0[Ô].

A tabela acesso está correta, já conferi.

Acho que meu erro está em não saber setar corretamente, mas se os amigos tiverem outra opinião, estou aceitando

Nereu
ASHKATCHUP 13/01/2010 21:51:26
#331823
Notei que você não seta a variável codigo.
Isso está certo?
ALEXLUGON 13/01/2010 22:36:05
#331826
VEJA SE AGORA FUNCIONA

Dim codigo As Long


MnuCalculadora.Enabled = False
MnuDesconectar.Enabled = True
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[Ô])
rsAcesso.Open [Ô]select a.aplicacao, b.acesso from aplicacoes a, Acesso b where a.cod_aplicacao = b.cod_aplicacao [Ô] _
& [Ô]and b.cod_usuario=[Ô] & codigo, cnn, adOpenKeyset, adLockOptimistic

If rsAcesso.RecordCount = 0 Then
MsgBox [Ô]Usuário sem acesso ao sistema![Ô], vbExclamation, [Ô]Erro[Ô]
Else
Do While Not rsAcesso.EOF
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]Calculadora[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuCalculadora.Enabled = True
End If
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]Oficina1[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuOficina1.Enabled = True
End If
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]Oficina2[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuOficina2.Enabled = True
End If
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]Orcamento[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuOrcamento.Enabled = True
End If
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]Recepçao[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuRecepçao.Enabled = True
End If
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]Protocolo[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuProtocolo.Enabled = True
End If
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]Backup[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuBackup.Enabled = True
End If
If rsAcesso([Ô]Aplicacao[Ô]) = [Ô]CadUsuarios[Ô] And rsAcesso([Ô]acesso[Ô]) = 1 Then
MnuCadUsuarios.Enabled = True
End If
rsAcesso.MoveNext
Loop
End If
rsAcesso.Close

vc estava fazendo um loop na recordset rsAplicacoes eu mudei para rsAcesso onde foi gerado a consulta da tabela aplicacaos e acessos.

Teste e poste ai.
NEREU1301 13/01/2010 22:42:40
#331827
mas a variavel codigo não seria o 0 ou 1 ?
NEREU1301 13/01/2010 22:48:07
#331828
Alex

já tinha tentado dessa forma e retorna igualmente [Ô]Usuário sem acesso ao sistema![Ô]

Por isso achei que devia setar rsAcesso and rsAplicacoes, mas tambem não tive exito.

Nereu

ASHKATCHUP 13/01/2010 22:56:11
#331830
Se você criou uma variável long e não utilizou ela, o valor será 0.
Você tem um usuário 0?
NEREU1301 13/01/2010 22:57:39
#331831
não
ALEXLUGON 14/01/2010 09:03:45
#331849
o nosso amigo esta certo brother preste atenção se vc monta uma SELECT onde um dos criterios é a variavel CODIGO ele e não tem nenhum registro com o VALOR 0 na tabela o resultado sempre vai dar erro

veja a linha abaixo

rsAcesso.Open [Ô]select a.aplicacao, b.acesso from aplicacoes a, Acesso b where a.cod_aplicacao = b.cod_aplicacao [Ô] _
& [Ô]and b.cod_usuario=[Ô] & [txt-color=#e80000]codigo[/txt-color], cnn, adOpenKeyset, adLockOptimistic

NEREU1301 14/01/2010 21:35:48
#331942
boa noite

então amigos, a idéia é fazer com que quando um certo usuário acessar o programa, seja feita uma conferencia se ele tem permissão de acesso ao que ele está tentando usar.
Como deveria ser este select? Porque a principio ela estaria certo porque passa pela tabela Aplicacoes, que são as permissoes e pela tabela Acesso onde o [Ô]1[Ô] indica que ele tem permissão.

Qual seria então a compração correta do b.cod_usuario?

Nereu

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