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

Erro com a Classe Usuario


Ronaldo Lanhellas

Pergunta

bom, o que aconteçe é que estou criando uma estrutura de login de usuários, criei a minha classe usuários todinha e fiz um botão no meu formulário principal com o seguinte código:

procedure TfrmPrincipal.Button1Click(Sender: TObject);
begin
if TUsuario.GetInstance.Login('ronaldo','123456',Acoes) then
showmessage('Logado com sucesso')
else
showmessage('não logado');

end;
o que aconteçe é que ao clicar neste botão ele me retorna um erro dizendo que a tabela USUARIOS é desconhecida (UNKNOW TABLE USUARIOS), porem já vi todo o código da classe usuário (que eu creio que o erro esteja lá, e não encontrei nada). aqui vai o código da minha classe usuário:
unit uUsuario;

interface
uses
ActnList, DBXCommon;

type TUsuario = class
     private
    FID: Integer;
    FSenha: String;
    FLogin: String;
    FNome: String;
    FPerfilID: Integer;
    FLogado: Boolean;
    FAcoes: TCustomActionList;
    constructor CreatePrivate;
    class var FInstance: TUsuario;
       { private declarations }
     protected
       { protected declarations }
       function LoadProfile: Boolean;virtual;
     public
       { public declarations }
       constructor Create;
       function Login(AUsuario, Asenha: String; Acoes: TCustomActionList): Boolean;
       function GetPerfilName: string;
       function GetPerfilDescription: string;
       function ChangePassword (strOldPassword,strNewPassword: string):Boolean;
       class function GetInstance: TUsuario;

     published
       { published declarations }
       property ID: Integer read FID;
       property Nome: String read FNome;
       property Usuario: String read FLogin;
       property Senha: String read FSenha;
       property PerfilID: Integer read FPerfilID;
     end;

implementation

uses
  SysUtils, Dialogs, uDM;

{ TUsuario }

function TUsuario.ChangePassword(strOldPassword,
  strNewPassword: string): Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
T: TDBXTransaction;
begin
if FSenha = strOldPassword then
Begin
try
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('FBConnection','SYSDBA','masterkey');
T:= DBCon.BeginTransaction;
Command:= DBCon.CreateCommand;
Command.Text := 'UPDATE SET senha = '+QuotedStr(strNewpassword)+
                  'WHERE usuariosid= '+IntToStr(FID);
Command.ExecuteUpdate;
DBCon.CommitFreeAndNil(T);
Result := True;
except
DBCon.RollbackFreeAndNil(T);
end;
End
else
MessageDlg('A Senha Antiga não confere !!',mtInformation,[mbOK],0);
end;

constructor TUsuario.Create;
begin
 raise Exception.Create('Para obter uma instância de TUsuario utilize TUsuario.GetInstance');
end;

constructor TUsuario.CreatePrivate;
begin
inherited Create;
end;

class function TUsuario.GetInstance: TUsuario;
begin
  if not Assigned(FInstance) then
    FInstance := TUsuario.CreatePrivate;
    Result := FInstance;

end;

function TUsuario.GetPerfilDescription: string;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
begin
if FLogado then
Begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('FBConnection','SYSDBA','masterkey');
Command:= DBCon.CreateCommand;
Command.Text := 'SELECT descricao FROM perfil WHERE perfilid = '+IntToStr(FPerfilID);
Reader := Command.ExecuteQuery;

if Reader.Next then
Result := Reader.Value[0].GetAnsiString;
end
else
MessageDlg('É necessário está logado para invocar este método !!',mtWarning,[mbOK],0);
end;

function TUsuario.GetPerfilName: string;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
begin
if FLogado then
Begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('FBConnection','SYSDBA','masterkey');
Command:= DBCon.CreateCommand;
Command.Text := 'SELECT nome FROM perfil WHERE perfilid = '+IntToStr(FPerfilID);
Reader := Command.ExecuteQuery;

if Reader.Next then
Result := Reader.Value[0].GetAnsiString;
end
else
MessageDlg('É necessário está logado para invocar este método !!',mtWarning,[mbOK],0);
end;

function TUsuario.LoadProfile: Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
I: Integer;
Nm, Pr: String;
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('FBConnection','SYSDBA','masterkey');
Command:= DBCon.CreateCommand;
Command.Text := 'SELECT name, permissao FROM perfil_conf WHERE perfilid= '+IntToStr(FPerfilID);
Reader := Command.ExecuteQuery;

while Reader.Next do
Nm := Reader.Value[0].GetAnsiString;
Pr := Reader.Value[1].GetAnsiString;
begin
  for I := 0 to Pred(FAcoes.ActionCount) do
  begin
    if TAction(FAcoes.Actions[I]).Name = Nm then
    begin
      TAction(FAcoes.Actions[I]).Enabled := 'V' = Pr;
      break;
    end;
  end;
end;
Result := True;
end;

function TUsuario.Login(AUsuario, Asenha: String;
  Acoes: TCustomActionList): Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('FBConnection','SYSDBA','masterkey');
Command:= DBCon.CreateCommand;
Command.Text := 'SELECT * FROM usuarios WHERE login = '+QuotedStr(AUsuario)+
                                        'and senha = '+QuotedStr(ASenha);
Reader := Command.ExecuteQuery;

if Reader.Next then
begin
  FID :=       Reader.Value[0].GetInt32;
  FperfilID := Reader.Value[1].GetInt32;
  FNome :=     Reader.Value[2].GetAnsiString;
  FLogin :=    Reader.Value[6].GetAnsiString;
  FSenha :=    Reader.Value[7].GetAnsiString;
  FLogado := True;
  FAcoes := Acoes;
  if LoadProfile then
  Result:=    True
  else
  MessageDlg('É necessário está logado para invocar este método !!',mtWarning,[mbOK],0);
end;
end;

end.

obs: outras coisas que percebi. no meu DataModule os comandos em sql estão todos assim >> select * from "tabela" << ou seja, o nome da tabela está sempre entre aspas duplas.

Na minha classe usuários o select ta normal >> select * from tabela where id = blablabla <<< , porém quando eu mudo para >> select * from "tabela" where "id" = blablaba << o erro para mais no final ele da outro erro dizendo que o Reader nãao tem mais rows (no more rows for reader ou algo do tipo).

obs2: no meu proprio ibexpert fiz o teste, se eu por >> select * from tabela where qualquercoisa = 'blabla' << ele não funciona mais se eu por select * from "tabela" where "qualquercoisa" = 'blabla' << ele pesquisa direitinho e me mostra os resultados;

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...