Fórum Classe Usuario Delphi 2010 x DBX4 x sqlServer #380133
26/06/2010
0
Frigorifico Sa
Curtir tópico
+ 0Posts
26/06/2010
Wesley Yamazack
Compilei o projeto no Delphi 2010, e compilou, só deu erro no uDM pois eu não tenho o mesmo, qual é o erro ?
O que esta acontecendo ?
Qual mensagem de erro?
Quem fez esta classe TUsuario ?
Att,
Wesley Y
Gostei + 0
26/06/2010
Frigorifico Sa
Gostei + 0
26/06/2010
Wesley Yamazack
Você deve colocar o nome da Conexao que você criou no DataExplorer e não o nome do servidor/banco
AO invés de
'SDL77\SQLEXPRESS'
Coloque , que por sua vez deve ser montado no DataExplorer.
BDSDL77
Veja se isso irá resolver o seu problema. Senão resolver me diga o erro que acontece.
Att,
Wesley Y
Gostei + 0
26/06/2010
Frigorifico Sa
Quem fez esta classe TUsuario ?
Rodrigo Carreiro Mourão Curso Online
Curso online:Rad Studio 2007-DBX4 e Firebird 2.0-Aplicação comercial de vendas(básico) do Inicio ao Fim Vídeo
19) Criando todos os métodos que serão utilizados pela classe usuário
Descrição: Veremos também o DBX que poucas pessoas conhecem, classes como TDBXConnection, TDBXCommand e outras mais. |
[Marcar este item como lido/assistido] .
Gostei + 0
26/06/2010
Wesley Yamazack
Peguei o mesmo exemplo que você fez, e modifiquei para o MySQL, a unica coisa que tive que fazer foi adicionar no Data Explorer uma conexão com o MySQL, pois existe um arquivo na pasta C:\Users\Public\Documents\RAD Studio\dbExpress\7.0\ dbxconnections, no qual o DBExpress utiliza para fazer e armazenar as conexões.
function TUsuario.Login(AUsuario, ASenha: String; Acoes: TCustomActionList): Boolean; var DBCon: TDBXConnection; Command: TDBXCommand; Reader: TDBXReader; begin DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection ('BDAPM', 'root', 'root'); Command := DBCon.CreateCommand; Command.Text := 'SELECT * FROM USUARIO WHERE DESCRICAO = ' + 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[4].GetAnsiString; FSenha := Reader.Value[5].GetAnsiString; FLogado := True; FAcoes := Acoes; if LoadProfile then Result := True else MessageDlg('Não foi possível carregar o perfil !!', mtWarning, [mbOK], 0); end; end;Depois de criar o Data Explorere eu dei Uses em DBXMySQL, e você terá que dar uses em DBXMSSQL
unit uUsuario;
interface
uses ActnList, DBXCommon, SqlExpr, DBXMySql;
type TPermissao = record Incluir: Boolean; Excluir: Boolean; Alterar: Boolean; Consultar: Boolean; Imprimir: Boolean; end;Você criou a sua conexão no Data Explorer ?
R:
O que seria " Invalid argument: TESTE " ? O nome da Sua conexão ?
R:
Observação :
Gostei da classe TUsuario , mas não gostei da "engessada" que você deu, dando uses em uDM, e utilizando os recursos do DataModule, cada classe uma Responsabilidade. Mas isso é só uma dica meu velho.
Att,
Wesley Y
Gostei + 0
26/06/2010
Frigorifico Sa
ActnList, DBXCommon, TBODbxDynalink; type
TPermissao = record
Incluir: Boolean;
Excluir: Boolean;
Alterar: Boolean;
Consultar: Boolean;
Imprimir: Boolean;
end; TUsuario = class
private
FID: Integer;
FSenha: String;
FLogin: String;
FNome: String;
FPerfilID: Integer;
FLogado: Boolean;
FAcoes: TCustomActionList;
class var FInstance: TUsuario;
constructor CreatePrivate;
{ 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;
function IsMaster: Boolean;
function GetPermissao(AFormulario: String): TPermissao;
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;
{ TUsuario } function TUsuario.ChangePassword(strOldPassword,
strNewPassword: String): Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
T: TDBXTransaction;
begin
if FLogado then
begin
if FSenha = strOldPassword then
Begin
try
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
T := DBCon.BeginTransaction;
Command := DBCon.CreateCommand;
Command.Text := 'UPDATE USUARIOS SET SENHA = '+QuotedStr(strNewPassword)+
' WHERE USUARIOID = '+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
else
MessageDlg('É necessário está logado para invocar este método !!',mtWarning,[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('DBVENDAS','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('DBVENDAS','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.GetPermissao(AFormulario: String): TPermissao;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
Temp: TPermissao;
begin
if FLogado then
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
Command := DBCon.CreateCommand;
Command.Text := 'SELECT INCLUIR, EXCLUIR, ALTERAR, CONSULTAR, IMPRIMIR '+
' FROM ACESSOS WHERE USUARIOID = '+IntToStr(ID)+
' AND FORMULARIO = '+QuotedStr(AFormulario);
Reader := Command.ExecuteQuery;
if Reader.Next then
begin
Temp.Incluir := Reader.Value[0].GetAnsiString = 'S';
Temp.Excluir := Reader.Value[1].GetAnsiString = 'S';
Temp.Alterar := Reader.Value[2].GetAnsiString = 'S';
Temp.Consultar := Reader.Value[3].GetAnsiString = 'S';
Temp.Imprimir := Reader.Value[4].GetAnsiString = 'S';
end
else
begin
Temp.Incluir := True;
Temp.Excluir := True;
Temp.Alterar := True;
Temp.Consultar := True;
Temp.Imprimir := True;
end;
Result := Temp;
end
else
MessageDlg('É necessário está logado para invocar este método !!',mtWarning,[mbOK],0);
end; function TUsuario.IsMaster: Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
Command := DBCon.CreateCommand;
Command.Text := 'SELECT MASTER FROM USUARIOS WHERE USUARIOID = '+IntToStr(ID);
Reader := Command.ExecuteQuery; if Reader.Next then
begin
Result := Reader.Value[0].GetAnsiString = 'S';
end;
end; function TUsuario.LoadProfile: Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
I: Integer;
Nm, Pr : String;
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
Command := DBCon.CreateCommand;
Command.Text := 'SELECT NAME, PREMISSAO FROM PERFIL_CONF WHERE PERFILID = '+IntToStr(FPerfilID);
Reader := Command.ExecuteQuery; while Reader.Next do
begin
Nm := Reader.Value[0].GetAnsiString;
Pr := Reader.Value[1].GetAnsiString;
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('DBVENDAS','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[4].GetAnsiString;
FSenha := Reader.Value[5].GetAnsiString;
FLogado := True;
FAcoes := Acoes;
if LoadProfile then
Result := True
else
MessageDlg('Não foi possível carregar o perfil !!',mtWarning,[mbOK],0);
end;
end; end.
Gostei + 0
26/06/2010
Frigorifico Sa
ActnList, DBXCommon, TBODbxDynalink; type
TPermissao = record
Incluir: Boolean;
Excluir: Boolean;
Alterar: Boolean;
Consultar: Boolean;
Imprimir: Boolean;
end; TUsuario = class
private
FID: Integer;
FSenha: String;
FLogin: String;
FNome: String;
FPerfilID: Integer;
FLogado: Boolean;
FAcoes: TCustomActionList;
class var FInstance: TUsuario;
constructor CreatePrivate;
{ 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;
function IsMaster: Boolean;
function GetPermissao(AFormulario: String): TPermissao;
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;
{ TUsuario } function TUsuario.ChangePassword(strOldPassword,
strNewPassword: String): Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
T: TDBXTransaction;
begin
if FLogado then
begin
if FSenha = strOldPassword then
Begin
try
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
T := DBCon.BeginTransaction;
Command := DBCon.CreateCommand;
Command.Text := 'UPDATE USUARIOS SET SENHA = '+QuotedStr(strNewPassword)+
' WHERE USUARIOID = '+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
else
MessageDlg('É necessário está logado para invocar este método !!',mtWarning,[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('DBVENDAS','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('DBVENDAS','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.GetPermissao(AFormulario: String): TPermissao;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
Temp: TPermissao;
begin
if FLogado then
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
Command := DBCon.CreateCommand;
Command.Text := 'SELECT INCLUIR, EXCLUIR, ALTERAR, CONSULTAR, IMPRIMIR '+
' FROM ACESSOS WHERE USUARIOID = '+IntToStr(ID)+
' AND FORMULARIO = '+QuotedStr(AFormulario);
Reader := Command.ExecuteQuery;
if Reader.Next then
begin
Temp.Incluir := Reader.Value[0].GetAnsiString = 'S';
Temp.Excluir := Reader.Value[1].GetAnsiString = 'S';
Temp.Alterar := Reader.Value[2].GetAnsiString = 'S';
Temp.Consultar := Reader.Value[3].GetAnsiString = 'S';
Temp.Imprimir := Reader.Value[4].GetAnsiString = 'S';
end
else
begin
Temp.Incluir := True;
Temp.Excluir := True;
Temp.Alterar := True;
Temp.Consultar := True;
Temp.Imprimir := True;
end;
Result := Temp;
end
else
MessageDlg('É necessário está logado para invocar este método !!',mtWarning,[mbOK],0);
end; function TUsuario.IsMaster: Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
Command := DBCon.CreateCommand;
Command.Text := 'SELECT MASTER FROM USUARIOS WHERE USUARIOID = '+IntToStr(ID);
Reader := Command.ExecuteQuery; if Reader.Next then
begin
Result := Reader.Value[0].GetAnsiString = 'S';
end;
end; function TUsuario.LoadProfile: Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
I: Integer;
Nm, Pr : String;
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
Command := DBCon.CreateCommand;
Command.Text := 'SELECT NAME, PREMISSAO FROM PERFIL_CONF WHERE PERFILID = '+IntToStr(FPerfilID);
Reader := Command.ExecuteQuery; while Reader.Next do
begin
Nm := Reader.Value[0].GetAnsiString;
Pr := Reader.Value[1].GetAnsiString;
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('DBVENDAS','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[4].GetAnsiString;
FSenha := Reader.Value[5].GetAnsiString;
FLogado := True;
FAcoes := Acoes;
if LoadProfile then
Result := True
else
MessageDlg('Não foi possível carregar o perfil !!',mtWarning,[mbOK],0);
end;
end; end.
Gostei + 0
26/06/2010
Wesley Yamazack
Este exemplo foi feito em Delphi 2007, e o mesmo não tem suporte nativo a Firebird, esta unit senão me engano é do Thiago Borges, um driver de terceiro, que tem um driver nativo para delphi 2007 com Firebird, no teu caso, você não utiliza ela sacou ? Então ela não exite no Delphi 2010, pois já é nativo a sua conexão.
Sacou meu amigo ?
Um abraço
Wesley Y
Gostei + 0
26/06/2010
Frigorifico Sa
Gostei + 0
27/06/2010
Wesley Yamazack
Até segundo meu velho, tente no MySQL e nos falamos.
Att
Wesley Y
Gostei + 0
28/06/2010
Frigorifico Sa
Command := DBCon.CreateCommand;
Command.Text := 'SELECT MASTER FROM USUARIOS WHERE USUARIOID = '+IntToStr(ID); // DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('lojaonline', 'root', 'root');
// Command := DBCon.CreateCommand;
// Command.Text := 'SELECT * FROM USUARIO WHERE DESCRICAO = ' + QuotedStr(AUsuario) + ' and SENHA = ' + QuotedStr(ASenha); Att, Ricardo Horoi
Gostei + 0
28/06/2010
Frigorifico Sa
Gostei + 0
28/06/2010
Wesley Yamazack
Teria como você mandar seu projeto, não completo mas somente o que necessário para poder analisar aqui e fazer uns testes, seu banco de dados também, fique tranquilo que seus dados não serão utilizados para outros fins.
Fico no aguardo meu amigo.
Wesley Y
Gostei + 0
28/06/2010
Frigorifico Sa
Gostei + 0
28/06/2010
Wesley Yamazack
Você essa aplicação esta em firebird, e não em MySql e também esta em Delphi 2007. Usando o Driver do Thiago Borges, queria a aplicação com MySQL, e a classe do Usuário que ta dando erro,somente, para ficar mais simples de achar este erro, entende ? Manda o Script Banco MySQL pra poder testar.
Att,
Wesley Y
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)