Login Either EOF and BOF...
19/05/2003
0
Estou com um probleminha... Estou tentando fazer uma tela de login... A consulta está ok! E o programa está compilando. Eu tenho registros salvos no banco, mas quando eu entro com o login e a senha ele processa, entra na condição de usuário inexistente e retorna aquele erro: raises Menssage ´Either EOF and BOF´... alguma coisa desse tipo... Esse erro tem dado também em outros forms deste mesmo programa quando eu utilizo o DBNavigator para ir visualizando os dados e deixo o ultimo registro selecionado...
Alguem sabe me dizer o que pode estar havendo e o que posso fazer?!
Rafaelunp
Posts
19/05/2003
Sousa_thiago
EOF = End Off File
BOF = Begin Off File
Agora essa msg sua ai eu nunca vi ....
19/05/2003
Okama
19/05/2003
Rafaelunp
Amigos,
Estou usando SQL Server.
O erro que está dando é esse:
Project Sgc.exe raised exception class EOleException with message ´Either BOF or EOF is True, or the current record has deleted. Requested Operation requires a currente record´. Process stoped. Use Step or Run to continue.
Estou usando uma Query e um DataModule (para as tables e o DataSouce)...
o código do botão ok do login é esse:
procedure TFmLogin.B_Login_OkClick(Sender: TObject);
var
Sql2 : String;
begin
Sql2 := ´SELECT * FROM TB_Usuario ´
+´WHERE (S_Usuario_Login like ´´+ S_Login.Text +´´)´
+´AND (S_Usuario_Senha like ´´+ S_Senha.Text +´´)´;
with ADOQ_Login do
begin
//close;
sql.clear;
sql.add(Sql2);
open;
S_Login.clear;
S_Senha.clear;
If (ADOQ_Login.REcordCount > 0) Then // deixa passar pois o usuario e a senha estao certos
FmLogin.close
else // a senha ou o logim são invalidos..
ShowMessage(´Login ou Senha Inválido!´);
Close;
end;
end;
sempre está entrando no segundo else, ou seja, havendo registro ou não ele avisa que ´Login ou Senha Inválido´ e apresenta o erro!
Vejam ai o que posso estar errando...
20/05/2003
Okama
Sql2 := ´SELECT * FROM TB_Usuario ´+ ´WHERE (S_Usuario_Login like ´ +#39+Trim(S_Login.Text) +39+´)´+ ´AND (S_Usuario_Senha like ´+39+Trim( S_Senha.Text ) +39+ ´)´;
20/05/2003
Rafaelunp
Sql2 := ´SELECT * FROM TB_Usuario ´+ ´WHERE (S_Usuario_Login like ´ +#39+Trim(S_Login.Text) +39+´)´+ ´AND (S_Usuario_Senha like ´+39+Trim( S_Senha.Text ) +39+ ´)´;
Okama,
O código acima funcionou, em termos! A consulta está ok! Posso verificar pelo ShowMessage(Sql.Text); Porem, se o login for inválido, isto é, senha ou usuário não existente, o erro continua! O que poderá ser?
1º O que posso fazer para não aparecer esse erro??
2º Para que serve o 39?? O trim é para tirar acentos e espaços né??
Grato,
20/05/2003
Gatoledo
O #39 do amigo Okama serve para substituir as aspas duplas que vc está utilizando em seu código.
Quando utilizar o SQL Server com ADO não utilize aspas duplas (´) e sim asplas simples.
Veja um exemplo:
SQL := ´SELECT * FROM TB_Usuario ´+
´WHERE (S_Usuario_Login like ´´´ + Trim(S_Login.Text) +´´´)´;
Observe que após a cláusula like existem 3 aspas simples (´´´). Assim o Delphi entenderá que vc quer inserir uma aspas simples na sua cláusula.
Se houver outras cláusulas SQL relacionadas com o seu programa eu te aconselho que verifique-as novamente.
Atenciosamente,
Gabriel
21/05/2003
Rafaelunp
Como já disse a aplicação está rodando, mas se houver um usuário/senha inválido, ele retorna o seguinte erro:
´Project.exe raised exception class EOleException with message ´Either BOF or EOF is true, or the current record has been deleted. Requested operation requires a currente record´. Process Stopped. Use Step or Run to Continue.´
Já percebi que este erro ocorre em todos os forms que utilizo caso eu percorra todos os registros, isto é chegue no ultimo e feche o form...
Imagino que este erro seja dos componentes que estou usando. Estou Usando a Table Usuário e o DataSource (da tabela Usuario) em um Datamodule e um ADOQUERY no form do login. Este ADOQuery se conecta com o Datamodule e com o DataSource_Usuario. porem em momento algum eu estou me conectando (ativando) a query. Estou abrindo o Datamodule e dentro do login conforme código abaixo.
Minha duvida: Estou usando componentes demais? Estes componentes estão certos nos lugares certos? O que pode estar havendo para estar dando esse erro, visto que só dá quando a consulta retorna vazia? Será que falta algum parametro para bloquear isso?
procedure TFmLogin.B_Login_OkClick(Sender: TObject);
var
Sql2 : String;
begin
Sql2 := ´SELECT * FROM TB_Usuario ´+
´WHERE (S_Usuario_Login like ´´´+Trim(S_Login.Text)+´´´)´+
´AND (S_Usuario_Senha like ´´´+Trim(S_Senha.Text)+´´´)´;
with ADOQ_Login do
begin
DataModule1.ADOT_Usuario.Active := True;
Sql.clear;
Sql.add(Sql2);
ADOQ_Login.Open;
S_Login.clear;
S_Senha.clear;
// ShowMessage(Sql.text);
If (ADOQ_Login.REcordCount > 0) Then
FmLogin.close
else
ShowMessage(´Login ou Senha Inválido!´);
ADOQ_Login.Close;
DataModule1.ADOT_Usuario.Active := False;
end;
end;
grato,
21/05/2003
Okama
procedure TFmLogin.B_Login_OkClick(Sender: TObject); var Sql2 : String; begin Sql2 := ´SELECT * FROM TB_Usuario ´+ ´WHERE (S_Usuario_Login like ´´´+Trim(S_Login.Text)+´´´)´+ ´AND (S_Usuario_Senha like ´´´+Trim(S_Senha.Text)+´´´)´; DataModule1.ADOT_Usuario.Active := True; ADOQ_Login.Sql.clear; ADOQ_Login.Sql.add(Sql2); ADOQ_Login.Open; S_Login.clear; S_Senha.clear; // ShowMessage(Sql.text); If not ADOQ_Login.IsEmpty Then //*************************\\ FmLogin.close else ShowMessage(´Login ou Senha Inválido!´); ADOQ_Login.Close; DataModule1.ADOT_Usuario.Active := False; end;
22/05/2003
Sparch
Acessando ele direto pelo executavel?
Dependendo da mensagem de erro, caso seja bem lógica nao ha o pq se preocupar tanto tendo em vista que ele está dando esse erro somente quando o usuario informa o login ou a senha que foram digitados erroneamente.
---
Daniel
22/05/2003
Rafaelunp
Amigos,
Estou usando o Delphi 5 e Win2000.
Já testei pelo executavel sim, e o erro persiste. Alias, como eu já disse esse erro dá em qualquer form que eu chame e através do DbNavigator deixe o cursor no ultimo registro...
Imagino que seja algum componente que estou usando, pois como estou aprendendo a programar agora, devo estar esquecendo de algo.
Só pra relembrar, estou usando um datamodule com conexao ADO. Neste, para cada tabela tenho um ADO_Table e um DataSource, Todos as tables estao desativadas e estou fazendo a conexao no onShow e no OnClose assim:
DataModule1.ADOT_Usuario.Active := True;
Onde estou errando?
22/05/2003
Okama
Vá isolando o problema tente descobrir em qual linha do código ocorre o erro, remova alguns componente e insira-os novamente...
22/05/2003
Pardal3000
O Delphi 5 possui um bug nas plataformas Windows XP/2000. O ADO apresenta esse erro mesmo. Fiquei várias semanas quebrando a cabeça também.
Baixe o Update Pack 1 no site da Borland, e uma atualização do ADO nos mesmo site. O Update Pack 1 será requerido para a atualização do segundo.
Pode fazer isso que irá resolver seu problema, com certeza!
Espero ter ajudado,
Pardal3000
Clique aqui para fazer login e interagir na Comunidade :)