Como bloquear usuario após 3 erros de senha/login

17/07/2009

Prezado,   Também estou com outras dúvidas, mas como tem que ser uma para cada chamado... ...Primeiro - Como bloquear o usuário após 3 tentativas errdas na senha e ou login?     Estou postando o caminho do disco virtual.   Desde já obrigado.   Andre Freitas.
Andre Freitas

Andre Freitas

Curtidas 0

Respostas

Andre Freitas

Andre Freitas

17/07/2009

Segue caminho do disco virtual : http://video.devmedia.com.br/discovirtual/216474/DbSysMac.rar   Andre Freitas.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu caro,
 Vamos a solução.
  - Criar um campo na tabela de usuario, exemplo, Ativo, caso sim o usuario ta liberado, senao, ele esta bloqueado.
  - Crie uma variável, em private, chamada IntTentativa : Integer = 0;
  - No Clique do botao que voce tenta conectar, voce deve estar fazendo o seguinte.
  if (usuario = usuario do banco) and (senha = senha do banco) and (status = 'ativo') then
    abre form
  else
    inc(IntTentativa); // incrementa o numero de tentativas em 1;
  O que voce tem que fazer antes do teste de usuario e senha seria
  if IntTentativas = 3 then
begin
    showmessage('Usuario bloqueado')
    alterar status do usuario; para bloqueado.
end;

  Sacou ? Espero que isso te ajude, qualquer coisa só postar

att,

Wesley Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

boa tarde amigo, A parte da tentativa eu consegui, mas a parte do bloqueio ainda estou com dúvida, poque estou comparando dentro do firebird. Ex: select * from nometabela where nomeusuario=:Vusuario and nomesenha=:Vsenha (agora aparece a duvia).???   ...Também quando clico no botão ok para acessar fiz isso... Vusuario:=tabela.nomesuario Vsenha:=tabela.nomesenha //até aui funciona mas não estou sabendo com comparar o status ...   ... E como alterar o status após erro da senha.   Andre
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Opa meu amigo, que bom que um problema foi resolvido. vamos ao outro.
  No clique do botão Entrar ou OK, para acessar o sistema. faça o seguinte


procedure TForm1.ButtonClick.....
Var
  Qry : TSqlQuery; // Se você usar DBExpress Senão crie um query do tipo do componente que vc usa pra acessar dados.

Begin
Rotina que você já tem pronta hoje para valdar etc.


if (usuario = qryusuario and senha = qrysenha and qrystatus = ativo ) then
ao inves de comprar o usuário e senha, você tem que saber se aquele usuário ta ativo ou não, certo ?

na hora de ver se o usuário tentou 3 vezes, você bota o seguinte.


  Qry := TSqlQuery.Create(Self);
  Qry.SqlConnection := SqlConnection; // Sua conexao;
  Qry.Sql.Add('UPDATE USUARIO                                   ');
  Qry.Sql.Add('SET STATUS = BLOQUEADO'                   );
  Qry.Sql.Add('WHERE USUARIO = +EDTUSUARIO.TEXT );
  Qry.Sql.Add('AND SENHA = +EDTSENHA.TEXT             );
  Qry.ExecSQL;

end;

    ou seja quando o cara tentar as 3x, ele irá automaticamente alterar o status do usuário.

Com isso você mata o problema, senão consegui, me manda o clique do botão, que eu altero pra vc.

Att,

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo,
   Td bem ? Consegui, fazer o exemplo ? Estou no aguardo, pra qualquer dúvida, OK ?
 

Att,

Wesley Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Meu camarada ainda não fiz, mais tarde vou fazer.   Vlw pela atenção.   Andre
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Fala meu caro,
  Blz, estou no aguardo.

Um abraço


Wesley Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Bom dia meu amigo, Tentei fazer o que vc passei, mas não sei porque não funcionou. ...Estou enviando o caminho do disco virtual para vc dar uma olhada. o projeto este dentro da pasta unit segue o caminho: http://video.devmedia.com.br/discovirtual/216474/DbSysMac.rar   Atte,   Andre Freitas 
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu caro,
  Me manda somente o código onde é pra ser feito, quero ver como você fez o exemplo, dai tiro tua dúvida.
  Fico no aguardo.

Att,

Wesley Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Ok, segue o codigo... //AO ABRIR O FORM INICIA TENTATIVAS COM ZERO   procedure TFrmConexao.FormCreate(Sender: TObject);
begin
  Tentativas:=0; //conta o nº de vezes que senha ou login foram digitados incorretamente
  IniConf:=TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'conf.ini'); //cria o arquivo ini
 
end;   //CLIQUE DO BOTÃO OK PARA CONFIRMAR SE SENHA ESTA CORRETA E SE ESTÁ BLOQUEADO procedure TFrmConexao.BbtnAcessarClick(Sender: TObject); begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;
   
    if (DMSysMac.IBQuerySysMac.RecordCount > 0) then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
        // DMSysMac.IBQuerySysMac.ParamByName('Bloq_S_N').AsString:='Sim';
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end;
  \\\COMPARAÇÃO DENTRO DO IBQUERY   select *  from "TblUser"
where "Login"=:VLogin and "Senha"=:VSenha   No aguardo.   Andre Freitas
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, vamos lá. //CLIQUE DO BOTÃO OK PARA CONFIRMAR SE SENHA ESTA CORRETA E SE ESTÁ BLOQUEADO procedure TFrmConexao.BbtnAcessarClick(Sender: TObject); begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;
   
    if (DMSysMac.IBQuerySysMac.RecordCount > 0) then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
        // DMSysMac.IBQuerySysMac.ParamByName('Bloq_S_N').AsString:='Sim';
       BloquearUsuario(EdtLogin.Text,edtSenha.Text);
         showmessage('Final de Tentativas, acesso bloqueado!');      
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end;

//DECLARE E IMPLEMENTE ESTE PROCUDRE, FEITO ISSO ADPTE A MESMA AO IBQUERY, ESTOU CRIANDO //UMA QUERY DINAMICAMENTE
procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                        '+
                   ' SET STATUS = ' + 'BLOQUEADO'  + 
                   ' WHERE USUARIO =  ' USUARIO    +
                   '    AND SENHA  = ' SENHA           +);
  QRY.EXECUTE; OU QRY.OPEN;   

end;
  \\\COMPARAÇÃO DENTRO DO IBQUERY   select *  from "TblUser"
where "Login"=:VLogin and "Senha"=:VSenha AND "STATUS" <> "BLOQUEADO"


  Adpte o exemplo, e veja se assim não funciona.

  Fico a disposição.

Att,

Wesley Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Amigão desculpe-me ser chato, mas adaptei no meu aplicativo mas não está funcionando. Informações adicionais 1º Eu estou usando 01 data modulo que tem (01 ibquery, ibdatabase, 01 ibtrasaction e varias ibtables)   2ºTem um form (faz conexao com o banco)   3º Quando incluo "Bloq_S_N" <> "SIM" ....(SQL)   select *  from "TblUser"
where "Login"=:VLogin and "Senha"=:VSenha AND "STATUS" <> "BLOQUEADO"   DÚVIDAS??? ...O ibquery contém como parametros VLogin,  VSenha  e 03º paramatro ( inclui o paramentro VBloq ) que não tinha.   ...Quando vou ativar a ibquery ocorre um erro dinamic sql não localiza uma coluna.   Onde incluo a prodecure? procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                        '+
                   ' SET STATUS = ' + 'BLOQUEADO'  + 
                   ' WHERE USUARIO =  ' USUARIO    +
                   '    AND SENHA  = ' SENHA           +);
  QRY.EXECUTE; OU QRY.OPEN;    end;     O usuário comparado na clausila acima você tirou da onda (depois de WHETE USUARIO=)  o mesmo para senha. ... Dentro do data modulo ou do form conexao?   Outra duvida   No código abaixo e comparado se o parametro é igual as caixas de texto {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;   ...só que senha e login e o bolqueio onde entra?   Desde já agreço sua atenção   Andre Freitas.            
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo. Sem problemas vamos lá.

Você pode incluir esta procedure no próprio form de login mesmo. O que importa é você executar ela no momento que exibir a mensagem dizendo que o usuário foi bloqueado. Ai voce executa ela
  Ex : bloquearUsuario(Edtusuario, EdtSenha); Só isso

Onde incluo a prodecure? procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                                  '+
                   ' SET Bloq_S_N           = ' + 'SIM'   + 
                   ' WHERE USUARIO  = ' + USUARIO           +
                   '    AND SENHA        = ' + SENHA                );
  QRY.EXECUTE; OU QRY.OPEN;    end;     O usuário comparado na clausila acima você tirou da onda (depois de WHETE USUARIO=)  o mesmo para senha. ... Dentro do data modulo ou do form conexao?
  Se você olhar a procedure tem dois parametros, usuário e senha, os mesmos são os usuário e senha que vocÊ irá passar para poder bloquear. Eles serão substituidos pelos valores que você passar qnd for executar a procedure;
  Ex : EdtUsuario = Wesley
          EdtSenha   = 123

O SQL fará isso

Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                                  '+
                   ' SET Bloq_S_N        = ' + 'SIM'   + 
                   ' WHERE USUARIO  = ' + WESLEY           +
                   '    AND SENHA        = ' + 123                );
  QRY.EXECUTE; OU QRY.OPEN;    end;
  Sendo assim ele irá bloquear o meu usuário;

Outra duvida   No código abaixo e comparado se o parametro é igual as caixas de texto {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;   
    DMSysMac.IBQuerySysMac.Open;
  ...só que senha e login e o bolqueio onde entra?

if (DMSysMac.IBQuerySysMac.RecordCount > 0) and DMSysMac.IBQuerySysMac.FieldByName('Bloq_S_N').Asstring <> 'SIM') then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
        // DMSysMac.IBQuerySysMac.ParamByName('Bloq_S_N').AsString:='Sim';
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
     Se conseguir, me manda novamente todo o código, com as alterações que te mandei, tudo o que você fez. Fico no aguardo do seu retorno.

    Um abraço, estamos a sua disposição.


Att,

Wesley Y

GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo,
  Consegui adpatar o exemplo ? Estou no aguardo para concluírmos este chamado.
  Um abraço

Wesley Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Meu amigo ainda está ocorrendo erro.   Não está recenhecendo o procedimento abaixo procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);   não encontra bloquearUsuario. ...quando vou declarar a procedure não funciona informando não identificada.   ...Também não sei porque quando vou digitar procedure TFrmConexao. não lista as opções.   Andre
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo.
  Me mande o código todo da tua unit, para poder analisar.
  Mas para adiantar, voce declarou e implementou a procedure ?
  Exemplo :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Bloquear; //Tem que declarar a chamada da procedure aqui, sem o TFrm..... Para isso use //a tecla de atalho, CTRL + Shift + C. Quando você fizer isso, automaticamente ele ira implementar lá //em baixo para você
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Bloquear;
begin
/// Seu Codigo Aqui!!!

end;
end.




Fico no aguardo.

Um abraco

Wesley Y

GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

unit UnitConexao; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IBDatabase, Db, IBCustomDataSet, IBQuery, Menus, IniFiles, Buttons; type TFrmConexao = class(TForm) Panel1: TPanel; Image1: TImage; EdtLogin: TEdit; EdtSenha: TEdit; PMnOpDbase: TPopupMenu; SelecionarDBase1: TMenuItem; ODialDbase: TOpenDialog; BbtnAcessar: TBitBtn; BbtnCancelar: TBitBtn; BbtnFechar: TBitBtn; LblAcesso: TLabel; Shape1: TShape; Label2: TLabel; Label1: TLabel; Ajuda1: TMenuItem; DSSysMac: TDataSource; procedure FormCreate(Sender: TObject); procedure SelecionarDBase1Click(Sender: TObject); procedure BbtnAcessarClick(Sender: TObject); procedure BbtnFecharClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure BbtnCancelarClick(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } Tentativas: Integer; IniConf: TIniFile; public { Public declarations } procedure BloquearUsuario; end; var FrmConexao: TFrmConexao; implementation Uses UnitDMSysMac, UnitPrincipal, UnitBarServ, UnitSplash, UnitFrmCadUser, UnitCadFunc, UnitFrmItinerario, UnitFrmLocalidade, UnitRecebTalao, UnitFrmEstoque, UnitAgencia; {$R *.DFM} procedure TFrmConexao.FormCreate(Sender: TObject); begin Tentativas:=0; //conta o nº de vezes que senha ou login foram digitados incorretamente IniConf:=TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'conf.ini'); //cria o arquivo ini end; procedure TFrmConexao.SelecionarDBase1Click(Sender: TObject); begin {Seleciona a banco de dados desejado para trabalho} if ODialDbase.Execute then DmSysMac.IDBaseSysMac.Connected := false; DmSysMac.IDBaseSysMac.DatabaseName := ODialDbase.FileName; Iniconf.WriteString('FDBase','Path',DMSysMac.IDBaseSysMac.DatabaseName); // executa o arquivo ini DmsysMac.IDBaseSysMac.Connected := true; DMSysMac.IBQuerySysMac.Open; end; procedure TFrmConexao.BbtnAcessarClick(Sender: TObject); begin {Conexao de acesso ao banco de dados, se senha ou login diferente, tem mais um tentativa para acesso senão o banco e fechado} DMSysMac.IBQuerySysMac.Close; DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text; DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text; DMSysMac.IBQuerySysMac.Open; if (DMSysMac.IBQuerySysMac.RecordCount > 0) then begin {Abre janela splash e depois ativa os formes que serão utilizados} FrmSplash:=TFrmSplash.Create(Self); Frmsplash.show; Frmsplash.refresh; Frmsplash.Gauge1.Progress:= 1; Application.Initialize; Frmsplash.Gauge1.Progress:= 5; Frmsplash.Gauge1.Progress:= 10; //Application.CreateForm(TFrmPrincipal, FrmPrincipal); Frmsplash.Gauge1.Progress:= 99; Application.CreateForm(TFrmPrincipal, FrmPrincipal); Application.CreateForm(TFrmBarServ, FrmBarServ); Frmsplash.Gauge1.Progress:= 100; Sleep(500); Frmsplash.Free; FrmPrincipal.Show; FrmBarServ.Show; FrmBarServ.EdtUser.text:= EdtLogin.Text; FrmConexao.Free; Application.Run; end else begin inc(Tentativas); if Tentativas > 3 then begin bloquearUsuario(Edtusuario, EdtSenha); showmessage('Final de Tentativas, acesso bloqueado!'); Application.Terminate; end else begin showmessage('Usuário ou senha inválido!'); end; end; end; procedure TFrmConexao.BbtnFecharClick(Sender: TObject); begin FrmConexao.Close; end; procedure TFrmConexao.FormShow(Sender: TObject); begin EdtLogin.SetFocus; end; procedure TFrmConexao.BbtnCancelarClick(Sender: TObject); begin EdtLogin.SetFocus; EdtLogin.Clear; EdtSenha.Clear end; Procedure TFrmConexao.BloquearUsuario; Var usuario, senha:string; Qry : TIBQuery; begin Qry := TIBQuery.Create(Self); Qry.Database := DMSysMac.IDBaseSysMac; Qry.Sql.Add('UPDATE IBTblCadUser '+ ' SET Bloq_S_N = ' + 'SIM' + ' WHERE Login = ' + Usuario + ' AND Senha = ' + Senha ); QRY.ExecSQL ; end; end.
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Meu amigo bom dia segue o código.   unit UnitConexao; interface uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, IBDatabase, Db, IBCustomDataSet, IBQuery, Menus, IniFiles,
  Buttons; type
  TFrmConexao = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    EdtLogin: TEdit;
    EdtSenha: TEdit;
    PMnOpDbase: TPopupMenu;
    SelecionarDBase1: TMenuItem;
    ODialDbase: TOpenDialog;
    BbtnAcessar: TBitBtn;
    BbtnCancelar: TBitBtn;
    BbtnFechar: TBitBtn;
    LblAcesso: TLabel;
    Shape1: TShape;
    Label2: TLabel;
    Label1: TLabel;
    Ajuda1: TMenuItem;
    DSSysMac: TDataSource;
    procedure FormCreate(Sender: TObject);
    procedure SelecionarDBase1Click(Sender: TObject);
    procedure BbtnAcessarClick(Sender: TObject);
    procedure BbtnFecharClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BbtnCancelarClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);   private
     { Private declarations }       Tentativas: Integer;
      IniConf: TIniFile;
  public
      { Public declarations }
       procedure BloquearUsuario;
  end; var
  FrmConexao: TFrmConexao;   implementation
Uses UnitDMSysMac, UnitPrincipal, UnitBarServ, UnitSplash, UnitFrmCadUser,
  UnitCadFunc, UnitFrmItinerario, UnitFrmLocalidade, UnitRecebTalao,
  UnitFrmEstoque, UnitAgencia; {$R *.DFM} procedure TFrmConexao.FormCreate(Sender: TObject);
begin
  Tentativas:=0; //conta o nº de vezes que senha ou login foram digitados incorretamente
  IniConf:=TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'conf.ini'); //cria o arquivo ini
 
end; procedure TFrmConexao.SelecionarDBase1Click(Sender: TObject);
begin
    {Seleciona a banco de dados desejado para trabalho}
    if ODialDbase.Execute then
    DmSysMac.IDBaseSysMac.Connected := false;
    DmSysMac.IDBaseSysMac.DatabaseName := ODialDbase.FileName;
    Iniconf.WriteString('FDBase','Path',DMSysMac.IDBaseSysMac.DatabaseName); // executa o arquivo ini
    DmsysMac.IDBaseSysMac.Connected := true;
    DMSysMac.IBQuerySysMac.Open;
end; procedure TFrmConexao.BbtnAcessarClick(Sender: TObject); begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;
   
    if (DMSysMac.IBQuerySysMac.RecordCount > 0) then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
         bloquearUsuario(Edtusuario, EdtSenha);
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end; procedure TFrmConexao.BbtnFecharClick(Sender: TObject);
begin
     FrmConexao.Close;
end; procedure TFrmConexao.FormShow(Sender: TObject);
begin
EdtLogin.SetFocus;
end; procedure TFrmConexao.BbtnCancelarClick(Sender: TObject);
begin
      EdtLogin.SetFocus;
      EdtLogin.Clear;
      EdtSenha.Clear end;
Procedure TFrmConexao.BloquearUsuario;
Var  usuario, senha:string;
Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Database := DMSysMac.IDBaseSysMac;
  Qry.Sql.Add('UPDATE IBTblCadUser                                  '+
                   ' SET Bloq_S_N           = ' + 'SIM'   +
                   ' WHERE Login  = ' + Usuario          +
                   '    AND Senha        = ' + Senha                );
  QRY.ExecSQL ;
end;
end.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, Bom dia!
    Olhei o código aqui e vi o seguinte erro.


unit UnitConexao;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, IBDatabase, Db, IBCustomDataSet, IBQuery, Menus, IniFiles,
  Buttons;

type
  TFrmConexao = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    EdtLogin: TEdit;
    EdtSenha: TEdit;
    PMnOpDbase: TPopupMenu;
    SelecionarDBase1: TMenuItem;
    ODialDbase: TOpenDialog;
    BbtnAcessar: TBitBtn;
    BbtnCancelar: TBitBtn;
    BbtnFechar: TBitBtn;
    LblAcesso: TLabel;
    Shape1: TShape;
    Label2: TLabel;
    Label1: TLabel;
    Ajuda1: TMenuItem;
    DSSysMac: TDataSource;
    procedure FormCreate(Sender: TObject);
    procedure SelecionarDBase1Click(Sender: TObject);
    procedure BbtnAcessarClick(Sender: TObject);
    procedure BbtnFecharClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BbtnCancelarClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);

  private
     { Private declarations }

      Tentativas: Integer;
      IniConf: TIniFile;
  public
      { Public declarations }
       procedure BloquearUsuario(Usuario, Senha: String);
  end;

var
  FrmConexao: TFrmConexao;

 

implementation
Uses UnitDMSysMac, UnitPrincipal, UnitBarServ, UnitSplash, UnitFrmCadUser,
  UnitCadFunc, UnitFrmItinerario, UnitFrmLocalidade, UnitRecebTalao,
  UnitFrmEstoque, UnitAgencia;

{$R *.DFM}

procedure TFrmConexao.FormCreate(Sender: TObject);
begin
  Tentativas:=0; //conta o nº de vezes que senha ou login foram digitados incorretamente
  IniConf:=TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'conf.ini'); //cria o arquivo ini
 
end;

procedure TFrmConexao.SelecionarDBase1Click(Sender: TObject);
begin
    {Seleciona a banco de dados desejado para trabalho}
    if ODialDbase.Execute then
    DmSysMac.IDBaseSysMac.Connected := false;
    DmSysMac.IDBaseSysMac.DatabaseName := ODialDbase.FileName;
    Iniconf.WriteString('FDBase','Path',DMSysMac.IDBaseSysMac.DatabaseName); // executa o arquivo ini
    DmsysMac.IDBaseSysMac.Connected := true;
    DMSysMac.IBQuerySysMac.Open;
end;

procedure TFrmConexao.BbtnAcessarClick(Sender: TObject);

begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
  
    DMSysMac.IBQuerySysMac.Open;
  
    if (DMSysMac.IBQuerySysMac.RecordCount > 0) then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;

      Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);

      Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;

      FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
    
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
         bloquearUsuario(Edtusuario.Text, EdtSenha.Text);
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end;

procedure TFrmConexao.BbtnFecharClick(Sender: TObject);
begin
     FrmConexao.Close;
end;

procedure TFrmConexao.FormShow(Sender: TObject);
begin
EdtLogin.SetFocus;
end;

procedure TFrmConexao.BbtnCancelarClick(Sender: TObject);
begin
      EdtLogin.SetFocus;
      EdtLogin.Clear;
      EdtSenha.Clear

end;


Procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
   Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Database := DMSysMac.IDBaseSysMac;
  Qry.Sql.Add('UPDATE IBTblCadUser               '+
                   ' SET Bloq_S_N  = ' + 'SIM'   +
                   ' WHERE Login   = ' + Usuario +
                   '    AND Senha  = ' + Senha   );
  QRY.ExecSQL ;
end;


end.


    A principio tem que funcionar desta forma, esta tudo certinho. Fico no aguardo do teu retorno.

Um abraço.

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, bom dia !
  Tudo bem  ? Consegui adaptar o exemplo, e corrigir ?
  Estou no aguardo.

Um abraço

Wesley Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Boa tarde meu amigo,   Está ocorrendo um erro na seguinte linha...  procedure BbtnAcessarClick(Sender: TObject);
    procedure BbtnFecharClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BbtnCancelarClick(Sender: TObject);
   procedure FormActivate(Sender: TObject);    ...Está informando erro 34 e erro 27 Não está compilando o form.   Andre.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, boa noite!

   Provávelmente você não tem a implementação desta procedure na tua unit, me manda todo o código dela, ou então tente apagar esta linha, e tente compilar novamente.
  FIco no aguardo.


Um abraço,

Welsey Y
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Olá meu amigo boa tarde eu já tinha tentado excluir esta linha, mas gerou um errou que travou tudo. ...Segue o solicitado.   Andre Freitas. unit UnitConexao; interface uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, IBDatabase, Db, IBCustomDataSet, IBQuery, Menus, IniFiles,
  Buttons; type
  TFrmConexao = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    EdtLogin: TEdit;
    EdtSenha: TEdit;
    PMnOpDbase: TPopupMenu;
    SelecionarDBase1: TMenuItem;
    ODialDbase: TOpenDialog;
    BbtnAcessar: TBitBtn;
    BbtnCancelar: TBitBtn;
    BbtnFechar: TBitBtn;
    LblAcesso: TLabel;
    Shape1: TShape;
    Label2: TLabel;
    Label1: TLabel;
    Ajuda1: TMenuItem;
    DSSysMac: TDataSource;
    procedure FormCreate(Sender: TObject);
    procedure SelecionarDBase1Click(Sender: TObject);
    procedure BbtnAcessarClick(Sender: TObject);
    procedure BbtnFecharClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BbtnCancelarClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);   private
     { Private declarations }       Tentativas: Integer;
      IniConf: TIniFile;
  public
      { Public declarations }
       procedure BloquearUsuario(Usuario, Senha: String);
  end; var
  FrmConexao: TFrmConexao;   implementation
Uses UnitDMSysMac, UnitPrincipal, UnitBarServ, UnitSplash, UnitFrmCadUser,
  UnitCadFunc, UnitFrmItinerario, UnitFrmLocalidade, UnitRecebTalao,
  UnitFrmEstoque, UnitAgencia; {$R *.DFM} procedure TFrmConexao.FormCreate(Sender: TObject);
begin
  Tentativas:=0; //conta o nº de vezes que senha ou login foram digitados incorretamente
  IniConf:=TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'conf.ini'); //cria o arquivo ini
 
end; procedure TFrmConexao.SelecionarDBase1Click(Sender: TObject);
begin
    {Seleciona a banco de dados desejado para trabalho}
    if ODialDbase.Execute then
    DmSysMac.IDBaseSysMac.Connected := false;
    DmSysMac.IDBaseSysMac.DatabaseName := ODialDbase.FileName;
    Iniconf.WriteString('FDBase','Path',DMSysMac.IDBaseSysMac.DatabaseName); // executa o arquivo ini
    DmsysMac.IDBaseSysMac.Connected := true;
    DMSysMac.IBQuerySysMac.Open;
end; procedure TFrmConexao.BbtnAcessarClick(Sender: TObject); begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;
   
    if (DMSysMac.IBQuerySysMac.RecordCount > 0) then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
         bloquearUsuario(EdtLogin.Text, EdtSenha.Text);
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end; procedure TFrmConexao.BbtnFecharClick(Sender: TObject);
begin
     FrmConexao.Close;
end; procedure TFrmConexao.FormShow(Sender: TObject);
begin
EdtLogin.SetFocus;
end; procedure TFrmConexao.BbtnCancelarClick(Sender: TObject);
begin
      EdtLogin.SetFocus;
      EdtLogin.Clear;
      EdtSenha.Clear end;
Procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
   Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Database := DMSysMac.IDBaseSysMac;
  Qry.Sql.Add('UPDATE IBTblCadUser               '+
                   ' SET Bloq_S_N  = ' + 'SIM'   +
                   ' WHERE Login   = ' + Usuario +
                   '    AND Senha  = ' + Senha   );
  QRY.ExecSQL ;
end;   end.
 
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, Boa tarde.
  Vamos lá, vamos entender como funciona a unit no delphi.
  1 - Você declara uma procedure;
  2 - Implementa esta procedure;

  Obs : Se você declarar uma procedure com 2 parametros, e depois precisar mudar ela, e colocar mais um parametro, você tem que mudar tanto na seção implementation quando na interface, as duas tem que esta iguais, o que você esta me mostrando é a declaração da procedure( Interface) , e não tem a implementation. Não vai funcionar de jeito nenhum.

  Qual foi o erro que aconteceu ? Me manda todas as mensagens que o delphi gerou, ou até melhor me manda um Print Screen da tua tela, mostrando o erro. Fica mais facil, sacou meu amigo ?

  Um forte abraço

Wesley Y
GOSTEI 0
Devmedia

Devmedia

17/07/2009

Andre,
recomendo que vc crie um video e mande para que o consultor possa entender melhor a sua dúvida.
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Meu amigão boa tarde,   tentei várias coisas e não funcionou.   Não está compilando recordcont >0 e campo comparativo <> sim   envei um disco virtual para vc analisar segue o endereço.   http://video.devmedia.com.br/discovirtual/216474/Erro_bloq_Login.rar   abraço,   Andre 
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo,
  Com a video é muito mais fácil. Vamos lá .
  Vou te ensinar e não resolver teu problema, ok?
  Como devemos passar string em delphi?
   Exemplo
      ShowMessage('Teste');
   Então toda String em delphi deve ser passada enter Plics. Se você olhar no teu código verá que esta passando o teu <> "SIM" entre aspas, e não entre Plics, mude para plics e veja senão funciona?
  Com relação a procedure FormActive, é so fazer aquilo que você fez, comentar, ou excluir a linha, e pronto, problema Resolvido.
   Com relacção, ao login, depure o código e me mande, uma video, com você depurando o código.
   Fico no aguardo, meu amigo.


Um forte abraço

Wesley Y
  

GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Olá meu camarada sou eu de novo, tentei resolver, mas agora o erro está no bloqueio.   Quando digito um login errado teria que bloquear o acesso deste usuario, mas não está ocorrendo isso e sim um erro.   Estou te enviando o caminho do video. http://video.devmedia.com.br/discovirtual/216474/LoginBloq_ComErro.rar   Abraço,   Andre Freitas. 
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo.
  A sua tabela, IBTBLCADUSER, qual é a tabela que esta apontada nesta IBTable ?
  Pois desta forma não tem como saber, coloque breakPoint, no clique do botão ok, e va depurando ate achar o erro me mande uma video com esta depuração, pois não tem comos saber onde esta dando o erro, infelizmente !

  Um abraço.
  Wesley Y
GOSTEI 0
Devmedia

Devmedia

17/07/2009

Andre,
conseguiu resolver o seu problema?
GOSTEI 0
Devmedia

Devmedia

17/07/2009

Andre,
conseguiu resolver o seu problema?
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Olá meu amigo,   Ainda não, mas tarde vou tentar de novo caso não consiga te mando um video.   Andre Freitas
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, td bem, estamos a disposição.

Um Abraço

Wesley Y
GOSTEI 0
Devmedia

Devmedia

17/07/2009

Andre,
precisamos saber em que vc ainda tem dúvida para que possamos dar prosseguimento ao atendimento.
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Boa tarde meu amigo,   ainda não consegui resolver o problema que está acontecendo depois de 3 vezes que digitar o login/senha errado. não está ocorrendo o bloqueio e um erro Dynamic  SQL  error . estou postando o sistema para voce de uma olhada.   Segue o caminho do disco virtual: http://video.devmedia.com.br/discovirtual/216474/DbSysMac-3.rar Segue o video: http://video.devmedia.com.br/discovirtual/216474/LoginBloq_ComErro.rar   Quando digito a senha certa funciona tudo certo, mas quando erro 3 vezes  gerar este erro. Já conferi a tabela de acesso está correta, fiz o que você pediu e não encontrei nenhum erro.   Abraço, no aguardo.   Andre Freitas
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo , preciso que me ajude a montar seu ambiente.
   Qual bd e versão estas usando ?
   Esta usando componentes de terceiro ? QUais ?
   Qual versão do Delphi esta usando ?
   Tem alguma dll especifica ? ou outra configuração especifica a se fazer ?

Um abraço


Wesley Y
  
GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Boa noite meu amigo, Estou usando delphi7, Firebird 3.9.5.1 e compontentes da paleta Ib, só.   Abraço e até Andre.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, vou montar o ambiente, peço que espere um pouco, ok ?

Abraço

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Olá meu amigo, esta ai a solução para seus problemas.rsrsrs
   Bom notei que teu sistema, com uma coisa não muito boa, você conhece esta tela ? ela é acessada pelo menu, projetct/ Options.

   Qual finalidade dela ?
     Permite que certos, forms sejam criados quando o programa for executado, ou seja, todos este forms são criados quando você abre o executável, porém, você usa todos eles ao mesmo tempo? Nâo! Ou seja teu sistema fica lento, pois, tem vários forms já criados. O que te recomendo, veja bem, recomendo é deixar somente o teu DataModule, e teu FrmConexao, e O FrmPrincipal, o restante você joga no Available Forms  dai toda vez que for chamar um form você tem que criar o mesmo, como ???

Try
  FrmCadUser := TFrmCadUser.Create(Self);
  FrmCadUser.ShowModal; // Porém você só podera abrir um form por vez, se for interessante usar, seria bom.
Finally
  FreeAndNil(FrmCadUser);

end;

isso foi só uma dica.



Vamos ao que interessa. Altere sua procedure para esta forma.

Procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
   Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Database := DMSysMac.IDBaseSysMac;
  Qry.Transaction := DMSysMac.IBTransSysMac;
  Qry.Sql.Add('UPDATE "TblUser"               '+
              '   SET "Bloq_S_N" = ' + QuotedStr('NAO')   +
              ' WHERE "Login"    = ' + QuotedStr(Usuario) );
  QRY.ExecSQL ;
  DMSysMac.IBTransSysMac.Commit;
end;

{Botão Acessar eu fiz uma pequena modificação caso não goste, é ignorar}

procedure TFrmConexao.BbtnAcessarClick(Sender: TObject);
begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
    DMSysMac.IBQuerySysMac.Open;

    If (DMSysMac.IBQuerySysMac.FieldByName('Bloq_S_N').AsString  = ('SIM')) then
    begin
       ShowMessage('Usuário esta bloqueado' +#13+#13+
                   'Entre em contato com o Administrador' );
       Exit;
    end
    else

    if (DMSysMac.IBQuerySysMac.RecordCount > 0)  then

      begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;

      Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);

      Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;

      FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
         bloquearUsuario(EdtLogin.Text, EdtSenha.Text);
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end;


Fico por aqui, um abraço, espero te ajudado, qualquer coisa estamos a disposição. Caso resolva tudo, me informar para podermos fechar o chamado, ok ?

Wesley Y


GOSTEI 0
Andre Freitas

Andre Freitas

17/07/2009

Amigão perfeito.   Obrigado pela ajuda e pelas dicas, mais tarde finalizo os feed back's.   Abraço,   Andre Freitas.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

17/07/2009

Show então meu amigo.

Forte abraço.

Wesley Y
GOSTEI 0
POSTAR