Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thaís Mesquita

Form de autenticação

Recommended Posts

O q há de errado com meu código? É um form de login. Primeiro, não acontecia nada quando colocava p rodar, agora, da erro na linha do caminho, mas o caminho ta certinho (ja verifiquei).

Alguém sabe o q pode estar errado?

 

Private Sub Cmdok_Click()If txtusuario = "" Then   MsgBox "Verifique o usuário!", vbCritical, vbOKOnly, "Erro ao conectar o banco"	txtusuario.SetFocusIf txtsenha = "" Then	MsgBox "Verifique a senha!", vbCritical, vbOKOnly, "Erro ao conectar o banco"		  txtsenha.SetFocusExit SubElse  'Criando as variáveis de conexão  Dim cnn As ADODB.Connection  Dim rs As ADODB.Recordset    Set cnn = New ADODB.Connection  Set rs = New ADODB.Recordset  rs.CursorLocation = adUseClient   	cnn.Open Provider = "Microsoft.Jet.OLEDB.4.0;Data Source = caminho\acesso.mdb"	rs.Open "Select * From LOGIN Where login='" & txtusuario.Text & "' and senha='" & txtsenha.Text & "'", cnn, adOpenStatic     If rs.RecordCount > 0 Then	'Caso os dados forem aceitos então fechamos a conexão com o banco	  		rs.Close		Set rs = Nothing		cnn.Close		Set cnn = Nothing				 Unload Me			  Principal.Show				  End If

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi!

cnn.Open Provider = "Microsoft.Jet.OLEDB.4.0;Data Source = caminho\acesso.mdb"

esse caminho é uma varíavel, então deve ficar assim:

cnn.Open Provider = "Microsoft.Jet.OLEDB.4.0;Data Source = " & caminho & "\acesso.mdb"

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

você nao entendeu. Esse "caminho" nao existe. Foi só para especificar q eu ali coloquei o camonho do banco, entendeu? Não é variável.

... ok

então posta ae a mensagem de erro quando esta linha é executada.

p/ galera saber o que está acontecendo exatamente.

;)

 

edit: põe este comando Provider na string de conexão, ex::

cnn.Open Provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = caminho\acesso.mdb"

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora o problema é outro: Mudei todo meu código e não estou mais usando componente. Quando chega na linha onde eu verifico se existem registro até o final da tabela dá um erro de Tipo misturado. Eu declarei o recordset num modulo. Eu tenho q declarar em outro lugar?

 

Private Sub Cmdok_Click()If txtusuario.Text = "" Then   MsgBox "Verifique o usuário!", vbCritical = vbOKOnly, "Erro ao conectar o banco"   txtusuario.SetFocusExit SubElseIf txtsenha.Text = "" Then	MsgBox "Verifique a senha!", vbCritical = vbOKOnly, "Erro ao conectar o banco"	 txtsenha.SetFocusExit SubEnd If   sql = "select * from LOGIN where login='" & txtusuario.Text & "' and senha='" & txtsenha.Text & "'"   Set Login = conexao.Execute(sql)   If rs.EOF Then	 m = MsgBox("Usuário não encontrado, digite novamente", vbCritical, "Autenticação")	 txtusuario.Text = Empty	 txtsenha.Text = Empty	 txtusuario.SetFocus   Else	m = MsgBox("Usuário encontrado com sucesso", vbInformation, "Autenticação")	m = MsgBox("Carregando o sistema", vbInformation, "Autenticação")Unload MePrincipal.Show

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmmmm...

posta ae a mensagem de erro original que fica melhor de identificar o problema sacas?

tipo: Type Mismatch (deve ser esse o erro).

agora o erro é em qual linha?

nesse:

A ) Set Login = conexao.Execute(sql)

ou nesse?

B ) If rs.EOF Then

se for no A verifique se na declaração o tipo da variável está como recordset

se for no B verifique se está utilizando a variável correta, pois pelo visto o Login recebe o resultado do select mas você está utilizando o rs p/ verificar se tem registro.

se for em outra linha posta ae qual delas ok?

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ploblema era o (A) e com a sua ajuda deu certo.

Muito obrigada!!!

 

Agora eu não sei se você percebeu q a minha busca dos usuarios e senha esta sendo feito de uma maneira um pouco precária... sei lá...

Por exemplo:Qdo o usuario ta certo e a senha esta errada, ele tem q fazer uma busca pelo usuario digitado para ver se a senha confere, certo? Pois é! Não é assim q esta sendo feito. Na verdade não sei como fazer isso.

Posso tomar mais um pouquinho do seu tempo? http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi!

fiz uma modificação com o código q você postou p/ você ter uma idéia de como seria, beleza?

Private Sub Cmdok_Click()'neste exemplo estamos utilizando a conexão ADODim LoginOK As BooleanDim rsUsu As Adodb.RecordsetLoginOK = FalseIf txtusuario.Text = "" Then   MsgBox "Verifique o usuário!", vbCritical = vbOKOnly, "Erro ao conectar o banco"   txtusuario.SetFocus   Exit SubEnd If'abrir uma consulta com o usuário informadosql = "SELECT * FROM LOGIN WHERE login='" & txtusuario.Text & "'"Set rsUsu = conecao.execute(sql)'verificar se encontrou o usuárioIf rsUsu.EOF = False Then  MsgBox "Usuário não encontrado!", vbExclamation, "Erro ao conectar"  txtusuario.SetFocusElse  'se encontrou, verificar a senha  If rs.Fields("senha") = txtsenha.Text Then	LoginOK = True 'definir que o usuário foi encontrado e a senha está OK  Else	MsgBox "Senha incorreta!", vbExclamation, "Erro ao conectar"	txtsenha.Text = Empty	txtsenha.SetFocus  End IfEnd IfrsUsu.CloseSet rsUsu = NothingIf LoginOK = True Then  'exibir a mensagem de OK  'VBCrlf = quebra de linha  MsgBox "Usuário encontrado com sucesso!" & vbCrLf & "Clique em OK para continuar.", vbInformation, "Autenticação OK!"  Unload Me  Principal.ShowEnd If'restante do seu código aquiEnd Sub
o código tá comentando, mas resumindo:

O sistema verifica se informou usuário, se sim, faz uma consulta no banco para pegar as informações do mesmo. Depois verifica se a senha digitada coincide com a senha que está no banco, se estiver igual, então o processo está OK, se não, definir o processo como false.

Se estiver OK e abre a proxima tela, exibe a mensagem de positivação, se não, continua na a tela de Login.

Não fiz testes com o código, se tiver algum problema posta ae beleza?

ps: se for substituir o código anterior por esse, crie um backup deste código anterior.

flws

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

testei o código q você me mandou e agradeço a atenção, mas ainda não está acontecendo o que eu quero. Por exemplo: Eu tenho um usuario cadastro com o nome "usuario". Se eu coloco o usuario certo e a senha errada ele teria q executar esta linha:

 

Else	  MsgBox "Senha Incorreta!", vbExclamation, "Erro ao conectar o banco"	  txtsenha.Text = Empty	  txtsenha.SetFocus   End If

Mas ele só faz essa:

 

sql = "select * from LOGIN where login='" & txtusuario.Text & "' "   Set rsUsu = conexao.Execute(sql)   If rsUsu.EOF = False Then	 m = MsgBox("Usuário não encontrado, digite novamente", vbCritical, "Autenticação")	 txtusuario.Text = Empty	 txtsenha.Text = Empty	 txtusuario.SetFocus

Na verdade ele não acha usuario nenhum. Nem se eu colocar usuario e senha certos. Ele só executa esse comando acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aff... nem acredito q fiz isso... -_-

mas vamos lá, corrige esta linha:

If rsUsu.EOF = False Then

por esta:

If rsUsu.EOF = True Then

do jeito q tava, se informasse um usuário cadastrado ele passava pela condição de usuário não encontrado...! :o

 

malz ae... ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show!!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

MUITO OBRIGADA!!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Agora, como eu faço p iniciar com uma telinha de splash usando o progress bar e o timer? Só uma bobeirinha rapidinha...

 

Ai... Eu tô te perturbando tanto né? http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

:)

q pertubando o q... :P

bom... um splash eu nunca parei p/ fazer com progress bar... :P

mas se estiver precisando saber como fazer com o timer...

crie um formulário que será o splash, e defina-o como o formulário inicial do projeto.

você pode personalizar o form como precisar.

inclua um objeto Timer e na propriedade "Interval" especifique qtos segundos a tela ficará visivel, lembrando que 1000=1segundo.

Definido o intervalo, clique duas vezes sobre este Timer para ir pro código do evento Timer1_Timer(), ex:

Private Sub Timer1_Timer()  'quando o contador do Timer chegar ao intervalo definido este evento será executado  Form2.Show  Unload MeEnd Sub
basicamente um splah bem simpes resolve-se só com este código. ^_^

agora adicionar a barra de progresso... 1) você precisa executar algum select quando o formulário principal for carregado? ou 2) é p/ deixar o splash mais incrementado?

se for o 2 é moleza:

considerando que o Timer1 já foi incluído e q você já definiu o tempo limite p/ exibir o splash, inclua um progressbar e um outro Timer (que ficará com o nome Timer2).

defina o interval deste Timer2 como 1000.

ao carregar o formulário Splash configure o progress:

'definir o valor máximo da barra de progresso  ProgressBar1.Max = Timer1.Interval  'zerar valor inicial do progresso  ProgressBar1.Value = 0
então resumindo, o código do formulário Splash será isto:

Private Sub Form_Load()  On Error Resume Next  'definir o valor máximo da barra de progresso  ProgressBar1.Max = Timer1.Interval  'zerar valor inicial do progresso  ProgressBar1.Value = 0End SubPrivate Sub Timer1_Timer()  Form2.Show  Unload MeEnd SubPrivate Sub Timer2_Timer()  'a cada segundo este evento será executado,  'incrementando o valor da barra + o valor do intervalo do Timer atual  ProgressBar1.Value = ProgressBar1.Value + Timer2.IntervalEnd Sub
neste exemplo o Timer1 está com interval=5000 e o Timer2=1000.

beleza?

qquer dúvida diz ae okz?

see ya

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba! Muito obrigada pela sua paciência e atenção... :)

 

Não sei o q pode estar acontecendo... Não sei se fiz algo de errado, mas no form em q eu uso o progressBar, dá erro na seguinte linha:

 

ProgressBar1.Value = ProgressBar1.Value + Timer2.Interval

Erro: "Invalid Property value"

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que pode estar acontecendo é:

- não foi definido o valor máximo p/ progressbar (ProgressBar1.max=Timer1.Interval);

- o novo valor (Value) da barra excedeu o limite (Max).

você preparou a barra de progresso no form load do splash?

Private Sub Form_Load()

On Error Resume Next

'definir o valor máximo da barra de progresso

ProgressBar1.Max = Timer1.Interval

'zerar valor inicial do progresso

ProgressBar1.Value = 0

End Sub

e também ajustar a propriedade Interval do Timer1 (que é responsável pelo tempo de permanência do splash na tela), neste caso configurei p/ 5000 (5 segundos), e depois você deve definir o evento Timer():

Private Sub Timer1_Timer()

'Neste evento o sistema vai abrir o outro formulário e fechar o splash

Timer2.Enabled = False 'Vamos desativar o Timer2

Form2.Show

Unload Me

End Sub

depois de configurar o Timer1 e o ProgressBar, aí sim você configura a propriedade Interval do Timer2 p/ 1000 (1 segundo) e depois o evento dele:

Private Sub Timer2_Timer()

'a cada segundo este evento será executado,

'incrementando o valor da barra + o valor do intervalo do Timer atual

ProgressBar1.Value = ProgressBar1.Value + Timer2.Interval

End Sub

Resumindo: o que aconteceu foi que o novo valor da barra excedeu o limite, então tem q configurar tudo antes de iniciar o processo.

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, ja deu p passar p o outro form no tempo certinho, mas pq o progressBar nao esta "andando"? Sabe? Como se tivesse carregando? Alguma propriedade sem mexer?

 

Não nao nao!!! Ja achei o que eu tinha feito errado!! Foi falta de atenção mesmo!

 

Muito obrigada!

 

Mas não pense q eu vou esquecer de você assim tão fácil não! Logo logo eu tô postando mais dúvidas p você... rsrsrs... http://forum.imasters.com.br/public/style_emoticons/default/blush.gif E se puder me ajudar, serei muito grata.

 

Muito obrigada de novo!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!

Não disse q voltaria a t procurar?

Minha dúvida agora é a seguinte: Qdo eu entro com um determinado usuario e senha, é chamado um form de cadastro de usuario.

O 1º problema é: O splash e o form Principal estão vindo por cima do de cadastro.

O 2º: Como eu faço a relação do nome q está sendo digitado no campo usuario e os usuarios ja existentes na tabela? (para q não seja possivel cadastrar um usuario q ja existe)

Compartilhar este post


Link para o post
Compartilhar em outros sites

1º : você tem que alterar as propriedades do projeto definindo quem é o form que deverá aparecer primeiro 2º : você faz um SELECT dando um COUNT na coluna ....se o resultado for maior que 0 é pq ja existe um usuário com o mesmo nome ex : "SELECT COUNT(*) as qtd FROM tabela WHERE usuario = '" & str_usuario & "'"if rs!qtd > 0 then msgbox "Esse usuário ja existe.Digite outro"end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

:) bom, o camarada kauebranco já deu as dicas, mas o 1º não entendi mto... quando abre a janela p/ cadastrar usuário o splah e o principal ficam sobre ele, ou seja, ficam 3 telas abertas?? :mellow: se for, posta ae o trecho do código utilizado para abrir a tela principal e a tela de cadastro dos usuários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece o seguinte: Eu tenho um primeiro splash q chama o form de login, se for digitado um determinado login e senha (especificado no código), é chamado um form de cadastro de usuário. O problema é q, qdo esse form é chamado, outro splash(q eu coloquei p surgir após o login) e o form principal aparecem por cima do de cadastro.

 

sql = "select * from LOGIN where login='" & txtusuario.Text & "' "   Set rsUsu = conexao.Execute(sql)	If txtusuario.Text = "admin" And txtsenha = "123456" Then	  NewUsuario.Show	End If

Outra: Como eu faço para a segunda página do relatorio q estou gerando sair com a mesma formatação da primeira? E pq só sai 1/2 na primeira e na segunda não aparece 2/2?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.