problema com variavel global..
amigos..já to finalizando meu projeto de tcc..depois tem algumas melhorias que vou fazer nele antes de implantar na empresa..mas para entregar na escola preciso antes de um auxilio..
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
tentei pegar o usuario logado dentro da função
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..
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
Curtidas 0
Respostas
Joel Rodrigues
26/09/2012
Declarando nesse ponto, a variável pertence a Unit e não ao form. Declare-a na seção public do form, um pouco mais acima de onde você declarou. O que pertence ao form deve ficar dentro do código que o define, ou seja dentro da definição da classe.
Boa sorte.
Boa sorte.
GOSTEI 0
Mauricio Nicoli
26/09/2012
ok
fiz isso..
só que ao rodar o sistema dentro do statubar retornou este erro no formmenu onde tem o statusbar ele tranca nesta linha
neste caso ele não identifica a variavel usuariologado
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
Mauricio Nicoli
26/09/2012
fiz isso..
só que dá erro aqui dentro do statusbar...ele ta em outro form...
ele não identifica a variável [b]usuariologado [/b]
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
Joel Rodrigues
26/09/2012
Se a variável está em outro form, amigo, você não vai conseguir acessá-la assim. Você precisa ter uma instância do form que contém a variável e usá-la, por exemplo, assim: meuForm.usuariologado;
Sugeri que declarasse na seção public exatamente para poder acessar de outros forms, mas é preciso ter uma instância.
Sugeri que declarasse na seção public exatamente para poder acessar de outros forms, mas é preciso ter uma instância.
GOSTEI 0
Claudia Nogueira
26/09/2012
fiz isso..
só que dá erro aqui dentro do statusbar...ele ta em outro form...
ele não identifica a variável [b]usuariologado [/b]
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
Alisson Santos
26/09/2012
Se for só para trazer o uruário logado não precisaria, poderia utilizar uma outra rotina que na hora que confirmar o usuário e senha e entrar no sistema, você poderia já jogar essa informação para o statusbar direto.
GOSTEI 0
Mauricio Nicoli
26/09/2012
[Quote]Olha lá em cima o "usuariologado: string;".
Esse "usuariologado" pode ser usado direto em qualquer form ou unit que o DataModule esteja referenciado.
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
Alisson Santos
26/09/2012
[Quote]Olha lá em cima o "usuariologado: string;".
Esse "usuariologado" pode ser usado direto em qualquer form ou unit que o DataModule esteja referenciado.
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
Mauricio Nicoli
26/09/2012
amigo esta função
está dentro na unit do formlogin onde está também a variavel global..o form login vem antes do frmmenu..
o statusbar está dentro do formmenu ok
estou tentando fazer o login do usuario aparecer dentro dele..
ao debugar a linha
vi que a variavel usuariologado está recebendo '' sendo que a variavel usuario ta carregando o valor do edit corretamente..
não sei se não escolhi o melhor lugar para carregar a variavel glogal mas apenas o que ta ocorrendo
é que a variavel usuariologado não ta recebendo o valor certo..
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;
está dentro na unit do formlogin onde está também a variavel global..o form login vem antes do frmmenu..
o statusbar está dentro do formmenu ok
estou tentando fazer o login do usuario aparecer dentro dele..
ao debugar a linha
frmprincipal.usuariologado:=usuario
vi que a variavel usuariologado está recebendo '' sendo que a variavel usuario ta carregando o valor do edit corretamente..
não sei se não escolhi o melhor lugar para carregar a variavel glogal mas apenas o que ta ocorrendo
é que a variavel usuariologado não ta recebendo o valor certo..
GOSTEI 0
Bruno Leandro
26/09/2012
sera que a sua variavel 'usuario' nao esta vazia, nao seria a mesma coisa(ou melhor) utilizar o 'editNomeUsuario.text' para atribuir a sua variavel do form principal
GOSTEI 0
Patricia Menezes
26/09/2012
Meu nobre sem instanciar a Classe que quer pegar
a variável global nunca irá conseguir.
uses Unit1; procedure TForm2.FormShow(Sender: TObject); Var //Veriável Form1 que instaciará TForm1 Form1 : TForm1; begin //É necessário fazer a instância da Classe Form1 := TForm1.Create(nil); //Pegue onde quiser a variável global Form2.Caption := Form1.usuariologado; end;
GOSTEI 0