Fórum Erro ao sair do sistema #403342
18/06/2011
0
primeiro:
para melhorar a segurança, NÃO avalie usuário e senha separadamente.
avaliar em conjunto dificulta o quebra via força-bruta, pois não dá pra saber o que foi digitado errado.
então sugiro que você mude sua avaliação para:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
var
ValorSenha: TstringField;
begin
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
frmPrincipal.close;
ednome.setfocus;
Exit;
end;
ValorSenha:=DM.tableUsers.findfield('Senha') as tStringfield;
frmPrincipal.label2.Caption := frmLogin.EdNome.Text;
frmPrincipal.enabled:=true;
frmlogin.release;
end;
segundo:
qual é o form principal da sua aplicação?
esta informação é essencial para poder te oferecer uma solução adequada.
Emerson Nascimento
Curtir tópico
+ 0Posts
19/06/2011
Frederico Brigatte***
primeiro:
para melhorar a segurança, NÃO avalie usuário e senha separadamente.
avaliar em conjunto dificulta o quebra via força-bruta, pois não dá pra saber o que foi digitado errado.
então sugiro que você mude sua avaliação para:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
var
ValorSenha: TstringField;
begin
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
frmPrincipal.close;
ednome.setfocus;
Exit;
end;
ValorSenha:=DM.tableUsers.findfield('Senha') as tStringfield;
frmPrincipal.label2.Caption := frmLogin.EdNome.Text;
frmPrincipal.enabled:=true;
frmlogin.release;
end;
segundo:
qual é o form principal da sua aplicação?
esta informação é essencial para poder te oferecer uma solução adequada.
Ok, desculpe pela demora, estava arrumando minha máquina. O Form Principal é o frmPrincipal.
Gostei + 0
20/06/2011
Emerson Nascimento
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
Gostei + 0
20/06/2011
Wilson Junior
Gostei + 0
20/06/2011
Emerson Nascimento
por isso criei este outro.
Gostei + 0
20/06/2011
Frederico Brigatte***
por isso criei este outro.
Vc conseguiu detectar o erro? O problema é quando logo com o segundo usuário, ao clicar em sair da o erro.
Gostei + 0
21/06/2011
Emerson Nascimento
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Gostei + 0
21/06/2011
Frederico Brigatte***
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Gostei + 0
21/06/2011
Frederico Brigatte***
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Gostei + 0
21/06/2011
Frederico Brigatte***
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Deu erro agora nessa linha:
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
A uses ta assim:
program Parte2;
uses
Forms,
Controls,
UnitPrincipal in 'UnitPrincipal.pas' ,
UnitLogin in 'UnitLogin.pas' ,
UnitDM in 'UnitDM.pas' {DM: TDataModule},
UnitSenhas in 'UnitSenhas.pas' ;
{$R *.RES}
begin
// Application.Initialize;
// Application.CreateForm(TFrmPrincipal, FrmPrincipal);
// Application.CreateForm(TDM, DM);
// Application.Run;
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
Não sei mais o que fazer.
Gostei + 0
21/06/2011
Frederico Brigatte***
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Deu erro agora nessa linha:
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
A uses ta assim:
program Parte2;
uses
Forms,
Controls,
UnitPrincipal in 'UnitPrincipal.pas' ,
UnitLogin in 'UnitLogin.pas' ,
UnitDM in 'UnitDM.pas' {DM: TDataModule},
UnitSenhas in 'UnitSenhas.pas' ;
{$R *.RES}
begin
// Application.Initialize;
// Application.CreateForm(TFrmPrincipal, FrmPrincipal);
// Application.CreateForm(TDM, DM);
// Application.Run;
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
Não sei mais o que fazer.
Fiz essas modificações e continua dando erro.
Fiz uma mudança e o erro acima sumiu:
De: Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Para: Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TDM, DM);
Ahh, e o procedimento no botão OK no FrmLogin não entra no form Principal, entro com o login e senha e fica só na tela de login.
Gostei + 0
21/06/2011
Emerson Nascimento
se você puder me passar seu projeto, com essas três units (principal, login, dm), posso tentar resolver o problema.
emerson.en@gmail.com
Gostei + 0
21/06/2011
Frederico Brigatte***
se você puder me passar seu projeto, com essas três units (principal, login, dm), posso tentar resolver o problema.
emerson.en@gmail.com
Consegue me mandar ainda hoje? Estou parado nisso.
Gostei + 0
21/06/2011
Frederico Brigatte***
se você puder me passar seu projeto, com essas três units (principal, login, dm), posso tentar resolver o problema.
emerson.en@gmail.com
Consegue me mandar ainda hoje? Estou parado nisso.
Acabei de enviar.
Gostei + 0
21/06/2011
Emerson Nascimento
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
Gostei + 0
21/06/2011
Frederico Brigatte***
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
Não recebi, Emerson. Pode enviar novamente?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)