Fórum problema com variavel global.. #424753
26/09/2012
0
No meu form menu declarado tenho um statusbar onde eu gostaria que fosse mostrado o usuario logado..
Declarei uma variavel global para poder acumular o valor do login ao entrar sistema..
form login
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, StdCtrls;
type
Tfrmprincipal = class(TForm)
editusuario: TEdit;
editsenha: TEdit;
Label1: TLabel;
Label2: TLabel;
btnconfirmar: TButton;
btnsair: TButton;
procedure btnconfirmarClick(Sender: TObject);
procedure btnsairClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
contador: smallint;
function logvalido(const usuario, senha: string): Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
frmprincipal: Tfrmprincipal;
usuariologado: string; >> variável global..
implementation
uses Unit2, Unit4, Unit6;
{$R *.dfm}
tentei pegar o usuario logado dentro da função
function Tfrmprincipal.logvalido(const usuario, senha: string): Boolean;
begin
with DM.ADOconexaologin, DM.ClientDataSetlogin do
begin
if not connected then
connected :=true;
DM.ClientDataSetlogin.Close;
DM.ClientDataSetlogin.commandtext := 'select count(1) from administrador ' + 'where upper(usuario) = '+ Quotedstr(AnsiupperCase(trim(usuario))) + 'and senha = '+ Quotedstr(trim(senha));
DM.ClientDataSetlogin.Open;
result := (Fields[0].AsInteger > 0);
frmprincipal.usuariologado:=usuario;
end;
mas dá erro nesta linha..>[b]frmprincipal.usuariologado:=usuario;[/b]
o erro diz que usuariologado não está identificado..
o frmmenu tá como autocreat e o frmlogin como available form
funciona a senha o login tudo sabe..mas nao carrega a variavel global..
grato a quem possa ajudar..
Mauricio Nicoli
Curtir tópico
+ 0Posts
26/09/2012
Joel Rodrigues
Boa sorte.
Gostei + 0
26/09/2012
Mauricio Nicoli
fiz isso..
só que ao rodar o sistema dentro do statubar retornou este erro no formmenu onde tem o statusbar ele tranca nesta linha
[b]statusbar1.panels[3].text:='usuário:' + usuariologado;[b]
neste caso ele não identifica a variavel usuariologado
Gostei + 0
26/09/2012
Mauricio Nicoli
public
usuariologado: string; //>> variável global..
{ Public declarations }
end;
só que dá erro aqui dentro do statusbar...ele ta em outro form...
statusbar1.Panels[3].Text := 'usuário:' + usuariologado;
ele não identifica a variável [b]usuariologado [/b]
Gostei + 0
26/09/2012
Joel Rodrigues
Sugeri que declarasse na seção public exatamente para poder acessar de outros forms, mas é preciso ter uma instância.
Gostei + 0
26/09/2012
Claudia Nogueira
public
usuariologado: string; //>> variável global..
{ Public declarations }
end;
só que dá erro aqui dentro do statusbar...ele ta em outro form...
statusbar1.Panels[3].Text := 'usuário:' + usuariologado;
ele não identifica a variável [b]usuariologado [/b]
Vai no DataModule que uma arquivo que provavelmente vai estar referenciado em quase tudo e cria lá em cima depois dos Uses. Um exemplo:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
Var
usuariologado: string;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Olha lá em cima o "usuariologado: string;".
Esse "usuariologado" pode ser usado direto em qualquer form ou unit que o DataModule esteja referenciado.
Gostei + 0
27/09/2012
Alisson Santos
Gostei + 0
27/09/2012
Mauricio Nicoli
Esse "usuariologado" pode ser usado direto em qualquer form ou unit que o DataModule esteja referenciado.
fiz isso só não deu certo ainda..
fiz em teste..
coloquei no formmenu na uses o datamodulo...
ai debuguei meu código..vejam só..
aqui continua igual...
formlogin
public
usuariologado: string; //>> variável global..
{ Public declarations }
end;
debuguei dentro da função no frmlogin..
function Tfrmprincipal.logvalido(const usuario, senha: string): Boolean; begin with DM.ADOconexaologin, DM.ClientDataSetlogin do begin if not connected then connected :=true; DM.ClientDataSetlogin.Close; DM.ClientDataSetlogin.commandtext := 'select count(1) from administrador ' + 'where upper(usuario) = '+ Quotedstr(AnsiupperCase(trim(usuario))) + 'and senha = '+ Quotedstr(trim(senha)); DM.ClientDataSetlogin.Open; result := (Fields[0].AsInteger > 0); frmprincipal.usuariologado:=usuario; >>>>debuguei aqui ok end;
ao passar o mouse em cima da variável [b]usuario[/b] aparece o nome que digitei ao entrar no sistema
ao passar o mouse em cima de [b]usuariologado[/b] na mesma linha diz " usuariologado='' "
ou seja..a variavel global não tá recebendo o valor que a variavel usuario tem..e tem mesmo..ta certo..
como posso corrigir isso se apenas ela não ta recebendo o valor informado que foi digitado?
Gostei + 0
27/09/2012
Alisson Santos
Esse "usuariologado" pode ser usado direto em qualquer form ou unit que o DataModule esteja referenciado.
fiz isso só não deu certo ainda..
fiz em teste..
coloquei no formmenu na uses o datamodulo...
ai debuguei meu código..vejam só..
aqui continua igual...
formlogin
public
usuariologado: string; //>> variável global..
{ Public declarations }
end;
debuguei dentro da função no frmlogin..
function Tfrmprincipal.logvalido(const usuario, senha: string): Boolean; begin with DM.ADOconexaologin, DM.ClientDataSetlogin do begin if not connected then connected :=true; DM.ClientDataSetlogin.Close; DM.ClientDataSetlogin.commandtext := 'select count(1) from administrador ' + 'where upper(usuario) = '+ Quotedstr(AnsiupperCase(trim(usuario))) + 'and senha = '+ Quotedstr(trim(senha)); DM.ClientDataSetlogin.Open; result := (Fields[0].AsInteger > 0); frmprincipal.usuariologado:=usuario; >>>>debuguei aqui ok end;
Amigo desculpe não entendi o porque está fazendo a chamada de dentro dessa função.
Essa função está em outra unit, se estiver pode fazer assim.
1 - Cria o objeto que é a nova unit sua
Unit1 := TUnit1.Create(Self);
Após a criação você pode ter acesso aos metodos e atributos que foi criado dentro dele, ai você poderia fazer desse jeito.
StatusBar1.Panels[0].Text := unit1.(Nome da variavel que recebe esse valor).
Pelo que pude analisar é outra unit.
Qualquer coisa só informar se é ou não outra unit que eu deixo o trecho para você aqui como faz.
Gostei + 0