Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Erro Na Tela De Login


robinhocne

Question

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 to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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?

Edited by robinhocne
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.7k
×
×
  • Create New...