Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro Na Tela De Login


robinhocne

Pergunta

Esses são os dados do meu form de login:

procedure TFrmLogin.SpbOkClick(Sender: TObject);
label Erro;
var
 S: String;
begin
   dtmiza.qryiza.Open;
 if dtmiza.qryiza.Locate('Usuarios', TxtUsu.Text, []) Then
  begin
   S:=dtmiza.qryiza.FieldByName('Senha').AsString;
   If TxtSen.Text<>S Then Goto Erro;
   Close;
   Exit;
  FrmLogin.Close;
  end
 Else
  Goto Erro;
 Erro:
  begin
  MessageDlg('Você Não Tem Permisão', mtConfirmation, [mbOk], 0);
  Application.Terminate;
end;
 End;
procedure TFrmLogin.txtusuExit(Sender: TObject);
begin
   dtmiza.qryiza.Open;
      If dtmiza.qryiza.Locate('UsuarioS', TxtUsu.Text, []) Then
         psvBorderLabel1.Caption:= dtmiza.qryiza.FieldByName('Nivel').AsString;
end;

procedure TFrmLogin.txtsenKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 If (Key=vk_Return) Or (Key=vk_Down) Then
  Perform(WM_NEXTDLGCTL, 0, 0);
end;

e Esse é o erro:

Empty SQL Sta Tement

Qual é esse erro.?

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Opa

Eu não sou bom com banco de dadosss rs

Mas acho que antes de você dar um locate talvez você precise abrir um SELECT

passando os campos que deseja, parece ser isso o erro, desde que Empty

quer dizer que está em branco a Query...

tente colocar antes do Open tipo

dtmiza.qryiza.Close;
dtmiza.qryiza.SQL.Clear;
dtmiza.qryiza.SQL.Add('SELECT Usuarios, Senha, Nivel from NOME_DA_TABELA');
dtmiza.qryiza.Open;
if dtmiza.qryiza.Locate('Usuarios', TxtUsu.Text, []) Then
  begin
....
ou o que você pode fazer também é dar um select já passando o nome do usuário tipo
with dtmiza do
begin
  qryiza.Close;
  qryiza.SQL.Clear;
  qryiza.SQL.Add('SELECT Usuarios, Senha, Nivel from NOME_DA_TABELA');
  qryiza.SQL.Add('WHERE Usuarios =:u');
  qryiza.ParamByName('u').asString := TxtUsu.Text;
  qryiza.Open;

  if qryiza.RecordCount = 0 then
  ShowMessage('Usuário inválido') else
  if (LowerCase(TxtSen.Text) = LowerCase(qryiza.FieldbyName('Senha').asString)) then
  Close else
  ShowMessage('Senha inválida!');
  end;

da pra melhorar e adaptar ao seu código... foi só outra ideia rs

se for usar essa outra ideia, tira o LowerCase caso queira fazer uma senha case sensitive ou

seja, com diferenciação de maiúsculas para minúsculas...

abraçox

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, deu tudo certo, mas acontece algo.

Mas deu certo assim:

procedure TFrmLogin.SpbOkClick(Sender: TObject);
Begin
   with dtmiza do
      begin
         qryiza.Close;
         qryiza.SQL.Clear;
         qryiza.SQL.Add('SELECT * from Usuarios');
         qryiza.Open;
     if qryiza.RecordCount = 0 then
         ShowMessage('Usuário inválido') else
            if (LowerCase(TxtSen.Text) = LowerCase(qryiza.FieldbyName('Senha').asString)) then
                Close else
                ShowMessage('Senha inválida!');
      end;

End;

Inicio o Programa e digito a senha e usuario tudo ok, mas não aparece o meu programa, quer dizer não entra no sistema e agora?

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Bom o Erro acho que não é ai não...

A lógica parece estar certa, mas não testei...

if qryiza.RecordCount = 0 then

ShowMessage('Usuário inválido')

RecordCount retorna em Integer quantos registros foram encontrados, como você

deu um SELECT passando o usuário, então se não houver registros quer dizer que

o usuário não existe mesmo...

else ao contrário disso

if (LowerCase(TxtSen.Text) = LowerCase(qryiza.FieldbyName('Senha').asString)) then

Close

Se o usuário existe e a senha digitada no TEdit TxtSen for igual ao do campo Senha referente

a este usuário então ele fecha a tela de login

Está fechando a tela de login?

abraçox

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, Churc, entedi e mudei as coisas aki mas me ajude a implementar, pois ele abre o form normal, e falta duas coisas:

1 - Tenho que também fazer uma checagem do Usuário.

2 - Digitando a senha correta o Projeto abre normal mas a tela de login não feche.

Me ajude a implementar esses dois dados nesse codigo meu pois já tentei de varias maneiras e não to sabendo como fazer.

procedure TFrmLogin.SpbOkClick(Sender: TObject);
Begin
   with dtmiza do
      begin
         qryiza.Close;
         qryiza.SQL.Clear;
         qryiza.SQL.Add('SELECT * from Usuarios');
         qryiza.Open;
     if qryiza.RecordCount = 0 then
         ShowMessage('Usuário inválido') else
                if (LowerCase(TxtSen.Text) = LowerCase(qryiza.FieldbyName('Senha').asString)) then
                FrmPrincipal.ShowModal else
                ShowMessage('Usuário ou Senha Inválida!');
      end;


End;

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Mas você fez errado, você deu um SELECT *

O * (Asterisco) vai selecionar todos os campos e supostamente todos os usuários, e assim é claro,

vai retornar um número de registros maior do que 0, você tem que passar no SELECT apenas o

usuário informado...

Faz o seguinte, da uma olhada neste vídeo de como é feito uma tela de Login a nível de não

iniciar o sistema caso não há sucessso no login...

http://www.sunsetsolutions.com.br/ranilson/

E então se você usar o código que lhe passei

with dtmiza do
begin
  qryiza.Close;
  qryiza.SQL.Clear;
  qryiza.SQL.Add('SELECT Usuarios, Senha, Nivel from NOME_DA_TABELA');
  qryiza.SQL.Add('WHERE Usuarios =:u');
  qryiza.ParamByName('u').asString := TxtUsu.Text;
  qryiza.Open;

  if qryiza.RecordCount = 0 then
  ShowMessage('Usuário inválido') else
  if (LowerCase(TxtSen.Text) = LowerCase(qryiza.FieldbyName('Senha').asString)) then
  Close else
  ShowMessage('Senha inválida!');
  end;

Vai funcionar perfeitamente, mas é claro você tem que adaptá-lo as suas necessidades...

abraçox

Link para o comentário
Compartilhar em outros sites

  • 0
Opa

Mas você fez errado, você deu um SELECT *

O * (Asterisco) vai selecionar todos os campos e supostamente todos os usuários, e assim é claro,

vai retornar um número de registros maior do que 0, você tem que passar no SELECT apenas o

usuário informado...

Faz o seguinte, da uma olhada neste vídeo de como é feito uma tela de Login a nível de não

iniciar o sistema caso não há sucessso no login...

http://www.sunsetsolutions.com.br/ranilson/

E então se você usar o código que lhe passei

with dtmiza do
begin
  qryiza.Close;
  qryiza.SQL.Clear;
  qryiza.SQL.Add('SELECT Usuarios, Senha, Nivel from NOME_DA_TABELA');
  qryiza.SQL.Add('WHERE Usuarios =:u');
  qryiza.ParamByName('u').asString := TxtUsu.Text;
  qryiza.Open;

  if qryiza.RecordCount = 0 then
  ShowMessage('Usuário inválido') else
  if (LowerCase(TxtSen.Text) = LowerCase(qryiza.FieldbyName('Senha').asString)) then
  Close else
  ShowMessage('Senha inválida!');
  end;
Vai funcionar perfeitamente, mas é claro você tem que adaptá-lo as suas necessidades... abraçox
Ok, Resolvido. Ai vai os dados:
unit FLogin;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, psvBasiclbl, psvBorderLabel, DB, pngimage,
  ExtCtrls, Menus;

type
  TFrmLogin = class(TForm)
    txtusu: TEdit;
    psvBorderLabel2: TpsvBorderLabel;
    psvBorderLabel3: TpsvBorderLabel;
    txtsen: TEdit;
    SpbOk: TSpeedButton;
    SpbCan: TSpeedButton;
    Image1: TImage;
    psvBorderLabel1: TpsvBorderLabel;
    procedure SpbOkClick(Sender: TObject);
    Procedure LeAcesso (Nivel : String);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure SpbCanClick(Sender: TObject);


  private
    Acessos : Integer;
    Liberado : Boolean;

  public
    Login : Boolean;

  end;

var
  FrmLogin: TFrmLogin;

implementation

{$R *.dfm}

Uses Funcoes, FPrincipal;



procedure TFrmLogin.LeAcesso(Nivel: String);
var Menu : Array[1..43] of TMenuItem; // Não esquecer de colocar na clausula uses 'Menus'
    i : Integer;
begin
    Menu[01] := FrmPrincipal.Cadastro1;
    Menu[02] := FrmPrincipal.Alunos1;
    Menu[03] := FrmPrincipal.Instrutores1;
    Menu[04] := FrmPrincipal.Cidades1;
    Menu[05] := FrmPrincipal.Veiculos1;
    Menu[06] := FrmPrincipal.Materias1;
    Menu[07] := FrmPrincipal.Niveis1;
    Menu[08] := FrmPrincipal.Usuarios2;
    Menu[09] := FrmPrincipal.Empresa1;
    Menu[10] := FrmPrincipal.Lancamentos1;
    Menu[11] := FrmPrincipal.Parcelas1;
    Menu[12] := FrmPrincipal.Pagar1;
    Menu[13] := FrmPrincipal.Caixa3;
    Menu[14] := FrmPrincipal.Exames2;
    Menu[15] := FrmPrincipal.Exames1;
    Menu[16] := FrmPrincipal.Agendamentos1;
    Menu[17] := FrmPrincipal.Teoricas1;
    Menu[18] := FrmPrincipal.Praticas1;
    Menu[19] := FrmPrincipal.Relatorios;
    Menu[20] := FrmPrincipal.Matricula1;
    Menu[21] := FrmPrincipal.Moto1;
    Menu[22] := FrmPrincipal.Carro1;
    Menu[23] := FrmPrincipal.Caminhao1;
    Menu[24] := FrmPrincipal.Onibus1;
    Menu[25] := FrmPrincipal.Carreta1;
    Menu[26] := FrmPrincipal.AulasPraticas1;
    Menu[27] := FrmPrincipal.AulasTeoricas2;
    Menu[28] := FrmPrincipal.Contrato1;
    Menu[29] := FrmPrincipal.Diario1;
    Menu[30] := FrmPrincipal.Semanal1;
    Menu[31] := FrmPrincipal.Diario2;
    Menu[32] := FrmPrincipal.Semanal2;
    Menu[33] := FrmPrincipal.Presenca1;
    Menu[34] := FrmPrincipal.Certificacao1;
    Menu[35] := FrmPrincipal.Presenca2;
    Menu[36] := FrmPrincipal.Certificacao2;
    Menu[37] := FrmPrincipal.Parcelas2;
    Menu[38] := FrmPrincipal.Carne1;
    Menu[39] := FrmPrincipal.CaixaDiario2;
    Menu[40] := FrmPrincipal.Exames;
    Menu[41] := FrmPrincipal.Utilitarios1;
    Menu[42] := FrmPrincipal.Backup1;
    Menu[43] := FrmPrincipal.Sistema1;
    For i := 1 to High (Menu) do
       Begin
          Menu[i].Enabled := (Nivel[i]='1');
       End;
       Liberado := True;
       Close;

end;

procedure TFrmLogin.SpbOkClick(Sender: TObject);
Begin
If ( (Length(Trim(TxtUsu.Text))=0) or (Length(Trim(TxtSen.Text))=0) ) then
       Begin
          ShowMessage ('Usuário / senha inválido!');
          Exit;
       end;
   If ( ConsultaRegistros ('Usuarios U, Nivel N', 'U.Senha, N.Acesso','U.Nome='+ #39 + TxtUsu.Text + #39)) then
       Begin
          If (LeDados ('Senha')<>TxtSen.Text) then
          Begin
             Inc(Acessos);
             ShowMessage ('Senha incorreta!');
             If (Acessos >2) Then Application.Terminate;// se o usuario digitar 3 x a senha errada é finalizada a aplicação
             Exit;
          end;
             LeAcesso (LeDados('Acesso'));
       end
   else
   Begin
      Inc(Acessos);
      ShowMessage ('Usuário Inexistente!');
      If (Acessos >2) Then Application.Terminate;// se o usuario digitar 3 x a senha errada é finalizada a aplicação
   end;

End;  


procedure TFrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    If (Liberado) then
    Begin
       Action := caFree;
    end
    else
    begin
       Application.Terminate;
    end;
end;

procedure TFrmLogin.FormCreate(Sender: TObject);
begin
    Liberado := False;
end;

procedure TFrmLogin.SpbCanClick(Sender: TObject);
begin
    Close;
end;

End.
No View Source:
.....
{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(Tdtmiza, dtmiza);
  Application.CreateForm(Tfrmprincipal, frmprincipal);
  Application.CreateForm(TFrmLogin, FrmLogin);
  FrmLogin.ShowModal;
  Application.CreateForm(TFrmSplash, FrmSplash);
  FrmSplash.show; // exibe a tela FrmSplash
  FrmSplash.Refresh; // dá um refresh na tela
  sleep(0000); // aguarda 02 segundo - incluir na unit o SysUtils na Uses
  FrmSplash.Release; // Elimina a tela da memoria
  FrmSplash := nil; // anula a referencia ao ponteiro do objeto
  Application.Run;
end.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...